SDPについて
オファーアンサーモデルには、セッション(親)とメディア(子)の概念がある。
それを表現するために、SDPにはセッション記述部とメディア記述部がある
m=で始まる行以降がメディア記述
table: 表
セクション 行 意味 必須 数 内容
セッション記述部 v= version 必須 1 現バージョン(2020/05)は0
o= origin 必須 1 作成者の情報を示す。
s= session name 必須 1 セッションの名称
i= session information 1 セッション情報
u= url 1 セッション負荷情報のURL
e= email addres eかpが必須 1 セッション管理者のメールアドレス
p= phone address eかpが必須 1 セッション管理者の電話番号
c= connection data セッション記述部or 1 セッションで利用する
メディア記述部(全て) ネットワークアドレス
b= bandwidth 1 メディアの利用帯域
t= timing 必須 複数 セッションの開始・終了時刻
r= repeat times 複数 セッションの繰り返し周期?
z= time zones 1 繰り返しが指定される時に切り替え用
k= encryption keys 1 セッションで利用する暗号鍵の情報
a= session attributes 複数 拡張。WebRTCでは超重要
メディア記述部 m= media announcements 必須 複数 メディアの種類
i= media information 1 メディアに関する情報
c= connection data セクション記述部にない ネットワークアドレス
なら必須
b= bandwitdh メディアストリームの利用する帯域
k= encryption kyes メディアで利用する暗号鍵
a= media attributes 複数 拡張。WebRTCでは超重要
各行の説明
セッション記述部
必要だけど特に意味はないやつ。順序は必ずvost出ないとパースに失敗する
v=
SDPのVersionを指定する
o=
Originの略。誰がSDPを作成したか
s=
Session nameの略。特に意味はない
t=
Time zoneの略。開始終了時刻をかく
a=以降は拡張属性
識別子や、Banilla/Trickle Iceを選んだり、audio/videoを多重化したり
メディア記述部
必要なメディアの数だけm=から始まるブロックがある
m=audio 55930 RTP/SAVPF 109 0 0 8など
音声 ポート番号 プロトコル ペイロードタイプ
プロトコル RTP/SAVPF = STRTP/SRTCP
ペイロードタイプ 109 0 0 8 = a=rtpmapと紐づいていて、a=rtpmnap側に詳細なコーデック情報が記載される
優先度順にペイロードタイプが書かれているので、109を優先的に使いたいということ
a=rtpmap:109 opus/48000/2
Opusという名前のコーデックで秒間48000回サンプリングして2チャネル使う
c=IN IP4 123.123.123.123
グローバルIPの123.123.123.123を使う
a=以降は拡張属性
candidate・sendrecv・end-of-candidates(ICEの収集が終わったことを表す)・ICEのユーザ名とパスワード
a=mid:sdparta_0は多重化の識別子
a=rtcp-muxはRTPとRTCPを多重化することを表す。一緒のポートを使うことでUDPホールパンチのコストを減らせる
a=setup:actpassはDTLSを使うことを示す
a=ssrc:20289893 cname:{4518e59c-~~~}はSSRCはランダムに振り割られ変わる。CNAMEはSSRCがランダムに変わってもわかるように紐付けする名前