8.3. Examples (Exemples)
8.3. Examples (Exemples)
L'exemple SDP Offer/Answer ci-dessous suppose que les deux parties envoient et reçoivent. Seules les parties SDP relatives au média et au codec sont montrées; certaines lignes sont coupées pour la mise en page.
Message SDP de l'offrant vers le répondant:
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
L'offre propose la même configuration de codec en trois formats de paquetisation. Le type de charge utile 98 est le mode single NALU, 99 le mode non entrelacé, 100 le mode entrelacé. Dans ce dernier cas, les paramètres d'entrelacement que l'offrant utiliserait si la réponse indique le support du type 100 sont inclus. Dans les trois cas, sprop-parameter-sets transporte les jeux de paramètres initiaux dont le répondant a besoin pour recevoir le flux de l'offrant si cette configuration est acceptée. Les valeurs de sprop-parameter-sets peuvent différer selon le type de charge utile.
Message SDP du répondant vers l'offrant:
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
La négociation Offer/Answer couvre les flux d'envoi et de réception: l'offre décrit ce que l'offrant accepte de recevoir, la réponse ce que le répondant accepte de recevoir. Ici l'offrant propose le type 98 pour réception. Le répondant accepte avec le type équivalent 97 (mêmes profile-level-id et packetization-mode; packetization-mode 0 et absence de sprop-deint-buf-req). Comme 98 est accepté, le répondant doit conserver les jeux de sprop-parameter-sets=<parameter sets data#0> au cas où l'offrant retiendrait cette configuration. Dans la réponse, sprop-parameter-sets=<parameter sets data#3> contient les jeux pour le flux répondant→offrant si cette configuration est utilisée.
Le répondant accepte aussi les configurations des types 99 et 100 et doit conserver sprop-parameter-sets=<parameter sets data#1> et =<parameter sets data#2> si l'offrant en choisit une. Pour 99 et 100, il fournit les jeux initiaux répondant→offrant dans =<parameter sets data#4> et =<parameter sets data#5>. deint-buf-cap indique la limite mémoire de désentrelacement; utile surtout si l'offrant envoie une seconde offre. max-rcmd-nalu-size=3980 signifie traitement efficace jusqu'à cette taille de NALU; le réseau ne le garantit pas.
L'exemple suivant suppose acceptation sans abaissement de niveau (niveau par défaut 3.0); l'offre contient sprop-parameter-sets et sprop-level-parameter-sets. Le répondant IGNORE sprop-level-parameter-sets=<parameter sets data#1> et conserve sprop-parameter-sets=<parameter sets data#0> pour le décodage. L'offrant conserve sprop-parameter-sets=<parameter sets data#2> de la réponse; ces jeux sont au niveau 3.0.
Offre 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>
Réponse 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>
Exemple suivant: offre Baseline niveau 1.1, acceptée en niveau 1b; les deux sprop-* sont dans l'offre. Le répondant ignore sprop-parameter-sets=<parameter sets data#0> et tout jeu de sprop-level-parameter-sets=<parameter sets data#1> qui n'appartient pas au 1b; il utilise les jeux 1b de sprop-level-parameter-sets. L'offrant conserve sprop-parameter-sets=<parameter sets data#2> (niveau 1b).
Offre 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>
Réponse 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
Répondant hérité RFC 3984 sans compréhension de sprop-level-parameter-sets et sans use-level-src-parameter-sets: les deux sprop-* de l'offre sont ignorés; l'offrant DOIT envoyer in-band.
Offre 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>
Réponse 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
Sans abaissement de niveau, seulement sprop-parameter-sets dans l'offre: =<parameter sets data#0> pour encodeur offrant / décodeur répondant; =<parameter sets data#1> dans la réponse pour encodeur répondant / décodeur offrant; les deux sont en grande partie indépendants.
Offre 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>
Réponse 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>
Sans sprop-parameter-sets ni sprop-level-parameter-sets: transport uniquement in-band.
Offre 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
Réponse 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
Abaissement de niveau avec sprop-parameter-sets dans l'offre: =<parameter sets data#0> au niveau 3.0, la réponse veut 2.0 → le répondant ignore, in-band nécessaire.
Offre 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>
Réponse 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
Abaissement de niveau sans sprop-* dans l'offre: également in-band seulement.
Offre 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
Réponse 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
Élévation de niveau, pas de sprop-*: in-band. Offrant→répondant niveau 3.0, répondant→offrant 2.0; avec level-asymmetry-allowed=1.
Offre 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
Réponse 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
Topologie MCU Topo-Video-switch-MCU [29]: l'offrant collecte hors bande les jeux de B, C, D; le répondant A fournit les siens. CNAME→SSRC; même configuration codec. A associe <parameter sets data#B> etc. aux sources et ne décode qu'avec les jeux adaptés à chaque source RTP.
Offre 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
Réponse 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