メインコンテンツまでスキップ

8.3. Examples (例)

8.3. Examples (例)

以下の SDP Offer/Answer の例では, 双方が送受信すると仮定する. メディアおよびコーデックに特有の SDP のみを示し, 一部の行はレイアウトのため折り返している.

オファー側から応答側への SDP メッセージ:

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

オファーは同一コーデック構成を 3 つのパケット化形式で列挙する. ペイロード型 98 は single NALU モード, 99 は non-interleaved, 100 は interleaved である. interleaved の場合, 応答が型 100 をサポートするときオファー側が用いるインターリーブパラメータも含まれる. いずれの場合も sprop-parameter-sets は, 応答側がオファー側からのストリームを受信し当該構成を受理するときに必要な初期パラメータセットを運ぶ. sprop-parameter-sets の値はペイロード型ごとに異なってよい.

応答側からオファー側への SDP メッセージ:

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

Offer/Answer は送受信ストリームの両方を扱うため, オファーはオファー側が受信したい内容を, アンサーは応答側が受信したい内容を記述する. 本例ではオファー側は型 98 の受信を提示する. 応答側は等価な型 97 で受理する (profile-level-idpacketization-mode が同一; packetization-mode が 0 で sprop-deint-buf-req がない). 98 が受理されたため, 応答側はオファーがその構成を選ぶ場合に備え sprop-parameter-sets=<parameter sets data#0> のセットを保持しなければならない. アンサーでは sprop-parameter-sets=<parameter sets data#3> に, その構成を用いるとき応答側→オファー側ストリーム向けのセットが含まれる.

応答側は型 99 と 100 の構成も受理し, オファーがいずれかを選ぶ場合に sprop-parameter-sets=<parameter sets data#1> および =<parameter sets data#2> を保持しなければならない. 99 と 100 については応答側→オファー側の初期セットを =<parameter sets data#4> および =<parameter sets data#5> で渡す. deint-buf-cap は去インターリーブの記憶上限を伝える. 特にオファー側が 2 回目のオファーを出すときに有用である. max-rcmd-nalu-size=3980 は最大そのサイズの NALU を効率的に処理できることを意味するが, ネットワークが保証するわけではない.

次の例ではレベルダウングレードなし (デフォルト level 3.0) で受理され, オファーに sprop-parameter-setssprop-level-parameter-sets がある. 応答側は sprop-level-parameter-sets=<parameter sets data#1> を無視し, デコード用に sprop-parameter-sets=<parameter sets data#0> を保持する. オファー側はアンサーの sprop-parameter-sets=<parameter sets data#2> を保持する. これらのセットは level 3.0 に属する.

オファー 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>

アンサー 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>

次の例: オファーは Baseline level 1.1, 受理は level 1b. オファーに両方の sprop-* がある. 応答側は sprop-parameter-sets=<parameter sets data#0> と, sprop-level-parameter-sets=<parameter sets data#1> のうち level 1b に属さないセットを無視し, sprop-level-parameter-sets の level 1b セットを用いる. オファー側は sprop-parameter-sets=<parameter sets data#2> (level 1b) を保持する.

オファー 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>

アンサー 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

RFC 3984 の応答側で sprop-level-parameter-setsuse-level-src-parameter-sets を理解しない場合: オファーの両 sprop-* は無視され, オファー側は帯内で送らなければならない.

オファー 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>

アンサー 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#0> はオファー側エンコーダ/応答側デコーダ向け, アンサーの =<parameter sets data#1> は応答側エンコーダ/オファー側デコーダ向け. 両者はほぼ独立である.

オファー 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>

アンサー 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>

sprop-parameter-setssprop-level-parameter-sets もない場合: 帯内のみ.

オファー 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

アンサー 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> は level 3.0 を示すがアンサーは 2.0 を希望 → 応答側は無視し, 帯内が必要.

オファー 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>

アンサー 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

オファーに sprop-* がないレベルダウングレード: こちらも帯内のみ.

オファー 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

アンサー 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

レベルアップグレードで sprop-* なし: 帯内. オファー側→応答側は level 3.0, 応答側→オファー側は 2.0; level-asymmetry-allowed=1.

オファー 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

アンサー 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 トポロジ Topo-Video-switch-MCU [29]: オファー側は B, C, D から帯外でセットを集め, 応答側 A は自らのセットを返す. CNAME→SSRC, 同一コーデック構成. A は <parameter sets data#B> 等をソースに関連付け, 各 RTP ソースに適したセットだけでデコードする.

オファー 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

アンサー 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