Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

SDP for WebRTC - From Basics to Maniacs -

18,627 views

Published on

注:
http://www.slideshare.net/iwashi86/webrtc-for-sdp
が更新版です。

WebRTC Meetup Tokyo #7にて発表したスライド。
資料で書ききれていない説明はこちらの動画から。
http://youtu.be/Y92Z349RhuI?t=2h5m29s

Published in: Technology
  • Be the first to comment

SDP for WebRTC - From Basics to Maniacs -

  1. 1. SDP for WebRTC -From Basics to Maniacs- WebRTC Meetup Tokyo #7 @iwashi86 1
  2. 2. ●Attribute ・Name -> Yoshimasa IWASE ・Twitter -> @iwashi86 ・Web -> iwashi.co ●Work @ NTT Communications ・SkyWay(WebRTC)の裏側の開発運用 ・HTML5 Experts.jpというWebメディアの編集 2
  3. 3. 今日のお話 SDP 注:ORTCが来たら大体忘れていいことが多いです。 ただし、本質的にメディア通信に必要な情報(ICEとか)は ORTCでも同じであるため、今後も役立つと思います。 3
  4. 4. 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 192.168.123.1 51986 typ host generation 0 a=candidate:964645231 2 udp 2122260223 192.168.123.1 51986 typ host generation 0 a=candidate:678703848 1 udp 2122194687 192.168.100.1 49989 typ host generation 0 a=candidate:678703848 2 udp 2122194687 192.168.100.1 49989 typ host generation 0 a=candidate:2178013618 1 udp 2122129151 192.168.33.1 55585 typ host generation 0 a=candidate:2178013618 2 udp 2122129151 192.168.33.1 55585 typ host generation 0 a=candidate:4278134664 1 udp 2122063615 192.168.1.8 50973 typ host generation 0 a=candidate:4278134664 2 udp 2122063615 192.168.1.8 50973 typ host generation 0 a=candidate:2013048223 1 tcp 1518280447 192.168.123.1 0 typ host tcptype active generation 0 a=candidate:2013048223 2 tcp 1518280447 192.168.123.1 0 typ host tcptype active generation 0 a=candidate:1727516184 1 tcp 1518214911 192.168.100.1 0 typ host tcptype active generation 0 a=candidate:1727516184 2 tcp 1518214911 192.168.100.1 0 typ host tcptype active generation 0 a=candidate:3478267202 1 tcp 1518149375 192.168.33.1 0 typ host tcptype active generation 0 a=candidate:3478267202 2 tcp 1518149375 192.168.33.1 0 typ host tcptype active generation 0 a=candidate:2960972664 1 tcp 1518083839 192.168.1.8 0 typ host tcptype active generation 0 a=candidate:2960972664 2 tcp 1518083839 192.168.1.8 0 typ host tcptype active generation 0 a=ice-ufrag:oaw7CiwPrr8SugF+ a=ice-pwd:6Wvv5xxI8Es575wFb5Houqlg a=ice-options:google-ice a=fingerprint:sha-256 11:01:4A:47:81:4F:EA:E0:0B:02:FA:9E:D4:CF:CF:95:C4:50:D6:CE:16:DF:37:AE:B0:FD:F2:B2:C5:E7:DD:30 a=setup:actpass a=mid:video a=extmap:2 urn:ietf:params:rtp-hdrext:toffset a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time a=sendrecv a=rtcp-mux a=rtpmap:100 VP8/90000 a=rtpmap:116 red/90000 a=rtpmap:117 ulpfec/90000 a=rtpmap:96 rtx/90000 a=fmtp:96 apt=100 4 VoIP上がりの人 -> 多少読める
  5. 5. 5 Webデベロッパ -> こう見えてるはず
  6. 6. 本LTのゴール ・SDPの読み方の基本を理解 ・ちょっとマニアックな部分も理解 ・嫌悪感を軽減 6
  7. 7. そもそも 何故 SDPが必要? 7
  8. 8. 柔軟にメディア疎通するためには 通信条件のネゴシエーションが必要 8 昔々 最近 条件が一緒なので ネゴシエーション不要 Aが使える Aが使える VP8とH264 が使える VP8だけ 使える VP8とH264が使えるよ、と申し出る VP8だけ使えるよ、と答える ネゴシエーションで柔軟に通信条件を変更できる! 通信条件は簡単には変えられない…
  9. 9. このようなモデルを オファーアンサーモデル(RFC 3264)と呼ぶ 9 VP8とH264が使えるよ、と申し出る VP8だけ使えるよ、と答える オファー(Offer) アンサー(Answer) Agent (Offerer) Agent (Answerer) メディア(音声・映像・データ)
  10. 10. SDPはオファーとアンサーの 記述方法(表現形式)とやりとりの仕組み 10 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 (略)
  11. 11. オファーアンサーモデルには セッション(親) と メディア(子) の概念がある 11 Agent (Offerer) Agent (Answerer) セッション (複数のメディアを含む総体) 音声メディア 映像メディア データメディア 補足:メディアとは、実際の音声ストリームデータ等を指す
  12. 12. そのためSDPにも ①セッション記述部 と ②メディア記述部 がある 12 v=0 o=mozilla...THIS_IS_SDPARTA-37.0 256835513207089710 0 IN IP4 0.0.0.0 s=- t=0 0 a=sendrecv a=fingerprint:sha-256 2B:71:C0:1A:D5:5F:E9:AD:4E:C0:A8:B2:14:06:0E:DE:B8:83:FD:0F:02:8A:CD:22:E5:32:52:91:65:32:95:69 a=group:BUNDLE sdparta_0 sdparta_1 a=ice-options:trickle m=audio 59540 RTP/SAVPF 109 9 0 8 c=IN IP4 123.123.123.123 a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ host a=candidate:2 1 UDP 2128609535 192.168.33.1 65026 typ host a=candidate:4 1 UDP 2128543999 192.168.100.1 50644 typ host a=candidate:6 1 UDP 2128478463 192.168.123.1 53189 typ host a=candidate:0 2 UDP 2130379006 192.168.1.8 50370 typ host a=candidate:2 2 UDP 2128609534 192.168.33.1 63402 typ host a=candidate:4 2 UDP 2128543998 192.168.100.1 59589 typ host a=candidate:6 2 UDP 2128478462 192.168.123.1 58005 typ host a=sendrecv a=end-of-candidates a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level a=ice-pwd:55104ba020a9bb780a06b8a8db085a6e a=ice-ufrag:24b20be8 a=mid:sdparta_0 a=rtcp-mux a=rtpmap:109 opus/48000/2 a=rtpmap:9 G722/8000/1 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=setup:actpass a=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8} m=video 53336 RTP/SAVPF 120 126 97 c=IN IP4 123.123.123.123 以下略 ①セッション記述部 ②メディア記述部 Firefox Beta(37.0)で 取得した生SDPです
  13. 13. そのためSDPにも ①セッション記述部 と ②メディア記述部 がある 13 v=0 o=mozilla...THIS_IS_SDPARTA-37.0 256835513207089710 0 IN IP4 0.0.0.0 s=- t=0 0 a=sendrecv a=fingerprint:sha-256 2B:71:C0:1A:D5:5F:E9:AD:4E:C0:A8:B2:14:06:0E:DE:B8:83:FD:0F:02:8A:CD:22:E5:32:52:91:65:32:95:69 a=group:BUNDLE sdparta_0 sdparta_1 a=ice-options:trickle m=audio 59540 RTP/SAVPF 109 9 0 8 c=IN IP4 123.123.123.123 a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ host a=candidate:2 1 UDP 2128609535 192.168.33.1 65026 typ host a=candidate:4 1 UDP 2128543999 192.168.100.1 50644 typ host a=candidate:6 1 UDP 2128478463 192.168.123.1 53189 typ host a=candidate:0 2 UDP 2130379006 192.168.1.8 50370 typ host a=candidate:2 2 UDP 2128609534 192.168.33.1 63402 typ host a=candidate:4 2 UDP 2128543998 192.168.100.1 59589 typ host a=candidate:6 2 UDP 2128478462 192.168.123.1 58005 typ host a=sendrecv a=end-of-candidates a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level a=ice-pwd:55104ba020a9bb780a06b8a8db085a6e a=ice-ufrag:24b20be8 a=mid:sdparta_0 a=rtcp-mux a=rtpmap:109 opus/48000/2 a=rtpmap:9 G722/8000/1 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=setup:actpass a=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8} m=video 53336 RTP/SAVPF 120 126 97 c=IN IP4 123.123.123.123 以下略 ①セッション記述部 ②メディア記述部 Firefox Beta(37.0)で 取得した生SDPです TIPS: セッション記述部とメディア記述部の見分け方は m= で始まる行を探すこと
  14. 14. 以降 SDP詳説 14
  15. 15. まず①セッション記述部から 15 v=0 o=mozilla...THIS_IS_SDPARTA-37.0 256835513207089710 0 IN IP4 0.0.0.0 s=- t=0 0 a=sendrecv a=fingerprint:sha-256 2B:71:C0:1A:D5:5F:E9:AD:4E:C0:A8:B2:14:06:0E:DE:B8:83:FD:0F:02:8A:CD:22:E5:32:52:91:65:32:95:69 a=group:BUNDLE sdparta_0 sdparta_1 a=ice-options:trickle m=audio 59540 RTP/SAVPF 109 9 0 8 c=IN IP4 123.123.123.123 a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ host a=candidate:2 1 UDP 2128609535 192.168.33.1 65026 typ host a=candidate:4 1 UDP 2128543999 192.168.100.1 50644 typ host a=candidate:6 1 UDP 2128478463 192.168.123.1 53189 typ host a=candidate:0 2 UDP 2130379006 192.168.1.8 50370 typ host a=candidate:2 2 UDP 2128609534 192.168.33.1 63402 typ host a=candidate:4 2 UDP 2128543998 192.168.100.1 59589 typ host a=candidate:6 2 UDP 2128478462 192.168.123.1 58005 typ host a=sendrecv a=end-of-candidates a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level a=ice-pwd:55104ba020a9bb780a06b8a8db085a6e a=ice-ufrag:24b20be8 a=mid:sdparta_0 a=rtcp-mux a=rtpmap:109 opus/48000/2 a=rtpmap:9 G722/8000/1 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=setup:actpass a=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8} m=video 53336 RTP/SAVPF 120 126 97 c=IN IP4 123.123.123.123 以下略 ①セッション記述部 ②メディア記述部 ちなみに、 Firefox Beta(37.0)で取得した生SDPです
  16. 16. ①セッション記述部 詳説 16 v=0 o=mozilla...THIS_IS_SDPARTA-37.0 256835513207089710 0 IN IP4 0.0.0.0 s=- t=0 0 a=sendrecv a=fingerprint:sha-256 2B:71:C0:1A:D5:5F:E9:AD:4E:C0:A8:B2:14:06:0E:DE:B8:83:FD:0F:02:8A:CD:22:E5:32:52:91:65:32:95: 69 a=group:BUNDLE sdparta_0 sdparta_1 a=ice-options:trickle 上から1つずつチェックしていきます
  17. 17. v= はバージョン 17 v=0 o=mozilla...THIS_IS_SDPARTA-37.0 256835513207089710 0 IN IP4 0.0.0.0 s=- t=0 0 a=sendrecv a=fingerprint:sha-256 2B:71:C0:1A:D5:5F:E9:AD:4E:C0:A8:B2:14:06:0E:DE:B8:83:FD:0F:02:8A:CD:22:E5:32:52:91:65:32:95: 69 a=group:BUNDLE sdparta_0 sdparta_1 a=ice-options:trickle Versionの略。 どのSDPバージョンを使うか指定する。 WebRTC的には割とどうでもいい。
  18. 18. o= には作成者を 18 v=0 o=mozilla...THIS_IS_SDPARTA-37.0 256835513207089710 0 IN IP4 0.0.0.0 s=- t=0 0 a=sendrecv a=fingerprint:sha-256 2B:71:C0:1A:D5:5F:E9:AD:4E:C0:A8:B2:14:06:0E:DE:B8:83:FD:0F:02:8A:CD:22:E5:32:52:91:65:32:95: 69 a=group:BUNDLE sdparta_0 sdparta_1 a=ice-options:trickle Originの略。 だれがSDPを作成したのかということ。 WebRTC的には割とどうでもいい。
  19. 19. s= は忘れてください 19 v=0 o=mozilla...THIS_IS_SDPARTA-37.0 256835513207089710 0 IN IP4 0.0.0.0 s=- t=0 0 a=sendrecv a=fingerprint:sha-256 2B:71:C0:1A:D5:5F:E9:AD:4E:C0:A8:B2:14:06:0E:DE:B8:83:FD:0F:02:8A:CD:22:E5:32:52:91:65:32:95: 69 a=group:BUNDLE sdparta_0 sdparta_1 a=ice-options:trickle Session nameの略。 どうでもいいので忘れてください。
  20. 20. t= も忘れてください 20 v=0 o=mozilla...THIS_IS_SDPARTA-37.0 256835513207089710 0 IN IP4 0.0.0.0 s=- t=0 0 a=sendrecv a=fingerprint:sha-256 2B:71:C0:1A:D5:5F:E9:AD:4E:C0:A8:B2:14:06:0E:DE:B8:83:FD:0F:02:8A:CD:22:E5:32:52:91:65:32:95: 69 a=group:BUNDLE sdparta_0 sdparta_1 a=ice-options:trickle Time zonesの略で、開始・終了時刻を書く どうでもい(ry
  21. 21. これまで出てきた行は 必須かつ順序固定 21 v=0 o=mozilla...THIS_IS_SDPARTA-37.0 256835513207089710 0 IN IP4 0.0.0.0 s=- t=0 0 a=sendrecv a=fingerprint:sha-256 2B:71:C0:1A:D5:5F:E9:AD:4E:C0:A8:B2:14:06:0E:DE:B8:83:FD:0F:02:8A:CD:22:E5:32:52:91:65:32:95: 69 a=group:BUNDLE sdparta_0 sdparta_1 a=ice-options:trickle 必ず v,o,s,t の順で現れます。 この v,o,s,t はSDPでは必須ヘッダのため省略NGです。 // 割とどうでもいいけど、消すと SDPのParseにコケて(たぶん)動きません
  22. 22. ちなみに、MozillaはSDP作成時に ユーモア混入中 22 v=0 o=mozilla...THIS_IS_SDPARTA-37.0 256835513207089710 0 IN IP4 0.0.0.0 s=- t=0 0 a=sendrecv a=fingerprint:sha-256 2B:71:C0:1A:D5:5F:E9:AD:4E:C0:A8:B2:14:06:0E:DE:B8:83:FD:0F:02:8A:CD:22:E5:32:52:91:65:32:95: 69 a=group:BUNDLE sdparta_0 sdparta_1 a=ice-options:trickle
  23. 23. 23 完全にパロってる
  24. 24. a= 以降は拡張属性 WebRTC的には超重要 24 v=0 o=mozilla...THIS_IS_SDPARTA-37.0 256835513207089710 0 IN IP4 0.0.0.0 s=- t=0 0 a=sendrecv a=fingerprint:sha-256 2B:71:C0:1A:D5:5F:E9:AD:4E:C0:A8:B2:14:06:0E:DE:B8:83:FD:0F:02:8A:CD:22:E5:32:52:91:65:32:95: 69 a=group:BUNDLE sdparta_0 sdparta_1 a=ice-options:trickle
  25. 25. 特にWebRTC的に重要なのが下2つ 25 v=0 o=mozilla...THIS_IS_SDPARTA-37.0 256835513207089710 0 IN IP4 0.0.0.0 s=- t=0 0 a=sendrecv a=fingerprint:sha-256 2B:71:C0:1A:D5:5F:E9:AD:4E:C0:A8:B2:14:06:0E:DE:B8:83:FD:0F:02:8A:CD:22:E5:32:52:91:65:32:95: 69 a=group:BUNDLE sdparta_0 sdparta_1 a=ice-options:trickle 音声(audio)と映像(video)を多重化する sdparta_0は単なる識別子(後で出てく る) TrickleICE※を利用する ※http://iwashi.co/2014/05/13/trickleice/
  26. 26. 次 26
  27. 27. ②メディア記述部 27 v=0 o=mozilla...THIS_IS_SDPARTA-37.0 256835513207089710 0 IN IP4 0.0.0.0 s=- t=0 0 a=sendrecv a=fingerprint:sha-256 2B:71:C0:1A:D5:5F:E9:AD:4E:C0:A8:B2:14:06:0E:DE:B8:83:FD:0F:02:8A:CD:22:E5:32:52:91:65:32:95:69 a=group:BUNDLE sdparta_0 sdparta_1 a=ice-options:trickle m=audio 59540 RTP/SAVPF 109 9 0 8 c=IN IP4 123.123.123.123 a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ host a=candidate:2 1 UDP 2128609535 192.168.33.1 65026 typ host a=candidate:4 1 UDP 2128543999 192.168.100.1 50644 typ host a=candidate:6 1 UDP 2128478463 192.168.123.1 53189 typ host a=candidate:0 2 UDP 2130379006 192.168.1.8 50370 typ host a=candidate:2 2 UDP 2128609534 192.168.33.1 63402 typ host a=candidate:4 2 UDP 2128543998 192.168.100.1 59589 typ host a=candidate:6 2 UDP 2128478462 192.168.123.1 58005 typ host a=sendrecv a=end-of-candidates a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level a=ice-pwd:55104ba020a9bb780a06b8a8db085a6e a=ice-ufrag:24b20be8 a=mid:sdparta_0 a=rtcp-mux a=rtpmap:109 opus/48000/2 a=rtpmap:9 G722/8000/1 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=setup:actpass a=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8} m=video 53336 RTP/SAVPF 120 126 97 c=IN IP4 123.123.123.123 以下略 ①セッション記述部 ②メディア記述部
  28. 28. メディア記述部には必要なメディアの数だけ m=で始まるブロックが存在 28 m=audio 59540 RTP/SAVPF 109 9 0 8 c=IN IP4 123.123.123.123 a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ host a=sendrecv a=end-of-candidates a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level a=ice-pwd:55104ba020a9bb780a06b8a8db085a6e a=ice-ufrag:24b20be8 a=mid:sdparta_0 a=rtcp-mux a=rtpmap:109 opus/48000/2 a=rtpmap:9 G722/8000/1 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=setup:actpass a=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8} m=video 53336 RTP/SAVPF 120 126 97 c=IN IP4 123.123.123.123 a=candidate:0 1 UDP 2130379007 192.168.1.8 53336 typ host a=sendrecv a=end-of-candidates a=fmtp:120 max-fs=12288;max-fr=60 a=fmtp:126 profile-level-id=42e01f;level-asymmetry-allowed=1;packetization-mode=1 a=fmtp:97 profile-level-id=42e01f;level-asymmetry-allowed=1 a=ice-pwd:55104ba020a9bb780a06b8a8db085a6e a=ice-ufrag:24b20be8 a=mid:sdparta_1 a=rtcp-mux a=rtpmap:120 VP8/90000 a=rtpmap:126 H264/90000 a=rtpmap:97 H264/90000 a=setup:actpass a=ssrc:2337298562 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8} メディア記述部[1] メディア記述部[2]
  29. 29. Audioを取り上げて WebRTC的に重要な項目を説明 29 m=audio 59540 RTP/SAVPF 109 9 0 8 c=IN IP4 123.123.123.123 a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ host a=sendrecv a=end-of-candidates a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level a=ice-pwd:55104ba020a9bb780a06b8a8db085a6e a=ice-ufrag:24b20be8 a=mid:sdparta_0 a=rtcp-mux a=rtpmap:109 opus/48000/2 a=rtpmap:9 G722/8000/1 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=setup:actpass a=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8} m=video 53336 RTP/SAVPF 120 126 97 c=IN IP4 123.123.123.123 a=candidate:0 1 UDP 2130379007 192.168.1.8 53336 typ host a=sendrecv a=end-of-candidates a=fmtp:120 max-fs=12288;max-fr=60 a=fmtp:126 profile-level-id=42e01f;level-asymmetry-allowed=1;packetization-mode=1 a=fmtp:97 profile-level-id=42e01f;level-asymmetry-allowed=1 a=ice-pwd:55104ba020a9bb780a06b8a8db085a6e a=ice-ufrag:24b20be8 a=mid:sdparta_1 a=rtcp-mux a=rtpmap:120 VP8/90000 a=rtpmap:126 H264/90000 a=rtpmap:97 H264/90000 a=setup:actpass a=ssrc:2337298562 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8} メディア記述部[1] メディア記述部[2]
  30. 30. 以降、Audioを取り上げて WebRTC的に重要な項目を説明 30 m=audio 59540 RTP/SAVPF 109 9 0 8 c=IN IP4 123.123.123.123 a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ host a=sendrecv a=end-of-candidates a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level a=ice-pwd:55104ba020a9bb780a06b8a8db085a6e a=ice-ufrag:24b20be8 a=mid:sdparta_0 a=rtcp-mux a=rtpmap:109 opus/48000/2 a=rtpmap:9 G722/8000/1 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=setup:actpass a=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8}
  31. 31. m= にはメディア種別・Port・ プロトコル・ペイロードタイプを書く 31 m=audio 59540 RTP/SAVPF 109 9 0 8 c=IN IP4 123.123.123.123 a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ host a=sendrecv a=end-of-candidates a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level a=ice-pwd:55104ba020a9bb780a06b8a8db085a6e a=ice-ufrag:24b20be8 a=mid:sdparta_0 a=rtcp-mux a=rtpmap:109 opus/48000/2 a=rtpmap:9 G722/8000/1 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=setup:actpass a=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8} 音声 ポート番号 プロトコル RTP/SAVPFは、SRTP/SRTCPと考えて いいです。RFC5124参照。 ペイロードタイプ (次頁で後述)
  32. 32. ペイロードタイプは 2箇所に分かれて記載される 32 m=audio 59540 RTP/SAVPF 109 9 0 8 c=IN IP4 123.123.123.123 a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ host a=sendrecv a=end-of-candidates a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level a=ice-pwd:55104ba020a9bb780a06b8a8db085a6e a=ice-ufrag:24b20be8 a=mid:sdparta_0 a=rtcp-mux a=rtpmap:109 opus/48000/2 a=rtpmap:9 G722/8000/1 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=setup:actpass a=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8} 下のrtpmap属性とリンクしており 下側に詳細なコーデック情報が記載される
  33. 33. rtpmapには ペイロードタイプ・コーデック名・ クロックレート・その他パラメータを記載 33 m=audio 59540 RTP/SAVPF 109 9 0 8 c=IN IP4 123.123.123.123 a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ host a=sendrecv a=end-of-candidates a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level a=ice-pwd:55104ba020a9bb780a06b8a8db085a6e a=ice-ufrag:24b20be8 a=mid:sdparta_0 a=rtcp-mux a=rtpmap:109 opus/48000/2 a=rtpmap:9 G722/8000/1 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=setup:actpass a=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8} Opusという名前のコーデックで 秒間48,000回サンプリングして 2チャネル使う ということ https://tools.ietf.org/html/draft-spittka-payload-rtp-opus-03
  34. 34. ちょっと戻って大事なこと: m=のペイロードタイプは優先度順 34 m=audio 59540 RTP/SAVPF 109 9 0 8 c=IN IP4 123.123.123.123 a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ host a=sendrecv a=end-of-candidates a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level a=ice-pwd:55104ba020a9bb780a06b8a8db085a6e a=ice-ufrag:24b20be8 a=mid:sdparta_0 a=rtcp-mux a=rtpmap:109 opus/48000/2 a=rtpmap:9 G722/8000/1 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=setup:actpass a=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8} これがコーデック選択の優先度で、 109を再優先で使いたいということ (つまりopusをデフォルトで使いたくて、 その他はフォールバックみたいなもの)
  35. 35. c= にはIPアドレスを 35 m=audio 59540 RTP/SAVPF 109 9 0 8 c=IN IP4 123.123.123.123 a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ host a=sendrecv a=end-of-candidates a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level a=ice-pwd:55104ba020a9bb780a06b8a8db085a6e a=ice-ufrag:24b20be8 a=mid:sdparta_0 a=rtcp-mux a=rtpmap:109 opus/48000/2 a=rtpmap:9 G722/8000/1 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=setup:actpass a=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8} INternetのIPv4アドレスで、 123.123.123.123 という値を使う
  36. 36. 以降は a= なので 全て拡張属性だが、WebRTC的に超重要 36 m=audio 59540 RTP/SAVPF 109 9 0 8 c=IN IP4 123.123.123.123 a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ host a=sendrecv a=end-of-candidates a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level a=ice-pwd:55104ba020a9bb780a06b8a8db085a6e a=ice-ufrag:24b20be8 a=mid:sdparta_0 a=rtcp-mux a=rtpmap:109 opus/48000/2 a=rtpmap:9 G722/8000/1 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=setup:actpass a=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8} 拡張属性
  37. 37. a=candidate はICE候補 37 m=audio 59540 RTP/SAVPF 109 9 0 8 c=IN IP4 123.123.123.123 a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ host a=sendrecv a=end-of-candidates a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level a=ice-pwd:55104ba020a9bb780a06b8a8db085a6e a=ice-ufrag:24b20be8 a=mid:sdparta_0 a=rtcp-mux a=rtpmap:109 opus/48000/2 a=rtpmap:9 G722/8000/1 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=setup:actpass a=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8} 2130378007という優先度で、192.168.1.8の UDPポート59540は通信できる可能性がある ローカルのICE候補ですよ ということ (詳細はRFC5245参照)
  38. 38. a=sendrecvは双方向通信という意味 38 m=audio 59540 RTP/SAVPF 109 9 0 8 c=IN IP4 123.123.123.123 a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ host a=sendrecv a=end-of-candidates a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level a=ice-pwd:55104ba020a9bb780a06b8a8db085a6e a=ice-ufrag:24b20be8 a=mid:sdparta_0 a=rtcp-mux a=rtpmap:109 opus/48000/2 a=rtpmap:9 G722/8000/1 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=setup:actpass a=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8} 音声を送信・受信両方やりますよという意味
  39. 39. a=end-of-candidates はtrickleICEの完了 39 m=audio 59540 RTP/SAVPF 109 9 0 8 c=IN IP4 123.123.123.123 a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ host a=sendrecv a=end-of-candidates a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level a=ice-pwd:55104ba020a9bb780a06b8a8db085a6e a=ice-ufrag:24b20be8 a=mid:sdparta_0 a=rtcp-mux a=rtpmap:109 opus/48000/2 a=rtpmap:9 G722/8000/1 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=setup:actpass a=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8} ICE候補収集(harvest)が終わったという意味 draft-ietf-mmusic-trickle-ice-02
  40. 40. a=extmap は RTP Headerを拡張する 40 m=audio 59540 RTP/SAVPF 109 9 0 8 c=IN IP4 123.123.123.123 a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ host a=sendrecv a=end-of-candidates a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level a=ice-pwd:55104ba020a9bb780a06b8a8db085a6e a=ice-ufrag:24b20be8 a=mid:sdparta_0 a=rtcp-mux a=rtpmap:109 opus/48000/2 a=rtpmap:9 G722/8000/1 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=setup:actpass a=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8} urn:ietf:params:rtp-hdrext:ssrc-audio-level でRTP Headerを拡張する
  41. 41. a=ice-pwd と a=ice-ufrag は ICEのユーザ名・パスワード 41 m=audio 59540 RTP/SAVPF 109 9 0 8 c=IN IP4 123.123.123.123 a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ host a=sendrecv a=end-of-candidates a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level a=ice-pwd:55104ba020a9bb780a06b8a8db085a6e a=ice-ufrag:24b20be8 a=mid:sdparta_0 a=rtcp-mux a=rtpmap:109 opus/48000/2 a=rtpmap:9 G722/8000/1 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=setup:actpass a=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8} ICEのユーザ名とパスワード
  42. 42. a=midは多重化の識別子 42 m=audio 59540 RTP/SAVPF 109 9 0 8 c=IN IP4 123.123.123.123 a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ host a=sendrecv a=end-of-candidates a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level a=ice-pwd:55104ba020a9bb780a06b8a8db085a6e a=ice-ufrag:24b20be8 a=mid:sdparta_0 a=rtcp-mux a=rtpmap:109 opus/48000/2 a=rtpmap:9 G722/8000/1 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=setup:actpass a=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8} (セッション記述部から1行再掲) a=group:BUNDLE sdparta_0 sdparta_1
  43. 43. a=rtcp-mux はRTPとRTCPを多重化する 43 m=audio 59540 RTP/SAVPF 109 9 0 8 c=IN IP4 123.123.123.123 a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ host a=sendrecv a=end-of-candidates a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level a=ice-pwd:55104ba020a9bb780a06b8a8db085a6e a=ice-ufrag:24b20be8 a=mid:sdparta_0 a=rtcp-mux a=rtpmap:109 opus/48000/2 a=rtpmap:9 G722/8000/1 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=setup:actpass a=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8} RTPとRTCPを多重化、詳細はRFC5761。 (本来は別々のPortだが、UDPホールパンチ等 のコストを減らせる)
  44. 44. a=setup:actpass でDTLSを使う 44 m=audio 59540 RTP/SAVPF 109 9 0 8 c=IN IP4 123.123.123.123 a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ host a=sendrecv a=end-of-candidates a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level a=ice-pwd:55104ba020a9bb780a06b8a8db085a6e a=ice-ufrag:24b20be8 a=mid:sdparta_0 a=rtcp-mux a=rtpmap:109 opus/48000/2 a=rtpmap:9 G722/8000/1 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=setup:actpass a=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8} DTLSを使いはじめようという意味 RFC5763参照
  45. 45. a=ssrcはRTPで利用する 参加者の識別子のこと 45 m=audio 59540 RTP/SAVPF 109 9 0 8 c=IN IP4 123.123.123.123 a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ host a=sendrecv a=end-of-candidates a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level a=ice-pwd:55104ba020a9bb780a06b8a8db085a6e a=ice-ufrag:24b20be8 a=mid:sdparta_0 a=rtcp-mux a=rtpmap:109 opus/48000/2 a=rtpmap:9 G722/8000/1 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=setup:actpass a=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8} SSRCはランダムに割り振られ変わる CNAMEはランダムに変わってもわかる ように紐付けする名前
  46. 46. Videoは略(RFC読もう) 46 m=audio 59540 RTP/SAVPF 109 9 0 8 c=IN IP4 123.123.123.123 a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ host a=sendrecv a=end-of-candidates a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level a=ice-pwd:55104ba020a9bb780a06b8a8db085a6e a=ice-ufrag:24b20be8 a=mid:sdparta_0 a=rtcp-mux a=rtpmap:109 opus/48000/2 a=rtpmap:9 G722/8000/1 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=setup:actpass a=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8} m=video 53336 RTP/SAVPF 120 126 97 c=IN IP4 123.123.123.123 a=candidate:0 1 UDP 2130379007 192.168.1.8 53336 typ host a=sendrecv a=end-of-candidates a=fmtp:120 max-fs=12288;max-fr=60 a=fmtp:126 profile-level-id=42e01f;level-asymmetry-allowed=1;packetization-mode=1 a=fmtp:97 profile-level-id=42e01f;level-asymmetry-allowed=1 a=ice-pwd:55104ba020a9bb780a06b8a8db085a6e a=ice-ufrag:24b20be8 a=mid:sdparta_1 a=rtcp-mux a=rtpmap:120 VP8/90000 a=rtpmap:126 H264/90000 a=rtpmap:97 H264/90000 a=setup:actpass a=ssrc:2337298562 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8} メディア記述部[1] メディア記述部[2] 説明略!
  47. 47. ということで 47
  48. 48. 48 こう見えていたのが
  49. 49. 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 192.168.123.1 51986 typ host generation 0 a=candidate:964645231 2 udp 2122260223 192.168.123.1 51986 typ host generation 0 a=candidate:678703848 1 udp 2122194687 192.168.100.1 49989 typ host generation 0 a=candidate:678703848 2 udp 2122194687 192.168.100.1 49989 typ host generation 0 a=candidate:2178013618 1 udp 2122129151 192.168.33.1 55585 typ host generation 0 a=candidate:2178013618 2 udp 2122129151 192.168.33.1 55585 typ host generation 0 a=candidate:4278134664 1 udp 2122063615 192.168.1.8 50973 typ host generation 0 a=candidate:4278134664 2 udp 2122063615 192.168.1.8 50973 typ host generation 0 a=candidate:2013048223 1 tcp 1518280447 192.168.123.1 0 typ host tcptype active generation 0 a=candidate:2013048223 2 tcp 1518280447 192.168.123.1 0 typ host tcptype active generation 0 a=candidate:1727516184 1 tcp 1518214911 192.168.100.1 0 typ host tcptype active generation 0 a=candidate:1727516184 2 tcp 1518214911 192.168.100.1 0 typ host tcptype active generation 0 a=candidate:3478267202 1 tcp 1518149375 192.168.33.1 0 typ host tcptype active generation 0 a=candidate:3478267202 2 tcp 1518149375 192.168.33.1 0 typ host tcptype active generation 0 a=candidate:2960972664 1 tcp 1518083839 192.168.1.8 0 typ host tcptype active generation 0 a=candidate:2960972664 2 tcp 1518083839 192.168.1.8 0 typ host tcptype active generation 0 a=ice-ufrag:oaw7CiwPrr8SugF+ a=ice-pwd:6Wvv5xxI8Es575wFb5Houqlg a=ice-options:google-ice a=fingerprint:sha-256 11:01:4A:47:81:4F:EA:E0:0B:02:FA:9E:D4:CF:CF:95:C4:50:D6:CE:16:DF:37:AE:B0:FD:F2:B2:C5:E7:DD:30 a=setup:actpass a=mid:video a=extmap:2 urn:ietf:params:rtp-hdrext:toffset a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time a=sendrecv a=rtcp-mux a=rtpmap:100 VP8/90000 a=rtpmap:116 red/90000 a=rtpmap:117 ulpfec/90000 a=rtpmap:96 rtx/90000 a=fmtp:96 apt=100 49 こうなったはず!
  50. 50. おしまい! 50 NTTコミュニケーションズの 新卒採用(WebRTCに限らず)に 興味がある方がいれば @iwashi86 までご連絡ください! ちょっと宣伝

×