Passa al contenuto principale

8.3. Examples (Esempi)

8.3. Examples (Esempi)

L'esempio SDP Offer/Answer seguente assume che entrambe le parti inviino e ricevano. Sono mostrate solo le parti SDP relative a media e codec; alcune righe sono spezzate per il layout.

Messaggio SDP dall'offerente al rispondente:

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'offerta propone la stessa configurazione di codec in tre formati di pacchettizzazione. Il tipo di payload 98 è la modalità single NALU, 99 non interleaved, 100 interleaved. In quest'ultimo caso sono inclusi i parametri di interleaving che l'offerente userebbe se la risposta indica il supporto del tipo 100. In tutti e tre i casi, sprop-parameter-sets trasporta i parameter set iniziali di cui il rispondente ha bisogno per ricevere il flusso dall'offerente se accetta quella configurazione. I valori di sprop-parameter-sets possono differire per tipo di payload.

Messaggio SDP dal rispondente all'offerente:

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 negoziazione Offer/Answer copre flussi in invio e ricezione: l'offerta descrive ciò che l'offerente è disposto a ricevere, la risposta ciò che il rispondente è disposto a ricevere. Qui l'offerente propone il tipo 98 per la ricezione. Il rispondente accetta con il tipo equivalente 97 (stessi profile-level-id e packetization-mode; packetization-mode 0 e assenza di sprop-deint-buf-req). Poiché 98 è accettato, il rispondente deve conservare i set in sprop-parameter-sets=<parameter sets data#0> nel caso l'offerente scelga quella configurazione. Nella risposta, sprop-parameter-sets=<parameter sets data#3> contiene i set per il flusso rispondente→offerente se si usa quella configurazione.

Il rispondente accetta anche le configurazioni dei tipi 99 e 100 e deve conservare sprop-parameter-sets=<parameter sets data#1> e =<parameter sets data#2> se l'offerente ne sceglie una. Per 99 e 100 fornisce i set iniziali rispondente→offerente in =<parameter sets data#4> e =<parameter sets data#5>. deint-buf-cap comunica il limite di memoria per il de-interleaving; utile soprattutto se l'offerente invia una seconda offerta. max-rcmd-nalu-size=3980 indica elaborazione efficiente fino a quella dimensione di NALU; la rete non lo garantisce.

L'esempio seguente assume accettazione senza downgrade di livello (livello predefinito 3.0); nell'offerta compaiono sprop-parameter-sets e sprop-level-parameter-sets. Il rispondente IGNORA sprop-level-parameter-sets=<parameter sets data#1> e memorizza sprop-parameter-sets=<parameter sets data#0> per la decodifica. L'offerente memorizza sprop-parameter-sets=<parameter sets data#2> dalla risposta; tali set sono al livello 3.0.

Offerta 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>

Risposta 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>

Esempio successivo: offerta Baseline livello 1.1, accettata a livello 1b; entrambi i sprop-* sono nell'offerta. Il rispondente ignora sprop-parameter-sets=<parameter sets data#0> e ogni set in sprop-level-parameter-sets=<parameter sets data#1> che non appartiene al 1b; usa i set 1b da sprop-level-parameter-sets. L'offerente memorizza sprop-parameter-sets=<parameter sets data#2> (livello 1b).

Offerta 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>

Risposta 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

Rispondente legacy RFC 3984 senza comprensione di sprop-level-parameter-sets e senza use-level-src-parameter-sets: entrambi i sprop-* dell'offerta sono ignorati; l'offerente DEVE inviare in-band.

Offerta 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>

Risposta 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

Senza downgrade di livello, solo sprop-parameter-sets nell'offerta: =<parameter sets data#0> per codificatore offerente / decodificatore rispondente; =<parameter sets data#1> nella risposta per codificatore rispondente / decodificatore offerente; i due sono in gran parte indipendenti.

Offerta 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>

Risposta 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>

Senza sprop-parameter-setssprop-level-parameter-sets: solo trasporto in-band.

Offerta 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

Risposta 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

Downgrade di livello con sprop-parameter-sets nell'offerta: =<parameter sets data#0> a livello 3.0, la risposta vuole 2.0 → il rispondente ignora, serve in-band.

Offerta 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>

Risposta 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

Downgrade di livello senza sprop-* nell'offerta: ancora solo in-band.

Offerta 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

Risposta 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

Upgrade di livello, nessun sprop-*: in-band. Offerente→rispondente livello 3.0, rispondente→offerente 2.0; con level-asymmetry-allowed=1.

Offerta 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

Risposta 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

Topologia MCU Topo-Video-switch-MCU [29]: l'offerente raccoglie fuori banda i set da B, C, D; il rispondente A fornisce i propri. CNAME→SSRC; stessa configurazione codec. A associa <parameter sets data#B> ecc. alle sorgenti e decodifica solo con i set appropriati per ogni sorgente RTP.

Offerta 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

Risposta 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