Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
SDP for WebRTC - 時間の許す限りSDPについて話したい- 2016/5/17 WebRTC Meetup Tokyo #10 @iwashi86 1
Slide 2
Slide 2 text
2 ■名前 岩瀬 義昌 / @iwashi86 ■仕事 SkyWayの中の⼈
Slide 3
Slide 3 text
3
Slide 4
Slide 4 text
4 この資料の詳細版です
Slide 5
Slide 5 text
5 https://www.flickr.com/photos/ruocaled/6330547994/in/photolist-aDpHnd-uV5JU-6fGd11-92aD3K-5sVuDT-5sZTLb-oe8i3v-9PSir6-e1iS9J-71kgs1-deaJz-dQiF-8QwgQ9-71kg2d-9H1tBA-jQecJ-5YxwD8-jQe8Y-jQe7w-955g33-dM57UT-bsWCeP-vqJ58-8BrM4s-4Yfh8F-65iwAC-5Xs927- jQeaN- 6qwcft-5uwaKr-8hH2KW-77ASRb-2dzhRA-DW9Gj-8yotoc-5RWNp6-dxHMM-4vzHef-6N43J-5mt6za-QtzaD-aEyat-t9aiK-8FucQQ-5piAH6-bLYPik-hhyaMb-77tbL6-dsCk7i-8Qtaii
Slide 6
Slide 6 text
6 https://www.flickr.com/photos/ruocaled/6330547994/in/photolist-aDpHnd-uV5JU-6fGd11-92aD3K-5sVuDT-5sZTLb-oe8i3v-9PSir6-e1iS9J-71kgs1-deaJz-dQiF-8QwgQ9-71kg2d-9H1tBA-jQecJ-5YxwD8-jQe8Y-jQe7w-955g33-dM57UT-bsWCeP-vqJ58-8BrM4s-4Yfh8F-65iwAC-5Xs927- jQeaN- 6qwcft-5uwaKr-8hH2KW-77ASRb-2dzhRA-DW9Gj-8yotoc-5RWNp6-dxHMM-4vzHef-6N43J-5mt6za-QtzaD-aEyat-t9aiK-8FucQQ-5piAH6-bLYPik-hhyaMb-77tbL6-dsCk7i-8Qtaii 今日のゴール SDPをおかずに、ご飯が食べられる
Slide 7
Slide 7 text
7 https://www.flickr.com/photos/ruocaled/6330547994/in/photolist-aDpHnd-uV5JU-6fGd11-92aD3K-5sVuDT-5sZTLb-oe8i3v-9PSir6-e1iS9J-71kgs1-deaJz-dQiF-8QwgQ9-71kg2d-9H1tBA-jQecJ-5YxwD8-jQe8Y-jQe7w-955g33-dM57UT-bsWCeP-vqJ58-8BrM4s-4Yfh8F-65iwAC-5Xs927- jQeaN- 6qwcft-5uwaKr-8hH2KW-77ASRb-2dzhRA-DW9Gj-8yotoc-5RWNp6-dxHMM-4vzHef-6N43J-5mt6za-QtzaD-aEyat-t9aiK-8FucQQ-5piAH6-bLYPik-hhyaMb-77tbL6-dsCk7i-8Qtaii 今日のゴール SDPをおかずに、ご飯が食べられる というのはハードルが高すぎるので SDPとは何か、ざっくり説明できるようになる 以降は真面目に技術トーク
Slide 8
Slide 8 text
8 先に未来のWebRTCの話
Slide 9
Slide 9 text
9
Slide 10
Slide 10 text
10
Slide 11
Slide 11 text
11 結局 SDP は重要であり SDPを自由に操作できれば なんでもできる
Slide 12
Slide 12 text
12 結局 SDP は重要であり SDPを自由に操作できれば なんでもできる と、思いきや…
Slide 13
Slide 13 text
13 https://webrtcstandards.info/end-of-sdp-in-webrtc/ IETFでSDP修正禁止の方向へ 補足: 禁止しても良い理由は、 SDP修正が必要な操作については、APIが提供されるから
Slide 14
Slide 14 text
14 https://webrtcstandards.info/end-of-sdp-in-webrtc/ IETFでSDP修正禁止の方向へ あれ?SDPいらなくね? 補足: 禁止しても良い理由は、 SDP修正が必要な操作については、APIが提供されるから
Slide 15
Slide 15 text
15 https://www.flickr.com/photos/sophotow/16559284088/in/photolist-rehEf5-5QNDcr-8UcSNJ-4saSBE-bfXD7Z-5QNDck-aeGSsg-pHMoKD-q1d6GF-pHMstF-pHQWKH-Je31q-q1kTBQ-po5LLm-pZ7sL9-wikMVv-chr4iL-byeHcQ-5Qkbca-oxpB23-5QNDcc-aCJZrf-5Qkbck-qGnKZL-p4qxdq-aNSvqx-p4qyr7-8vvXRV-Ht8dT-8vw7nz-2JrZ6v-q13iri-p81asa-pY7w2h- q13uf2-AjSb7-5Km7rg-oxp2v6-5QDnfL-5QDfE5-pY7uo7-oPBH9B-62UP3c-iU4rN-nv4Akh-94WB5G-pHR2xZ-aeKutf-q1d2Wp-3bJSQe SDPにはWebRTCの 通信の仕組みが隠れている ⇒ 知っといて損はない
Slide 16
Slide 16 text
16 https://www.flickr.com/photos/wiertz/5623695161/in/photolist-9yWUDp-7XP9vv-4HLBnh-4HGkTM-rhMMZM-czoDK5-iMzz1w-VAk5e-a8VgCz-9TdxYo-7xNfxe-a9yVr2-7uVjRt-64caum-5RhAS8-6ieMFs-7wJug3-4krww7-ziHtN-94TckU-95gMni-dsNyA7-9QFc5i-afgCC-4pMD7r-pzFUXQ-8cpErK- 7XShKc-9PSLHY-rpeMXX-6aK1Mh-8BZaLz-8nXSkK-pFVyMb-2nFrFL-rFAsRz-5ruR2k-b7w2vv-86AAki-9tMnHg-D8Bar-n4XLG-99D3ju-6aK1yo-4k5hdy-rfGy2W-4HGjhz-4tiWnr-euELfc-qJFZHN 先に注 SDPを取り巻く仕様は量が多すぎるので ポイントを絞って解説 なるべく原典のドキュメント(RFC番号)は 併記するので、最後はご自身で!
Slide 17
Slide 17 text
17 SDPの前に オファーアンサーとは?
Slide 18
Slide 18 text
柔軟にメディア疎通するためには 通信条件のネゴシエーションが必要 18 昔々 条件が一緒なので ネゴシエーション不要 Aが使える Aが使える 通信条件は簡単には変えられない…
Slide 19
Slide 19 text
柔軟にメディア疎通するためには 通信条件のネゴシエーションが必要 19 昔々 最近 条件が一緒なので ネゴシエーション不要 Aが使える Aが使える VP8とH264 が使える VP8だけ 使える VP8とH264が使えるよ、と申し出る VP8だけ使えるよ、と答える ネゴシエーションで柔軟に通信条件を変更できる! 通信条件は簡単には変えられない…
Slide 20
Slide 20 text
このようなモデルを オファーアンサーモデル(RFC 3264)と呼ぶ 20 VP8とH264が使えるよ、と申し出る VP8だけ使えるよ、と答える オファー(Offer) アンサー(Answer) Agent (Offerer) Agent (Answerer) メディア(音声・映像・データ)
Slide 21
Slide 21 text
SDPはオファー(Offer)とアンサー(Answer)の 記述方法(RFC4566の表現形式) 21 VP8とH264が使えるよ、と申し出る VP8だけ使えるよ、と答える オファー(Offer) アンサー(Answer) Agent (Offerer) Agent (Answerer) メディア(音声・映像・データ) <SDPの例> v=0 o=- 7919192553830045546 2 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLE video a=msid-semantic: WMS IJaEuKH4cYDg9YxONEt16knZtoFuZZ4ioQRq m=video 51986 RTP/SAVPF 100 116 117 96 c=IN IP4 192.168.123.1 a=rtcp:51986 IN IP4 192.168.123.1 a=candidate:964645231 1 udp 2122260223 (略)
Slide 22
Slide 22 text
オファーアンサー(O/A)モデルには セッション(親) と メディア(子) の概念がある 22 Agent (Offerer) Agent (Answerer) セッション (複数のメディアを含む総体) 音声メディア 映像メディア データメディア 補足:メディアとは、実際の音声ストリームデータ等を指す
Slide 23
Slide 23 text
そのためSDPにも ①セッション記述部 と ②メディア記述部 がある 23 v=0 o=mozilla...THIS_IS_SDPARTA-37.0 256835513207089710 0 IN IP4 0.0.0.0 s=- t=0 0 以下、略 m=audio 59540 RTP/SAVPF 109 9 0 以下、略 ①セッション記述部 ②メディア記述部
Slide 24
Slide 24 text
24 SDPの基本
Slide 25
Slide 25 text
25 SDPの文法則 • =で規定する 例:v=0 • =に余計な空白文字を含めてはいけない 例:`v = 0` はNG • メッセージ中にあらわれる行の出現順序は 厳密に規定されている(例: v, o, s, t) # この辺を間違えると、SDP Parse Error 補足:実際にはもっとたくさんありますが、重要と考えるのだけ
Slide 26
Slide 26 text
26 SDPのO/A制約[1] • m=行の数はオファーとアンサーで 同一になっている必要があること (Offer) m=audio m=video(Camera) m=video(ScreenShare) 補足:実際にはもっとたくさんありますが、重要と考えるのだけ
Slide 27
Slide 27 text
27 SDPのO/A制約[1] • m=行の数はオファーとアンサーで 同一になっている必要があること (Answer) m=audio m=video(Camera) (無) (Offer) m=audio m=video(Camera) m=video(ScreenShare) 補足:実際にはもっとたくさんありますが、重要と考えるのだけ
Slide 28
Slide 28 text
28 SDPのO/A制約[2] • メディアの登場順序は同一であること (Answer) m=audio m=video(ScreenShare) m=video(Camera) (Offer) m=audio m=video(Camera) m=video(ScreenShare) 補足:実際にはもっとたくさんありますが、重要と考えるのだけ
Slide 29
Slide 29 text
29 SDPを詳しく
Slide 30
Slide 30 text
①セッション記述部から 30 v=0 o=mozilla...THIS_IS_SDPARTA-37.0 256835513207089710 0 IN IP4 0.0.0.0 s=- t=0 0 以下、略 m=audio 59540 RTP/SAVPF 109 9 0 以下、略 ①セッション記述部 ②メディア記述部 以降、 Chrome利用者のが多い気がするので、ChromeのSDPで説明します。 SDPは以下のサイトにて、Chrome v50 で作成したものです。 https://webrtc.github.io/samples/src/content/peerconnection/munge-sdp/
Slide 31
Slide 31 text
31 v=0 o=- 3471158663735344000 2 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLEaudio video data a=msid-semantic: WMS QWrTC0fFpuTPjbHgxCZwj4peXYLEib2RnaJu SDPエリア 解説エリア 先に凡例
Slide 32
Slide 32 text
32 v=0 o=- 3471158663735344000 2 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLEaudio video data a=msid-semantic: WMS QWrTC0fFpuTPjbHgxCZwj4peXYLEib2RnaJu ・SDPのバージョン ・RFC4566より 0 固定
Slide 33
Slide 33 text
33 v=0 o=- 3471158663735344000 2 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLEaudio video data a=msid-semantic: WMS QWrTC0fFpuTPjbHgxCZwj4peXYLEib2RnaJu ・Originの略 ・o= ・知っておいた方が良いのは、。 他のセッションとの識別のために利用されている。 一意であれば良いので、クライアントによって値が全然違う。
Slide 34
Slide 34 text
34 v=0 o=- 3471158663735344000 2 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLEaudio video data a=msid-semantic: WMS QWrTC0fFpuTPjbHgxCZwj4peXYLEib2RnaJu ・Session nameのこと ・`-` しか設定されないので説明略
Slide 35
Slide 35 text
35 v=0 o=- 3471158663735344000 2 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLEaudio video data a=msid-semantic: WMS QWrTC0fFpuTPjbHgxCZwj4peXYLEib2RnaJu ・start-time と stop-time ・RFC4566にて両方とも0を指定と規定
Slide 36
Slide 36 text
36 v=0 o=- 3471158663735344000 2 IN IP4 127.0.0.1 s=- t=0 0 (書かれてないもの) a=group:BUNDLEaudio video data a=msid-semantic: WMS QWrTC0fFpuTPjbHgxCZwj4peXYLEib2RnaJu ・SDP自体(RFC4566)に規定されている i= / u= / e= / p= / r= / z= などはWebRTCで利用しないので省略
Slide 37
Slide 37 text
37 v=0 o=- 3471158663735344000 2 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLEaudio video data a=msid-semantic: WMS QWrTC0fFpuTPjbHgxCZwj4peXYLEib2RnaJu ・a=XX は全て拡張属性 ・a=groupはRFC5888で定義される ・もともとLipSyncなどをグルーピングする仕様 ・後ろに出てくるaudio/video/data などは、 メディア記述部で、 a=mid:audio とリンク ・WebRTCでは…
Slide 38
Slide 38 text
38 v=0 o=- 3471158663735344000 2 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLEaudio video data a=msid-semantic: WMS QWrTC0fFpuTPjbHgxCZwj4peXYLEib2RnaJu ・WebRTCでは、a=group(RFC5888)を拡張してBUNDLEを定義し audio/video/dateを1つに多重化して利用している ・少しでも利用するポート数を減らして、 効率的に通信するのがWebRTCのやり方 詳細はコチラ: https://tools.ietf.org/html/draft-ietf-mmusic-sdp-bundle-negotiation-29
Slide 39
Slide 39 text
39 v=0 o=- 3471158663735344000 2 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLEaudio video data a=msid-semantic: WMS QWrTC0fFpuTPjbHgxCZwj4peXYLEib2RnaJu ・やや古い記法なので、あまり真面目に覚えなくてOK (Chromeにまだあるが、いつか変わるはず) ・一応補足すると・・・ a=msid:XX を新たに定義して、WMS(WebRTC Media Stream) で利用するという意味。WMSを指定してWebRTCであることを 明示していたが、どうせWebRTCしか使わないので、意味薄。 https://tools.ietf.org/html/draft-ietf-mmusic-msid-12
Slide 40
Slide 40 text
②メディア記述部 40 v=0 o=mozilla...THIS_IS_SDPARTA-37.0 256835513207089710 0 IN IP4 0.0.0.0 s=- t=0 0 以下、略 m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 126 (略) m=video 9 UDP/TLS/RTP/SAVPF 100 101 116 117 96 97 98 (略) m=application 9 DTLS/SCTP 5000 ①セッション記述部 ②メディア記述部
Slide 41
Slide 41 text
②メディア記述部 41 v=0 o=mozilla...THIS_IS_SDPARTA-37.0 256835513207089710 0 IN IP4 0.0.0.0 s=- t=0 0 以下、略 m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 126 … ①セッション記述部 ②メディア記述部 以降ではAudioのみ説明 ∵videoやapplicationは、audioが読めれば分かるため。 どうしても読むのが難しい内容だけ、最後に補足。
Slide 42
Slide 42 text
42 m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 126 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:47rxaO74RBacCqx3 a=ice-pwd:QlFMPNexQW+NgXV3G2f1DBbe a=fingerprint:sha-256 23:E7:A4:A2:CA:49:81:36:CA:08:50:27:71:5B:76:FD:61:A9:1A:30:38:27:75:BC:D7:8B: 21:EC:AC:20:3E:83 a=setup:actpass ・m=audioで音声通信をすることを意味 ・続く「9」は、本来ポート番号を書く欄であるが TrickleICEでは「9」を設定する https://tools.ietf.org/html/draft-ietf-mmusic-trickle-ice-02 ・UDP/TLS/RTP/SAVPFはproto指定だが、 ひとまずおまじないと考えておいて良い https://tools.ietf.org/html/rfc5764
Slide 43
Slide 43 text
43 m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 126 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:47rxaO74RBacCqx3 a=ice-pwd:QlFMPNexQW+NgXV3G2f1DBbe a=fingerprint:sha-256 23:E7:A4:A2:CA:49:81:36:CA:08:50:27:71:5B:76:FD:61:A9:1A:30:38:27:75:BC:D7:8B: 21:EC:AC:20:3E:83 a=setup:actpass ・続く111~126はペイロードタイプであり、a=rtpmap:XX とリンク ・説明はrtpmap:XXが出てきたときに実施 ・ポイントは、この順序が左側にあるほど優先度が高い点 (数字の大小は、優先度に関係無い点に注意)
Slide 44
Slide 44 text
44 m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 126 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:47rxaO74RBacCqx3 a=ice-pwd:QlFMPNexQW+NgXV3G2f1DBbe a=fingerprint:sha-256 23:E7:A4:A2:CA:49:81:36:CA:08:50:27:71:5B:76:FD:61:A9:1A:30:38:27:75:BC:D7:8B: 21:EC:AC:20:3E:83 a=setup:actpass ・c=IN IP4 0.0.0.0 はコンタクトアドレス(メディアの送り先のIPアドレス)を書く行 ・IN = Internet の IPv4 の 0.0.0.0 のアドレスという意味だが、 アドレスから分かるようにSDP上の値は暫定値 ・実際のアドレスは、TrickleICEで取得されるため
Slide 45
Slide 45 text
45 m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 126 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:47rxaO74RBacCqx3 a=ice-pwd:QlFMPNexQW+NgXV3G2f1DBbe a=fingerprint:sha-256 23:E7:A4:A2:CA:49:81:36:CA:08:50:27:71:5B:76:FD:61:A9:1A:30:38:27:75:BC:D7:8B: 21:EC:AC:20:3E:83 a=setup:actpass ・rtcp とあることから分かるように、RTCP向けの情報であり、 前行の c= と、ほぼ同じ形式になっている ・RTCPは、RTPと多重化するのであまり意識する必要はない ・読み方は c= と一緒 ・rtcp:9 の9は、TrickleICE用のdummyポート
Slide 46
Slide 46 text
46 m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 126 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:47rxaO74RBacCqx3 a=ice-pwd:QlFMPNexQW+NgXV3G2f1DBbe a=fingerprint:sha-256 23:E7:A4:A2:CA:49:81:36:CA:08:50:27:71:5B:76:FD:61:A9:1A:30:38:27:75:BC:D7:8B: 21:EC:AC:20:3E:83 a=setup:actpass ・ice-ufragは ICE Username Fragmentの略 ・Fragmentの意味は破片であり、ICEでは通信するペア同士の ufragを結合して、ユーザネームを作成する ・ice-pwdはICE Passwordの略で、ufragと併せて、 STUN Short-term credentialの仕組みで利用する (short-term credentialは、短期的な通信相手同士の認証というイメージ)
Slide 47
Slide 47 text
47 m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 126 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:47rxaO74RBacCqx3 a=ice-pwd:QlFMPNexQW+NgXV3G2f1DBbe a=fingerprint:sha-256 23:E7:A4:A2:CA:49:81:36:CA:08:50:27:71:5B:76:FD:61:A9:1A:30:38:27:75:BC:D7:8B: 21:EC:AC:20:3E:83 a=setup:actpass ・DTLSの証明書のfingerprint ・WebRTCでは、ICEによる疎通が成功した後に、 DTLSのハンドシェイクをはじめるが、 その際にCertificateを互いに交換する。 その際のCertificateが正しいかどうかを確認するために、 このFingerprintを用いる。
Slide 48
Slide 48 text
48 m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 126 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:47rxaO74RBacCqx3 a=ice-pwd:QlFMPNexQW+NgXV3G2f1DBbe a=fingerprint:sha-256 23:E7:A4:A2:CA:49:81:36:CA:08:50:27:71:5B:76:FD:61:A9:1A:30:38:27:75:BC:D7:8B: 21:EC:AC:20:3E:83 a=setup:actpass ・どちらがtcpコネクション確立を開始するかどうか規定 ・actpassはコネクションを待ち受けてもいいし、 自ら始めても良いという意味 ・offer側がactpassを設定するように、使用で定義されている https://tools.ietf.org/html/rfc5763#section-5
Slide 49
Slide 49 text
49 (セッション記述部) a=group:BUNDLEaudio video data ~~~略~~~ (メディア記述部) a=mid:audio ・midは media stream identification のこと https://tools.ietf.org/html/rfc5888 ・SDPのどの部分とメディアが対応できるか識別できる ・上記の例では、 a=mid:audioが含まれるm=行ブロックを BUNDLE対象に指定しているという意味
Slide 50
Slide 50 text
50 a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time a=sendrecv a=rtcp-mux ・RTPヘッダの拡張として、 音声のレベルをRTP拡張ヘッダに付けて送るという意味 https://tools.ietf.org/html/rfc6464
Slide 51
Slide 51 text
51 a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time a=sendrecv a=rtcp-mux ・パケットをワイヤ上(通信経路上)に、 送り出した時間をRTPヘッダ拡張に付与するという意味
Slide 52
Slide 52 text
52 a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time a=sendrecv a=rtcp-mux ・方向属性を意味していて、全部で4種類ある ・sendrecv:送受信両方 ・sendonly:送信のみ ・recvonly:受信のみ ・inactive:何もしない ・今回は、送受信両方しますという意味。 配信系のユースケースとかだと、*onlyを多用することになる。
Slide 53
Slide 53 text
53 a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time a=sendrecv a=rtcp-mux ・rtpとrtcpを多重化するという意味 https://tools.ietf.org/html/rfc5761 ・BUNDLE同様に少しでも利用するポート数を減らして、 効率的に通信するのがWebRTCのやり方
Slide 54
Slide 54 text
54 m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 126 ~~~略~~~ a=rtpmap:111 opus/48000/2 a=rtcp-fb:111 transport-cc a=fmtp:111 minptime=10; useinbandfec=1 ・m=行で説明を割愛したペイロードタイプの番号は、 a=rtpmapなどの項目にリンクしてくる ・やっていることは、111番で利用するコーデックや その他オプションの指定
Slide 55
Slide 55 text
55 m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 126 ~~~略~~~ a=rtpmap:111 opus/48000/2 a=rtcp-fb:111 transport-cc a=fmtp:111 minptime=10; useinbandfec=1 ・opusというコーデック・48000hz・2ch という意味
Slide 56
Slide 56 text
56 m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 126 ~~~略~~~ a=rtpmap:111 opus/48000/2 a=rtcp-fb:111 transport-cc a=fmtp:111 minptime=10; useinbandfec=1 ・トランスポート全体での輻輳制御向けの拡張 https://tools.ietf.org/html/draft-holmer-rmcat-transport-wide-cc-extensions-01
Slide 57
Slide 57 text
57 m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 126 ~~~略~~~ a=rtpmap:111 opus/48000/2 a=rtcp-fb:111 transport-cc a=fmtp:111 minptime=10; useinbandfec=1 ・minptimeというのは、音声をパケット化するときの 最小のミリ秒の数値。この例は最小10ミリ秒でパケットを作成 ・useinbandfecは1の場合は、インバンド(RTPのストリーム内で 実施という意味なはず)でFECを提供
Slide 58
Slide 58 text
58 m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 126 ~~~略~~~ a=rtpmap:103 ISAC/16000 a=rtpmap:104 ISAC/32000 a=rtpmap:9 G722/8000 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=rtpmap:106 CN/32000 a=rtpmap:105 CN/16000 a=rtpmap:13 CN/8000 a=rtpmap:126 telephone-event/8000 ・opus以降の詳細説明は割愛 ・覚えておくと良いのは、0-95まではスタティックペイロードで 96-127までがダイナミックペイロードということ ・例えば、黒電話でも使われる PCMU は0番と決まっている。
Slide 59
Slide 59 text
59 a=ssrc:1665280581 cname:/6cn4x08FotE9GHG a=ssrc:1665280581 msid:QWrTC0fFpuTPjbHgxCZwj4peXYLEib2RnaJu ed198241- 0a4f-4bd0-a254-ae5d8fefb928 a=ssrc:1665280581 mslabel:QWrTC0fFpuTPjbHgxCZwj4peXYLEib2RnaJu a=ssrc:1665280581 label:ed198241-0a4f-4bd0-a254-ae5d8fefb928 ・PlanBという古い記法であり、将来的にはUnifiedPlanという 記法に変更になる ・記法というよりは、中に記載されている内容を理解すべき
Slide 60
Slide 60 text
60 a=ssrc:1665280581 cname:/6cn4x08FotE9GHG a=ssrc:1665280581 msid:QWrTC0fFpuTPjbHgxCZwj4peXYLEib2RnaJu ed198241- 0a4f-4bd0-a254-ae5d8fefb928 a=ssrc:1665280581 mslabel:QWrTC0fFpuTPjbHgxCZwj4peXYLEib2RnaJu a=ssrc:1665280581 label:ed198241-0a4f-4bd0-a254-ae5d8fefb928 ・SSRCは、Synchronization Source Identifier のことで、 要は、メディアストリームを一意に識別するためのもの ・msidは、MediaStream Identificationのことで、 JavaScript上から見えるメディアストリームのIDと 紐付けするためのもの
Slide 61
Slide 61 text
61 SDPの落ち穂拾い
Slide 62
Slide 62 text
m=videoをちょっと補足 62 v=0 o=mozilla...THIS_IS_SDPARTA-37.0 256835513207089710 0 IN IP4 0.0.0.0 s=- t=0 0 以下、略 m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 126 (略) m=video 9 UDP/TLS/RTP/SAVPF 100 101 116 117 96 97 98 (略) m=application 9 DTLS/SCTP 5000 ①セッション記述部 ②メディア記述部
Slide 63
Slide 63 text
63 a=rtpmap:100 VP8/90000 a=rtcp-fb:100 ccmfir a=rtcp-fb:100 nack a=rtcp-fb:100 nack pli a=rtcp-fb:100 goog-remb a=rtcp-fb:100 transport-cc a=rtpmap:101 VP9/90000 a=rtcp-fb:101 ccmfir a=rtcp-fb:101 nack a=rtcp-fb:101 nack pli a=rtcp-fb:101 goog-remb a=rtcp-fb:101 transport-cc a=rtpmap:116 red/90000 ・ビデオもコーデックが多く存在 ・注目すべきは、VP8とVP9がStableで標準サポートされている点 ・VP8はNW帯域を多く使うが、CPU消費は小さめ ・VP9はNW帯域を少なく使うが、CPU消費は多め
Slide 64
Slide 64 text
64 a=ssrc-group:FID 3668517244 500761633 a=ssrc:3668517244 cname:/6cn4x08FotE9GHG a=ssrc:3668517244 msid:QWrTC0fFpuTPjbHgxCZwj4peXYLEib2RnaJu eb062ea9-8ed0-49ca-b878- db2f27ebd99d a=ssrc:3668517244 mslabel:QWrTC0fFpuTPjbHgxCZwj4peXYLEib2RnaJu a=ssrc:3668517244 label:eb062ea9-8ed0-49ca-b878-db2f27ebd99d a=ssrc:500761633 cname:/6cn4x08FotE9GHG a=ssrc:500761633 msid:QWrTC0fFpuTPjbHgxCZwj4peXYLEib2RnaJu eb062ea9-8ed0-49ca-b878- db2f27ebd99d a=ssrc:500761633 mslabel:QWrTC0fFpuTPjbHgxCZwj4peXYLEib2RnaJu a=ssrc:500761633 label:eb062ea9-8ed0-49ca-b878-db2f27ebd99d ・ChromeではMultiStreamを指定しなくても、 Videoで複数SSRCが流れる ・この2つ目のストリームはRTX(再送ストリーム) http://www.ietf.org/rfc/rfc4588.txt
Slide 65
Slide 65 text
65 m=audio 9 … b=AS:50 ・Chromeが自律的に生成するわけではないが、 通信帯域幅をビットレートで指定可能 ・b=ASは略さずに意味を書くと、 bandwidth = Application Specific: XX という記法であり、XXにビットレートが書く
Slide 66
Slide 66 text
今日省略したICEについては↓のスライド参照 66 http://www.slideshare.net/iwashi86/webrtcice
Slide 67
Slide 67 text
67 まとめ
Slide 68
Slide 68 text
68 https://www.flickr.com/photos/ruocaled/6330547994/in/photolist-aDpHnd-uV5JU-6fGd11-92aD3K-5sVuDT-5sZTLb-oe8i3v-9PSir6-e1iS9J-71kgs1-deaJz-dQiF-8QwgQ9-71kg2d-9H1tBA-jQecJ-5YxwD8-jQe8Y-jQe7w-955g33-dM57UT-bsWCeP-vqJ58-8BrM4s-4Yfh8F-65iwAC-5Xs927- jQeaN- 6qwcft-5uwaKr-8hH2KW-77ASRb-2dzhRA-DW9Gj-8yotoc-5RWNp6-dxHMM-4vzHef-6N43J-5mt6za-QtzaD-aEyat-t9aiK-8FucQQ-5piAH6-bLYPik-hhyaMb-77tbL6-dsCk7i-8Qtaii 今日のゴール SDPとは何か ざっくり 説明できるようになる
Slide 69
Slide 69 text
69 本日 ご理解いただいたこと • SDPのO/Aの基本・制約 • SDPの文法則 • Audioを中心としたSDPの読み方 • SDP落ち穂拾い
Slide 70
Slide 70 text
70 本日 ご理解いただいたこと • SDPのO/Aの基本・制約 • SDPの文法則 • Audioを中心としたSDPの読み方 • SDP落ち穂拾い おしまい!