- SDP自体はただのテキストファイル
- どんなメディアを送受信したいかはプロトコルを記述することで決まる
RTP/AVP
やUDP
など
- この仕様では
TCP
を追加する TCP
のセッション確立のために、setup
とconnection
という属性を追加する
- いつもの
m=
行のproto
の値にTCP
を追加する
a=setup
属性- 指定できる値は4つ
active
: 接続をはじめる側passive
: 接続を待ち受ける側actpass
: その両方holdconn
: 接続を期待していない
a=setup
は、オファー・アンサーの過程でネゴシエーションされる- オファー側の値によって、アンサー側の値は決まる
- オファー側 - アンサー側
active
-passive
ORholdconn
passive
-active
ORholdconn
actpass
-active
ORpassive
ORholdconn
holdconn
-holdconn
- デフォルトは、オファー側が
active
でアンサー側がpassive
a=connection
属性- 値は
new
かexisting
- 値は
- 既に確立したセッションの途中で新しいTCP接続にしたいこともあるはず
- デフォルトはどちらも
new
- WebRTCでは使ってない
- オファー側の観点
- 初期のオファーは
new
になる - その後、既存のTCPトランスポートを使いまわしたい場合は
existing
を指定 - オファー側 - アンサー側
new
-new
existing
-existing
ORnew
- アンサー側の観点
- 先述の組み合わせの通り
- TCPのコネクションをどう扱うか
- メディアの送信に関わらず、速やかにTCPコネクションを開始する
- つまりメディアをいつでも送信できるように
- TCPコネクションが閉じられたら、
a=connection:new
で再ネゴシエーション
- 接続終了は様々な要因で起こる
- 起きたらTCPコネクションも終了する
a=setup
の使用例
- オファー側 - アンサー側
- 基本の
passive
-active
actpass
-passive
- ネゴシエーションしたら、オファー側から接続を開始する
a=connection:existing
の例
a=connection:existing
の例- ただし
new
でアンサーする
- ここで定義した内容は、TCP以外のコネクション確立にも使われるかも
- 将来的に
TCP
を含むプロトコルの場合は、TCP/XXX
のようにする- Half-closeの概念がないトランスポートもあるかも
- TCPと違って
- その場合は、またひと手間が必要になるかも
- SDPそのものへのセキュリティ事項と同じ
- セッションレベルかメディアレベルに2つの属性を追加する
a=setup
a=connection
- メディアレベルのプロトコルに
TCP
を追加