Protocol specification
Video
How a video tool sets up a WebRTC session with in-band signaling, and the MJPEG fallback.
Media must not traverse the server. A video tool call establishes a session; WebRTC signaling
rides in-band as symmetric notes; media flows peer-to-peer, or through TURN.
- Establish.
req { method: "screen.live", params: { source, max_height } }→res { video_session_id, codecs: ["h264/baseline", "vp8"], ice_servers: [ ] }.codecsis a list of what is possible; the final choice happens in SDP. - Signal, correlated by
video_session_id:note webrtc.signal { video_session_id, signal: { type: "offer" | "answer", sdp } }- trickle ICE:
signal: { type: "ice", candidate, mid }
- Tear down with
note webrtc.close { video_session_id }from either side. - Fallback (feature
video-mjpeg): auni_streamtool sending one timestamped JPEG per chunk. It is a degraded path and is labelled as such in the announcement.
Cross-NAT video needs TURN infrastructure. Until Attacca operates TURN, WebRTC works only where a
direct or STUN path exists. The Rust macro does not yet accept video tools.