Skip to main content

Transports and Media

RoIS separates messages from transport. OpenRoIS takes that separation literally: one transport for the control plane, whatever each platform needs behind the adapters, and a separate data plane for media.

One Control Plane​

BoundaryTransportWhy
Application to gatewayWebSocket with TLS, JSON-RPC 2.0Works through firewalls and NAT, native in browsers, supports asynchronous notifications
Gateway to adapterWebSocket with TLS, JSON-RPC 2.0One protocol for every adapter, so the gateway stays paradigm-neutral
Adapter to platformChosen by the adapterROS 2 and DDS, gRPC, IPC, HTTP, or anything else the platform requires

JSON-RPC 2.0 gives the control plane request and response correlation, a standard error object, and notifications for events that the engine pushes to applications. The full mapping is in the wire protocol reference.

Media on a Separate Data Plane​

RoIS 2.0 standardizes stream control through the Streaming Interface, but leaves media encoding and transport to implementations. In OpenRoIS, the engine never touches media: it has no media or WebRTC dependencies and opens no media ports. Audio and video flow directly between the source and the consumer over WebRTC.

RoIS stream controlWebRTC counterpart
set_parameter for encoding and transportSDP offer
connect_stream and its resultsPeer connection established, SDP answer or media URL
notify_stream_statusConnection state changes
suspend_stream, resume_streamTrack disabled or enabled
disconnect_streamPeer connection closed

Keeping media off the control plane lets the gateway scale like any other WebSocket service. Peer-to-peer WebRTC is sufficient for a handful of robots, and a selective forwarding unit can serve larger fleets without any change to the RoIS interface.

:::note Status The control plane is available: the engine routes every rois.stream.* operation to the streaming component and its notify_stream_status events back to the application, and the SDKs expose them. WebRTC media on the data plane is planned: today the mock adapter's VideoStreaming answers a placeholder media_url and no reference component moves real media yet. :::

Commands Versus Streams​

The specification keeps two things apart that are easy to conflate. Speech Synthesis is a command component: the robot speaks text through its own speaker. Audio Streaming and Video Streaming are stream-control components: live media travels between the robot and a remote operator.