- 本文なし
- いつもの
- RTPストリームにIDを振る、グルーピングするための仕様をSDPに追加する
- WebRTCのための拡張である
- なぜ拡張が必要だったのか
- RTPセッション中のRTPストリームは、SSRCによって一意に識別できた
- そもそもRTPセッションは、トランスポートアドレスで別れているものだった
- しかしWebRTCではBUNDLEすることができてしまう
- SDPグルーピングについては、RFC5888
- しかしそれはSDP内に閉じた話で、アプリケーションレベルでこれを知る必要が往々にしてある
- そのためにこの拡張が必要
- WebRTCではメディアを
MediaStream
として扱い、MediaStreamTrack
を含む MediaStreamTrack
は、RTPセッション中の単一のSSRCを表すもの- サイマルキャストなど、このSSRCが増えることもあるがそれはこの仕様と関係ない
- そしてこれは一方通行なもの
- RTPセッションでは、RTPストリームはSSRCで識別されつつ、CNAMEの情報を持ってる
- しかしこのCNAMEもRTPセッションも、
MediaStream
とは対応していない - SDPにおける
m=
セクションは、それぞれがMediaStreamTrack
と対応する- そしてBUNDLEされると、いくつかの
MediaStreamTrack
がRTPセッションとなる - そこで、どの
MediaStream
にMediaStreamTrack
が属するかの情報が必要になる
- そしてBUNDLEされると、いくつかの
msid
属性をSDPのメディアレベルに追加するa=msid:{id} {appdata}
msid:examplefoo examplebar
- この場合は
examplefoo
というIDに、examplebar
という値
- この場合は
msid
はどう決まるのかMediaStream
のid
が、{id}
に紐づくMediaStreamTrack
のid
が、{appdata}
に紐づく
msid
の{id}
が新たに増えた = 新たなMediaStream
を受信したとわかる{appdata}
が新たに増えた = 新たなMediaStreamTrack
{appdata}
がなく{id}
だけ増えるパターンもある- その場合は受信側が自分で割り当てる
{id}
が-
の場合は、MediaStream
がないことを表すMediaStreamTrack
の終了条件a=msid
が消えた時- すべてのSSRCでBYEパケットを受信したとき
- タイムアウトしたとき
m=
行のポートに0
が指定されたとき
msid
を使用しない、紐付けないRTPパケットが送信されてくることもある- 既にセッションがあるときに、後から
MediaStreamTrack
を追加した場合 - 再ネゴシエーションが発生して、アンサーが受領されるまでの間
- =
RTCSignalingState
がstable
でない間
- 既にセッションがあるときに、後から
- オファー・アンサーについては別の仕様に詳細がある
- RFC3264
- オファーのSDPに
a=msid
が載るまで - 送信したい
MediaStream
の数だけ定義するid
をmsid
の{id}
に
- 次いで、
MediaStreamTrack
のid
を{appdata}
に
- アンサー側がどうするか
{appdata}
でもってMediaStreamTrack
のインスタンスを探す or 作る{id}
を使ってMediaStream
を探す or 作る- ユーザーに知らせる
- アンサーを発行するときは、オファーを発行するときと同じ
- オファー側が影響を与えることはない
- 同上
- セッション中の再ネゴシエーションで注意点が1つだけある
ended
になっていないMediaStreamTrack
について- SDPにその
id
が{appdata}
と同じものが存在するかチェック - 存在しなくなってたら、
ended
にしてしまう
- SDPにその
- 2つの
MediaStream
を送る場合のSDPの例
- 本文なし
msid
属性をSDPのatt-field
に追加する- これはメディアレベル限定
- SDPを改ざんされるおそれはある
- そうなるとバッファリング実装のメモリを枯渇させることができるかも
- IDを生成するときも、UUIDのv3や4を使うなど推奨
- 代案について
- CNAMEを使う案
- CNAMEは
MediaStreamTrack
をsyncするためのもの
- CNAMEは
- RTCPのSRパケットを使う案
- 全ての
MediaStreamTrack
の状況を把握できない
- 全ての
a=wms-semantic
という属性もあった- 2015年4月に削除された
- 実際には
a=msid-semantic:WMS
から続く行- 今もChromeやFirefoxがSDPに載せてくる