8.3. Examples (Beispiele)
8.3. Examples (Beispiele)
Das folgende SDP-Offer/Answer-Beispiel geht davon aus, dass beide Seiten senden und empfangen. Es sind nur die medien- und codec-spezifischen SDP-Teile dargestellt; einige Zeilen sind aus Layoutgründen umgebrochen.
SDP-Nachricht Anbietender → Antwortender:
m=video 49170 RTP/AVP 100 99 98
a=rtpmap:98 H264/90000
a=fmtp:98 profile-level-id=42A01E; packetization-mode=0; sprop-parameter-sets=<parameter sets data#0>
a=rtpmap:99 H264/90000
a=fmtp:99 profile-level-id=42A01E; packetization-mode=1; sprop-parameter-sets=<parameter sets data#1>
a=rtpmap:100 H264/90000
a=fmtp:100 profile-level-id=42A01E; packetization-mode=2; sprop-parameter-sets=<parameter sets data#2>; sprop-interleaving-depth=45; sprop-deint-buf-req=64000; sprop-init-buf-time=102478; deint-buf-cap=128000
Das Angebot listet dieselbe Codec-Konfiguration in drei Packetization-Formaten. Payload-Typ 98: Single-NALU-Modus; 99: non-interleaved; 100: interleaved. Im interleaved-Fall sind die Verschachtelungsparameter enthalten, die der Anbietende nutzen würde, wenn die Antwort Payload-Typ 100 unterstützt. In allen Fällen liefert sprop-parameter-sets die initialen Parametersätze, die der Antwortende beim Empfang vom Anbietenden nach Annahme dieser Konfiguration benötigt. Die Werte von sprop-parameter-sets können pro Payload-Typ unterschiedlich sein.
SDP-Nachricht Antwortender → Anbietender:
m=video 49170 RTP/AVP 100 99 97
a=rtpmap:97 H264/90000
a=fmtp:97 profile-level-id=42A01E; packetization-mode=0; sprop-parameter-sets=<parameter sets data#3>
a=rtpmap:99 H264/90000
a=fmtp:99 profile-level-id=42A01E; packetization-mode=1; sprop-parameter-sets=<parameter sets data#4>; max-rcmd-nalu-size=3980
a=rtpmap:100 H264/90000
a=fmtp:100 profile-level-id=42A01E; packetization-mode=2; sprop-parameter-sets=<parameter sets data#5>; sprop-interleaving-depth=60; sprop-deint-buf-req=86000; sprop-init-buf-time=156320; deint-buf-cap=128000; max-rcmd-nalu-size=3980
Da Offer/Answer Sende- und Empfangsströme umfasst, beschreibt das Angebot, was der Anbietende empfangen will, und die Antwort, was der Antwortende empfangen will. Hier hat der Anbietende Payload-Typ 98 zum Empfang angeboten. Der Antwortende akzeptiert mit äquivalentem Typ 97 (identische profile-level-id und packetization-mode; packetization-mode 0 und kein sprop-deint-buf-req). Da 98 akzeptiert wurde, muss der Antwortende die Sätze aus sprop-parameter-sets=<parameter sets data#0> vorhalten, falls das Angebot diese Konfiguration wählt. In der Antwort stehen in sprop-parameter-sets=<parameter sets data#3> die Sätze für den Strom Antwortender→Anbietender bei Nutzung dieser Konfiguration.
Der Antwortende akzeptiert auch die Konfigurationen der Typen 99 und 100 und muss entsprechend sprop-parameter-sets=<parameter sets data#1> und =<parameter sets data#2> puffern. Für 99 und 100 liefert er initiale Sätze für Antwortender→Anbietender in =<parameter sets data#4> bzw. =<parameter sets data#5>. deint-buf-cap teilt die De-Interleaving-Speichergrenze mit; sie ist vor allem bei einem zweiten Angebot nützlich. max-rcmd-nalu-size=3980 bedeutet effiziente Verarbeitung bis zu dieser NALU-Größe; das Netz garantiert das nicht.
Im folgenden Beispiel wird ohne Level-Downgrade (Standard-Level 3.0) akzeptiert; im Angebot stehen sprop-parameter-sets und sprop-level-parameter-sets. Der Antwortende IGNORIERT sprop-level-parameter-sets=<parameter sets data#1> und speichert sprop-parameter-sets=<parameter sets data#0> zur Dekodierung. Der Anbietende speichert sprop-parameter-sets=<parameter sets data#2> aus der Antwort; diese Sätze gehören zu Level 3.0.
Angebot SDP:
m=video 49170 RTP/AVP 98
a=rtpmap:98 H264/90000
a=fmtp:98 profile-level-id=42A01E; //Baseline profile, Level 3.0 packetization-mode=1; sprop-parameter-sets=<parameter sets data#0>; sprop-level-parameter-sets=<parameter sets data#1>
Antwort SDP:
m=video 49170 RTP/AVP 98
a=rtpmap:98 H264/90000
a=fmtp:98 profile-level-id=42A01E; //Baseline profile, Level 3.0 packetization-mode=1; sprop-parameter-sets=<parameter sets data#2>
Nächstes Beispiel: Angebot Baseline Level 1.1, akzeptiert mit Level 1b; beide sprop-* im Angebot. Antwortender ignoriert sprop-parameter-sets=<parameter sets data#0> und alle nicht zu Level 1b gehörenden Sätze in sprop-level-parameter-sets=<parameter sets data#1>; er nutzt die Level-1b-Sätze aus sprop-level-parameter-sets. Anbietender speichert sprop-parameter-sets=<parameter sets data#2> (Level 1b).
Angebot SDP:
m=video 49170 RTP/AVP 98
a=rtpmap:98 H264/90000
a=fmtp:98 profile-level-id=42A00B; //Baseline profile, Level 1.1 packetization-mode=1; sprop-parameter-sets=<parameter sets data#0>; sprop-level-parameter-sets=<parameter sets data#1>
Antwort SDP:
m=video 49170 RTP/AVP 98
a=rtpmap:98 H264/90000
a=fmtp:98 profile-level-id=42B00B; //Baseline profile, Level 1b packetization-mode=1; sprop-parameter-sets=<parameter sets data#2>; use-level-src-parameter-sets=1
Legacy RFC-3984-Antwortender ohne Verständnis von sprop-level-parameter-sets und ohne use-level-src-parameter-sets: beide sprop-* im Angebot werden ignoriert; Anbietender MUSS in-band senden.
Angebot SDP:
m=video 49170 RTP/AVP 98
a=rtpmap:98 H264/90000
a=fmtp:98 profile-level-id=42A00B; //Baseline profile, Level 1.1 packetization-mode=1; sprop-parameter-sets=<parameter sets data#0>; sprop-level-parameter-sets=<parameter sets data#1>
Antwort SDP:
m=video 49170 RTP/AVP 98
a=rtpmap:98 H264/90000
a=fmtp:98 profile-level-id=42B00B; //Baseline profile, Level 1b packetization-mode=1
Ohne Level-Downgrade, nur sprop-parameter-sets im Angebot: =<parameter sets data#0> für Encoder Anbietender / Decoder Antwortender; =<parameter sets data#1> in der Antwort für Encoder Antwortender / Decoder Anbietender; die beiden sind weitgehend unabhängig.
Angebot SDP:
m=video 49170 RTP/AVP 98
a=rtpmap:98 H264/90000
a=fmtp:98 profile-level-id=42A01E; //Baseline profile, Level 3.0 packetization-mode=1; sprop-parameter-sets=<parameter sets data#0>
Antwort SDP:
m=video 49170 RTP/AVP 98
a=rtpmap:98 H264/90000
a=fmtp:98 profile-level-id=42A01E; //Baseline profile, Level 3.0 packetization-mode=1; sprop-parameter-sets=<parameter sets data#1>
Ohne sprop-parameter-sets und ohne sprop-level-parameter-sets: nur in-band-Transport.
Angebot SDP:
m=video 49170 RTP/AVP 98
a=rtpmap:98 H264/90000
a=fmtp:98 profile-level-id=42A01E; //Baseline profile, Level 3.0 packetization-mode=1
Antwort SDP:
m=video 49170 RTP/AVP 98
a=rtpmap:98 H264/90000
a=fmtp:98 profile-level-id=42A01E; //Baseline profile, Level 3.0 packetization-mode=1
Level-Downgrade mit sprop-parameter-sets im Angebot: =<parameter sets data#0> zeigt Level 3.0, Antwort will 2.0 → Antwortender ignoriert, in-band nötig.
Angebot SDP:
m=video 49170 RTP/AVP 98
a=rtpmap:98 H264/90000
a=fmtp:98 profile-level-id=42A01E; //Baseline profile, Level 3.0 packetization-mode=1; sprop-parameter-sets=<parameter sets data#0>
Antwort SDP:
m=video 49170 RTP/AVP 98
a=rtpmap:98 H264/90000
a=fmtp:98 profile-level-id=42A014; //Baseline profile, Level 2.0 packetization-mode=1
Level-Downgrade ohne sprop-* im Angebot: ebenfalls nur in-band.
Angebot SDP:
m=video 49170 RTP/AVP 98
a=rtpmap:98 H264/90000
a=fmtp:98 profile-level-id=42A01E; //Baseline profile, Level 3.0 packetization-mode=1
Antwort SDP:
m=video 49170 RTP/AVP 98
a=rtpmap:98 H264/90000
a=fmtp:98 profile-level-id=42A014; //Baseline profile, Level 2.0 packetization-mode=1
Level-Upgrade, keine sprop-*: in-band. Offerer→Answerer Level 3.0, Answerer→Offerer 2.0; mit level-asymmetry-allowed=1.
Angebot SDP:
m=video 49170 RTP/AVP 98
a=rtpmap:98 H264/90000
a=fmtp:98 profile-level-id=42A014; //Baseline profile, Level 2.0 packetization-mode=1; level-asymmetry-allowed=1
Antwort SDP:
m=video 49170 RTP/AVP 98
a=rtpmap:98 H264/90000
a=fmtp:98 profile-level-id=42A01E; //Baseline profile, Level 3.0 packetization-mode=1; level-asymmetry-allowed=1
MCU-Topologie Topo-Video-switch-MCU [29]: Anbietender sammelt außerbandig Sätze von B, C, D; Antwortender A liefert eigene Sätze. CNAME→SSRC; gleiche Codec-Konfiguration. A ordnet <parameter sets data#B> usw. den Quellen zu und dekodiert nur mit den passenden Sätzen pro RTP-Quelle.
Angebot SDP:
m=video 49170 RTP/AVP 98
a=ssrc:SSRC-B cname:CNAME-B
a=ssrc:SSRC-C cname:CNAME-C
a=ssrc:SSRC-D cname:CNAME-D
a=ssrc:SSRC-B fmtp:98 sprop-parameter-sets=<parameter sets data#B>
a=ssrc:SSRC-C fmtp:98 sprop-parameter-sets=<parameter sets data#C>
a=ssrc:SSRC-D fmtp:98 sprop-parameter-sets=<parameter sets data#D>
a=rtpmap:98 H264/90000
a=fmtp:98 profile-level-id=42A01E; //Baseline profile, Level 3.0 packetization-mode=1
Antwort SDP:
m=video 49170 RTP/AVP 98
a=ssrc:SSRC-A cname:CNAME-A
a=ssrc:SSRC-A fmtp:98 sprop-parameter-sets=<parameter sets data#A>
a=rtpmap:98 H264/90000
a=fmtp:98 profile-level-id=42A01E; //Baseline profile, Level 3.0 packetization-mode=1