Skip to content

Video call negotiation

Signalling - video-call

SIG-02 - status: draft - audio, video

A call is video-capable iff its <offer> carries a <video> child; the group fan-out notice signals video via media="video".

1:1 offer. A video-capable <offer> MUST carry a <video> child in addition to its <audio enc="opus" rate="…"> advertisements (see call-offer). The <video> marker is additive: the <audio> advertisements are identical in the audio-only and video cases.

<offer call-id call-creator>
  <audio enc="opus" rate="8000"/>
  <audio enc="opus" rate="16000"/>
  <video/>                          <!-- present ⇒ video call -->
</offer>
  • A receiver MUST treat the call as video iff the <offer> contains at least one <video> child, audio-only otherwise (is_video = any child tag == "video").
  • A receiver MUST NOT require any attribute on <video>; element presence is the signal.
  • A receiver MUST parse and honour the <audio> advertisements of a video offer exactly as for an audio-only offer.

Group fan-out notice. A video call announced via <offer_notice> (see group-call) carries media="video" as an attribute (not a child; audio uses media="audio"). A receiver MUST treat the call as video iff media == "video". type == "group" independently marks it a group call.

Answering. The callee answers a video offer with the same <preaccept> / <accept> handshake as audio-only (see call-accept, call-preaccept); the accept negotiates the <audio> rate as usual. No video-specific child in <accept> is required to accept the audio portion.

Requires: call-offer, group-call, call-accept, call-preaccept

Implemented by

Flavor Status Source Notes
whatsapp-rust working history - blame - commits 674e851 Parses the
zapo-caller partial Signalling/relay stack present; video-offer construction not covered.

Annotation wacrg:SIG-02 — a flavor marks its implementation site in source with this comment; a script clones the source, finds it, and attaches the commit blame/permalink.

Contributors

Contributor Role
Rajeh Taher Rajeh Taher wrote initial spec

protocol history / diff - blame

Open questions - Attributes (if any) carried on the

References - RFC 3711 — SRTP

Changelog

  • 2026-06-21 — Initial spec entry.

Back to the full spec