50
SDP for WebRTC -From Basics to Maniacs- WebRTC Meetup Tokyo #7 @iwashi86 1

SDP for WebRTC - From Basics to Maniacs -

Embed Size (px)

Citation preview

Page 1: SDP for WebRTC - From Basics to Maniacs -

SDP for WebRTC-From Basics to Maniacs-

WebRTC Meetup Tokyo #7@iwashi86

1

Page 2: SDP for WebRTC - From Basics to Maniacs -

●Attribute

・Name -> Yoshimasa IWASE

・Twitter -> @iwashi86

・Web -> iwashi.co

●Work @ NTT Communications

・SkyWay(WebRTC)の裏側の開発運用

・HTML5 Experts.jpというWebメディアの編集

2

Page 3: SDP for WebRTC - From Basics to Maniacs -

今日のお話

SDP

注:ORTCが来たら大体忘れていいことが多いです。ただし、本質的にメディア通信に必要な情報(ICEとか)はORTCでも同じであるため、今後も役立つと思います。

3

Page 4: SDP for WebRTC - From Basics to Maniacs -

v=0o=- 7919192553830045546 2 IN IP4 127.0.0.1s=-t=0 0a=group:BUNDLE videoa=msid-semantic: WMS IJaEuKH4cYDg9YxONEt16knZtoFuZZ4ioQRqm=video 51986 RTP/SAVPF 100 116 117 96c=IN IP4 192.168.123.1a=rtcp:51986 IN IP4 192.168.123.1a=candidate:964645231 1 udp 2122260223 192.168.123.1 51986 typ host generation 0a=candidate:964645231 2 udp 2122260223 192.168.123.1 51986 typ host generation 0a=candidate:678703848 1 udp 2122194687 192.168.100.1 49989 typ host generation 0a=candidate:678703848 2 udp 2122194687 192.168.100.1 49989 typ host generation 0a=candidate:2178013618 1 udp 2122129151 192.168.33.1 55585 typ host generation 0a=candidate:2178013618 2 udp 2122129151 192.168.33.1 55585 typ host generation 0a=candidate:4278134664 1 udp 2122063615 192.168.1.8 50973 typ host generation 0a=candidate:4278134664 2 udp 2122063615 192.168.1.8 50973 typ host generation 0a=candidate:2013048223 1 tcp 1518280447 192.168.123.1 0 typ host tcptype active generation 0a=candidate:2013048223 2 tcp 1518280447 192.168.123.1 0 typ host tcptype active generation 0a=candidate:1727516184 1 tcp 1518214911 192.168.100.1 0 typ host tcptype active generation 0a=candidate:1727516184 2 tcp 1518214911 192.168.100.1 0 typ host tcptype active generation 0a=candidate:3478267202 1 tcp 1518149375 192.168.33.1 0 typ host tcptype active generation 0a=candidate:3478267202 2 tcp 1518149375 192.168.33.1 0 typ host tcptype active generation 0a=candidate:2960972664 1 tcp 1518083839 192.168.1.8 0 typ host tcptype active generation 0a=candidate:2960972664 2 tcp 1518083839 192.168.1.8 0 typ host tcptype active generation 0a=ice-ufrag:oaw7CiwPrr8SugF+a=ice-pwd:6Wvv5xxI8Es575wFb5Houqlga=ice-options:google-icea=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:30a=setup:actpassa=mid:videoa=extmap:2 urn:ietf:params:rtp-hdrext:toffseta=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-timea=sendrecva=rtcp-muxa=rtpmap:100 VP8/90000a=rtpmap:116 red/90000a=rtpmap:117 ulpfec/90000a=rtpmap:96 rtx/90000a=fmtp:96 apt=100 4

VoIP上がりの人 -> 多少読める

Page 5: SDP for WebRTC - From Basics to Maniacs -

5

Webデベロッパ -> こう見えてるはず

Page 6: SDP for WebRTC - From Basics to Maniacs -

本LTのゴール

・SDPの読み方の基本を理解・ちょっとマニアックな部分も理解

・嫌悪感を軽減

6

Page 7: SDP for WebRTC - From Basics to Maniacs -

そもそも何故

SDPが必要?

7

Page 8: SDP for WebRTC - From Basics to Maniacs -

柔軟にメディア疎通するためには通信条件のネゴシエーションが必要

8

昔々

最近

条件が一緒なのでネゴシエーション不要

Aが使える Aが使える

VP8とH264が使える

VP8だけ使える

VP8とH264が使えるよ、と申し出る

VP8だけ使えるよ、と答える

ネゴシエーションで柔軟に通信条件を変更できる!

通信条件は簡単には変えられない…

Page 9: SDP for WebRTC - From Basics to Maniacs -

このようなモデルをオファーアンサーモデル(RFC 3264)と呼ぶ

9

VP8とH264が使えるよ、と申し出る

VP8だけ使えるよ、と答える

オファー(Offer)

アンサー(Answer)

Agent(Offerer)

Agent(Answerer)

メディア(音声・映像・データ)

Page 10: SDP for WebRTC - From Basics to Maniacs -

SDPはオファーとアンサーの記述方法(表現形式)とやりとりの仕組み

10

VP8とH264が使えるよ、と申し出る

VP8だけ使えるよ、と答える

オファー(Offer)

アンサー(Answer)

Agent(Offerer)

Agent(Answerer)

メディア(音声・映像・データ)

<SDPの例>v=0o=- 7919192553830045546 2 IN IP4 127.0.0.1s=-t=0 0a=group:BUNDLE videoa=msid-semantic: WMS IJaEuKH4cYDg9YxONEt16knZtoFuZZ4ioQRqm=video 51986 RTP/SAVPF 100 116 117 96c=IN IP4 192.168.123.1a=rtcp:51986 IN IP4 192.168.123.1a=candidate:964645231 1 udp 2122260223 (略)

Page 11: SDP for WebRTC - From Basics to Maniacs -

オファーアンサーモデルにはセッション(親) と メディア(子) の概念がある

11

Agent(Offerer)

Agent(Answerer)

セッション(複数のメディアを含む総体)

音声メディア

映像メディア

データメディア

補足:メディアとは、実際の音声ストリームデータ等を指す

Page 12: SDP for WebRTC - From Basics to Maniacs -

そのためSDPにも①セッション記述部 と ②メディア記述部 がある

12

v=0o=mozilla...THIS_IS_SDPARTA-37.0 256835513207089710 0 IN IP4 0.0.0.0s=-t=0 0a=sendrecva=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:69a=group:BUNDLE sdparta_0 sdparta_1a=ice-options:trickle

m=audio 59540 RTP/SAVPF 109 9 0 8c=IN IP4 123.123.123.123a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ hosta=candidate:2 1 UDP 2128609535 192.168.33.1 65026 typ hosta=candidate:4 1 UDP 2128543999 192.168.100.1 50644 typ hosta=candidate:6 1 UDP 2128478463 192.168.123.1 53189 typ hosta=candidate:0 2 UDP 2130379006 192.168.1.8 50370 typ hosta=candidate:2 2 UDP 2128609534 192.168.33.1 63402 typ hosta=candidate:4 2 UDP 2128543998 192.168.100.1 59589 typ hosta=candidate:6 2 UDP 2128478462 192.168.123.1 58005 typ hosta=sendrecva=end-of-candidatesa=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-levela=ice-pwd:55104ba020a9bb780a06b8a8db085a6ea=ice-ufrag:24b20be8a=mid:sdparta_0a=rtcp-muxa=rtpmap:109 opus/48000/2a=rtpmap:9 G722/8000/1a=rtpmap:0 PCMU/8000a=rtpmap:8 PCMA/8000a=setup:actpassa=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8}m=video 53336 RTP/SAVPF 120 126 97c=IN IP4 123.123.123.123以下略

①セッション記述部

②メディア記述部

Firefox Beta(37.0)で取得した生SDPです

Page 13: SDP for WebRTC - From Basics to Maniacs -

そのためSDPにも①セッション記述部 と ②メディア記述部 がある

13

v=0o=mozilla...THIS_IS_SDPARTA-37.0 256835513207089710 0 IN IP4 0.0.0.0s=-t=0 0a=sendrecva=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:69a=group:BUNDLE sdparta_0 sdparta_1a=ice-options:trickle

m=audio 59540 RTP/SAVPF 109 9 0 8c=IN IP4 123.123.123.123a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ hosta=candidate:2 1 UDP 2128609535 192.168.33.1 65026 typ hosta=candidate:4 1 UDP 2128543999 192.168.100.1 50644 typ hosta=candidate:6 1 UDP 2128478463 192.168.123.1 53189 typ hosta=candidate:0 2 UDP 2130379006 192.168.1.8 50370 typ hosta=candidate:2 2 UDP 2128609534 192.168.33.1 63402 typ hosta=candidate:4 2 UDP 2128543998 192.168.100.1 59589 typ hosta=candidate:6 2 UDP 2128478462 192.168.123.1 58005 typ hosta=sendrecva=end-of-candidatesa=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-levela=ice-pwd:55104ba020a9bb780a06b8a8db085a6ea=ice-ufrag:24b20be8a=mid:sdparta_0a=rtcp-muxa=rtpmap:109 opus/48000/2a=rtpmap:9 G722/8000/1a=rtpmap:0 PCMU/8000a=rtpmap:8 PCMA/8000a=setup:actpassa=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8}m=video 53336 RTP/SAVPF 120 126 97c=IN IP4 123.123.123.123以下略

①セッション記述部

②メディア記述部

Firefox Beta(37.0)で取得した生SDPです

TIPS:セッション記述部とメディア記述部の見分け方はm= で始まる行を探すこと

Page 14: SDP for WebRTC - From Basics to Maniacs -

以降SDP詳説

14

Page 15: SDP for WebRTC - From Basics to Maniacs -

まず①セッション記述部から

15

v=0o=mozilla...THIS_IS_SDPARTA-37.0 256835513207089710 0 IN IP4 0.0.0.0s=-t=0 0a=sendrecva=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:69a=group:BUNDLE sdparta_0 sdparta_1a=ice-options:trickle

m=audio 59540 RTP/SAVPF 109 9 0 8c=IN IP4 123.123.123.123a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ hosta=candidate:2 1 UDP 2128609535 192.168.33.1 65026 typ hosta=candidate:4 1 UDP 2128543999 192.168.100.1 50644 typ hosta=candidate:6 1 UDP 2128478463 192.168.123.1 53189 typ hosta=candidate:0 2 UDP 2130379006 192.168.1.8 50370 typ hosta=candidate:2 2 UDP 2128609534 192.168.33.1 63402 typ hosta=candidate:4 2 UDP 2128543998 192.168.100.1 59589 typ hosta=candidate:6 2 UDP 2128478462 192.168.123.1 58005 typ hosta=sendrecva=end-of-candidatesa=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-levela=ice-pwd:55104ba020a9bb780a06b8a8db085a6ea=ice-ufrag:24b20be8a=mid:sdparta_0a=rtcp-muxa=rtpmap:109 opus/48000/2a=rtpmap:9 G722/8000/1a=rtpmap:0 PCMU/8000a=rtpmap:8 PCMA/8000a=setup:actpassa=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8}m=video 53336 RTP/SAVPF 120 126 97c=IN IP4 123.123.123.123以下略

①セッション記述部

②メディア記述部

ちなみに、Firefox Beta(37.0)で取得した生SDPです

Page 16: SDP for WebRTC - From Basics to Maniacs -

①セッション記述部 詳説

16

v=0o=mozilla...THIS_IS_SDPARTA-37.0 256835513207089710 0 IN IP4 0.0.0.0s=-t=0 0a=sendrecva=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:69a=group:BUNDLE sdparta_0 sdparta_1a=ice-options:trickle

上から1つずつチェックしていきます

Page 17: SDP for WebRTC - From Basics to Maniacs -

v= はバージョン

17

v=0o=mozilla...THIS_IS_SDPARTA-37.0 256835513207089710 0 IN IP4 0.0.0.0s=-t=0 0a=sendrecva=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:69a=group:BUNDLE sdparta_0 sdparta_1a=ice-options:trickle

Versionの略。どのSDPバージョンを使うか指定する。

WebRTC的には割とどうでもいい。

Page 18: SDP for WebRTC - From Basics to Maniacs -

o= には作成者を

18

v=0

o=mozilla...THIS_IS_SDPARTA-37.0 256835513207089710 0 IN IP4 0.0.0.0s=-t=0 0a=sendrecva=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:69a=group:BUNDLE sdparta_0 sdparta_1a=ice-options:trickle

Originの略。だれがSDPを作成したのかということ。

WebRTC的には割とどうでもいい。

Page 19: SDP for WebRTC - From Basics to Maniacs -

s= は忘れてください

19

v=0

o=mozilla...THIS_IS_SDPARTA-37.0 256835513207089710 0 IN IP4 0.0.0.0

s=-t=0 0a=sendrecva=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:69a=group:BUNDLE sdparta_0 sdparta_1a=ice-options:trickle

Session nameの略。どうでもいいので忘れてください。

Page 20: SDP for WebRTC - From Basics to Maniacs -

t= も忘れてください

20

v=0

o=mozilla...THIS_IS_SDPARTA-37.0 256835513207089710 0 IN IP4 0.0.0.0

s=-t=0 0a=sendrecva=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:69a=group:BUNDLE sdparta_0 sdparta_1a=ice-options:trickle

Time zonesの略で、開始・終了時刻を書くどうでもい(ry

Page 21: SDP for WebRTC - From Basics to Maniacs -

これまで出てきた行は必須かつ順序固定

21

v=0o=mozilla...THIS_IS_SDPARTA-37.0 256835513207089710 0 IN IP4 0.0.0.0s=-t=0 0a=sendrecva=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:69a=group:BUNDLE sdparta_0 sdparta_1a=ice-options:trickle

必ず v,o,s,tの順で現れます。この v,o,s,tはSDPでは必須ヘッダのため省略NGです。

// 割とどうでもいいけど、消すとSDPのParseにコケて(たぶん)動きません

Page 22: SDP for WebRTC - From Basics to Maniacs -

ちなみに、MozillaはSDP作成時にユーモア混入中

22

v=0

o=mozilla...THIS_IS_SDPARTA-37.0 256835513207089710 0 IN

IP4 0.0.0.0s=-t=0 0a=sendrecva=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:69a=group:BUNDLE sdparta_0 sdparta_1a=ice-options:trickle

Page 23: SDP for WebRTC - From Basics to Maniacs -

23

完全にパロってる

Page 24: SDP for WebRTC - From Basics to Maniacs -

a= 以降は拡張属性WebRTC的には超重要

24

v=0

o=mozilla...THIS_IS_SDPARTA-37.0 256835513207089710 0 IN IP4 0.0.0.0

s=-t=0 0a=sendrecva=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:69a=group:BUNDLE sdparta_0 sdparta_1a=ice-options:trickle

Page 25: SDP for WebRTC - From Basics to Maniacs -

特にWebRTC的に重要なのが下2つ

25

v=0

o=mozilla...THIS_IS_SDPARTA-37.0 256835513207089710 0 IN IP4 0.0.0.0

s=-t=0 0a=sendrecva=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:69a=group:BUNDLE sdparta_0 sdparta_1a=ice-options:trickle

音声(audio)と映像(video)を多重化するsdparta_0は単なる識別子(後で出てく

る)

TrickleICE※を利用する

※http://iwashi.co/2014/05/13/trickleice/

Page 26: SDP for WebRTC - From Basics to Maniacs -

26

Page 27: SDP for WebRTC - From Basics to Maniacs -

②メディア記述部

27

v=0o=mozilla...THIS_IS_SDPARTA-37.0 256835513207089710 0 IN IP4 0.0.0.0s=-t=0 0a=sendrecva=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:69a=group:BUNDLE sdparta_0 sdparta_1a=ice-options:trickle

m=audio 59540 RTP/SAVPF 109 9 0 8c=IN IP4 123.123.123.123a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ hosta=candidate:2 1 UDP 2128609535 192.168.33.1 65026 typ hosta=candidate:4 1 UDP 2128543999 192.168.100.1 50644 typ hosta=candidate:6 1 UDP 2128478463 192.168.123.1 53189 typ hosta=candidate:0 2 UDP 2130379006 192.168.1.8 50370 typ hosta=candidate:2 2 UDP 2128609534 192.168.33.1 63402 typ hosta=candidate:4 2 UDP 2128543998 192.168.100.1 59589 typ hosta=candidate:6 2 UDP 2128478462 192.168.123.1 58005 typ hosta=sendrecva=end-of-candidatesa=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-levela=ice-pwd:55104ba020a9bb780a06b8a8db085a6ea=ice-ufrag:24b20be8a=mid:sdparta_0a=rtcp-muxa=rtpmap:109 opus/48000/2a=rtpmap:9 G722/8000/1a=rtpmap:0 PCMU/8000a=rtpmap:8 PCMA/8000a=setup:actpassa=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8}m=video 53336 RTP/SAVPF 120 126 97c=IN IP4 123.123.123.123以下略

①セッション記述部

②メディア記述部

Page 28: SDP for WebRTC - From Basics to Maniacs -

メディア記述部には必要なメディアの数だけm=で始まるブロックが存在

28

m=audio 59540 RTP/SAVPF 109 9 0 8c=IN IP4 123.123.123.123a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ hosta=sendrecva=end-of-candidatesa=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-levela=ice-pwd:55104ba020a9bb780a06b8a8db085a6ea=ice-ufrag:24b20be8a=mid:sdparta_0a=rtcp-muxa=rtpmap:109 opus/48000/2a=rtpmap:9 G722/8000/1a=rtpmap:0 PCMU/8000a=rtpmap:8 PCMA/8000a=setup:actpassa=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8}

m=video 53336 RTP/SAVPF 120 126 97c=IN IP4 123.123.123.123a=candidate:0 1 UDP 2130379007 192.168.1.8 53336 typ hosta=sendrecva=end-of-candidatesa=fmtp:120 max-fs=12288;max-fr=60a=fmtp:126 profile-level-id=42e01f;level-asymmetry-allowed=1;packetization-mode=1a=fmtp:97 profile-level-id=42e01f;level-asymmetry-allowed=1a=ice-pwd:55104ba020a9bb780a06b8a8db085a6ea=ice-ufrag:24b20be8a=mid:sdparta_1a=rtcp-muxa=rtpmap:120 VP8/90000a=rtpmap:126 H264/90000a=rtpmap:97 H264/90000a=setup:actpassa=ssrc:2337298562 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8}

メディア記述部[1]

メディア記述部[2]

Page 29: SDP for WebRTC - From Basics to Maniacs -

Audioを取り上げてWebRTC的に重要な項目を説明

29

m=audio 59540 RTP/SAVPF 109 9 0 8c=IN IP4 123.123.123.123a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ hosta=sendrecva=end-of-candidatesa=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-levela=ice-pwd:55104ba020a9bb780a06b8a8db085a6ea=ice-ufrag:24b20be8a=mid:sdparta_0a=rtcp-muxa=rtpmap:109 opus/48000/2a=rtpmap:9 G722/8000/1a=rtpmap:0 PCMU/8000a=rtpmap:8 PCMA/8000a=setup:actpassa=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8}

m=video 53336 RTP/SAVPF 120 126 97c=IN IP4 123.123.123.123a=candidate:0 1 UDP 2130379007 192.168.1.8 53336 typ hosta=sendrecva=end-of-candidatesa=fmtp:120 max-fs=12288;max-fr=60a=fmtp:126 profile-level-id=42e01f;level-asymmetry-allowed=1;packetization-mode=1a=fmtp:97 profile-level-id=42e01f;level-asymmetry-allowed=1a=ice-pwd:55104ba020a9bb780a06b8a8db085a6ea=ice-ufrag:24b20be8a=mid:sdparta_1a=rtcp-muxa=rtpmap:120 VP8/90000a=rtpmap:126 H264/90000a=rtpmap:97 H264/90000a=setup:actpassa=ssrc:2337298562 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8}

メディア記述部[1]

メディア記述部[2]

Page 30: SDP for WebRTC - From Basics to Maniacs -

以降、Audioを取り上げてWebRTC的に重要な項目を説明

30

m=audio 59540 RTP/SAVPF 109 9 0 8c=IN IP4 123.123.123.123a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ hosta=sendrecva=end-of-candidatesa=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-levela=ice-pwd:55104ba020a9bb780a06b8a8db085a6ea=ice-ufrag:24b20be8a=mid:sdparta_0a=rtcp-muxa=rtpmap:109 opus/48000/2a=rtpmap:9 G722/8000/1a=rtpmap:0 PCMU/8000a=rtpmap:8 PCMA/8000a=setup:actpassa=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8}

Page 31: SDP for WebRTC - From Basics to Maniacs -

m= にはメディア種別・Port・プロトコル・ペイロードタイプを書く

31

m=audio 59540 RTP/SAVPF 109 9 0 8c=IN IP4 123.123.123.123a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ hosta=sendrecva=end-of-candidatesa=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-levela=ice-pwd:55104ba020a9bb780a06b8a8db085a6ea=ice-ufrag:24b20be8a=mid:sdparta_0a=rtcp-muxa=rtpmap:109 opus/48000/2a=rtpmap:9 G722/8000/1a=rtpmap:0 PCMU/8000a=rtpmap:8 PCMA/8000a=setup:actpassa=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8}

音声

ポート番号

プロトコル

RTP/SAVPFは、SRTP/SRTCPと考えていいです。RFC5124参照。

ペイロードタイプ(次頁で後述)

Page 32: SDP for WebRTC - From Basics to Maniacs -

ペイロードタイプは2箇所に分かれて記載される

32

m=audio 59540 RTP/SAVPF 109 9 0 8c=IN IP4 123.123.123.123a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ hosta=sendrecva=end-of-candidatesa=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-levela=ice-pwd:55104ba020a9bb780a06b8a8db085a6ea=ice-ufrag:24b20be8a=mid:sdparta_0a=rtcp-mux

a=rtpmap:109 opus/48000/2a=rtpmap:9 G722/8000/1a=rtpmap:0 PCMU/8000a=rtpmap:8 PCMA/8000a=setup:actpassa=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8}

下のrtpmap属性とリンクしており下側に詳細なコーデック情報が記載される

Page 33: SDP for WebRTC - From Basics to Maniacs -

rtpmapには ペイロードタイプ・コーデック名・クロックレート・その他パラメータを記載

33

m=audio 59540 RTP/SAVPF 109 9 0 8c=IN IP4 123.123.123.123a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ hosta=sendrecva=end-of-candidatesa=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-levela=ice-pwd:55104ba020a9bb780a06b8a8db085a6ea=ice-ufrag:24b20be8a=mid:sdparta_0a=rtcp-mux

a=rtpmap:109 opus/48000/2a=rtpmap:9 G722/8000/1a=rtpmap:0 PCMU/8000a=rtpmap:8 PCMA/8000a=setup:actpassa=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8}

Opusという名前のコーデックで秒間48,000回サンプリングして

2チャネル使う ということhttps://tools.ietf.org/html/draft-spittka-payload-rtp-opus-03

Page 34: SDP for WebRTC - From Basics to Maniacs -

ちょっと戻って大事なこと:m=のペイロードタイプは優先度順

34

m=audio 59540 RTP/SAVPF 109 9 0 8c=IN IP4 123.123.123.123a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ hosta=sendrecva=end-of-candidatesa=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-levela=ice-pwd:55104ba020a9bb780a06b8a8db085a6ea=ice-ufrag:24b20be8a=mid:sdparta_0a=rtcp-mux

a=rtpmap:109 opus/48000/2a=rtpmap:9 G722/8000/1a=rtpmap:0 PCMU/8000a=rtpmap:8 PCMA/8000a=setup:actpassa=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8}

これがコーデック選択の優先度で、109を再優先で使いたいということ

(つまりopusをデフォルトで使いたくて、その他はフォールバックみたいなもの)

Page 35: SDP for WebRTC - From Basics to Maniacs -

c= にはIPアドレスを

35

m=audio 59540 RTP/SAVPF 109 9 0 8

c=IN IP4 123.123.123.123a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ hosta=sendrecva=end-of-candidatesa=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-levela=ice-pwd:55104ba020a9bb780a06b8a8db085a6ea=ice-ufrag:24b20be8a=mid:sdparta_0a=rtcp-muxa=rtpmap:109 opus/48000/2a=rtpmap:9 G722/8000/1a=rtpmap:0 PCMU/8000a=rtpmap:8 PCMA/8000a=setup:actpassa=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8}

INternetのIPv4アドレスで、123.123.123.123 という値を使う

Page 36: SDP for WebRTC - From Basics to Maniacs -

以降は a= なので全て拡張属性だが、WebRTC的に超重要

36

m=audio 59540 RTP/SAVPF 109 9 0 8c=IN IP4 123.123.123.123a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ hosta=sendrecva=end-of-candidatesa=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-levela=ice-pwd:55104ba020a9bb780a06b8a8db085a6ea=ice-ufrag:24b20be8a=mid:sdparta_0a=rtcp-muxa=rtpmap:109 opus/48000/2a=rtpmap:9 G722/8000/1a=rtpmap:0 PCMU/8000a=rtpmap:8 PCMA/8000a=setup:actpassa=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8}

拡張属性

Page 37: SDP for WebRTC - From Basics to Maniacs -

a=candidate はICE候補

37

m=audio 59540 RTP/SAVPF 109 9 0 8c=IN IP4 123.123.123.123

a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ hosta=sendrecva=end-of-candidatesa=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-levela=ice-pwd:55104ba020a9bb780a06b8a8db085a6ea=ice-ufrag:24b20be8a=mid:sdparta_0a=rtcp-muxa=rtpmap:109 opus/48000/2a=rtpmap:9 G722/8000/1a=rtpmap:0 PCMU/8000a=rtpmap:8 PCMA/8000a=setup:actpassa=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8}

2130378007という優先度で、192.168.1.8のUDPポート59540は通信できる可能性があるローカルのICE候補ですよ ということ

(詳細はRFC5245参照)

Page 38: SDP for WebRTC - From Basics to Maniacs -

a=sendrecvは双方向通信という意味

38

m=audio 59540 RTP/SAVPF 109 9 0 8c=IN IP4 123.123.123.123a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ hosta=sendrecva=end-of-candidatesa=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-levela=ice-pwd:55104ba020a9bb780a06b8a8db085a6ea=ice-ufrag:24b20be8a=mid:sdparta_0a=rtcp-muxa=rtpmap:109 opus/48000/2a=rtpmap:9 G722/8000/1a=rtpmap:0 PCMU/8000a=rtpmap:8 PCMA/8000a=setup:actpassa=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8}

音声を送信・受信両方やりますよという意味

Page 39: SDP for WebRTC - From Basics to Maniacs -

a=end-of-candidates はtrickleICEの完了

39

m=audio 59540 RTP/SAVPF 109 9 0 8c=IN IP4 123.123.123.123a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ hosta=sendrecva=end-of-candidatesa=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-levela=ice-pwd:55104ba020a9bb780a06b8a8db085a6ea=ice-ufrag:24b20be8a=mid:sdparta_0a=rtcp-muxa=rtpmap:109 opus/48000/2a=rtpmap:9 G722/8000/1a=rtpmap:0 PCMU/8000a=rtpmap:8 PCMA/8000a=setup:actpassa=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8}

ICE候補収集(harvest)が終わったという意味draft-ietf-mmusic-trickle-ice-02

Page 40: SDP for WebRTC - From Basics to Maniacs -

a=extmap は RTP Headerを拡張する

40

m=audio 59540 RTP/SAVPF 109 9 0 8c=IN IP4 123.123.123.123a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ hosta=sendrecva=end-of-candidates

a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-levela=ice-pwd:55104ba020a9bb780a06b8a8db085a6ea=ice-ufrag:24b20be8a=mid:sdparta_0a=rtcp-muxa=rtpmap:109 opus/48000/2a=rtpmap:9 G722/8000/1a=rtpmap:0 PCMU/8000a=rtpmap:8 PCMA/8000a=setup:actpassa=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8}

urn:ietf:params:rtp-hdrext:ssrc-audio-levelでRTP Headerを拡張する

Page 41: SDP for WebRTC - From Basics to Maniacs -

a=ice-pwd と a=ice-ufrag はICEのユーザ名・パスワード

41

m=audio 59540 RTP/SAVPF 109 9 0 8c=IN IP4 123.123.123.123a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ hosta=sendrecva=end-of-candidatesa=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level

a=ice-pwd:55104ba020a9bb780a06b8a8db085a6ea=ice-ufrag:24b20be8a=mid:sdparta_0a=rtcp-muxa=rtpmap:109 opus/48000/2a=rtpmap:9 G722/8000/1a=rtpmap:0 PCMU/8000a=rtpmap:8 PCMA/8000a=setup:actpassa=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8}

ICEのユーザ名とパスワード

Page 42: SDP for WebRTC - From Basics to Maniacs -

a=midは多重化の識別子

42

m=audio 59540 RTP/SAVPF 109 9 0 8c=IN IP4 123.123.123.123a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ hosta=sendrecva=end-of-candidatesa=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-levela=ice-pwd:55104ba020a9bb780a06b8a8db085a6ea=ice-ufrag:24b20be8

a=mid:sdparta_0a=rtcp-muxa=rtpmap:109 opus/48000/2a=rtpmap:9 G722/8000/1a=rtpmap:0 PCMU/8000a=rtpmap:8 PCMA/8000a=setup:actpassa=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8}

(セッション記述部から1行再掲)a=group:BUNDLE sdparta_0 sdparta_1

Page 43: SDP for WebRTC - From Basics to Maniacs -

a=rtcp-mux はRTPとRTCPを多重化する

43

m=audio 59540 RTP/SAVPF 109 9 0 8c=IN IP4 123.123.123.123a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ hosta=sendrecva=end-of-candidatesa=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-levela=ice-pwd:55104ba020a9bb780a06b8a8db085a6ea=ice-ufrag:24b20be8a=mid:sdparta_0

a=rtcp-muxa=rtpmap:109 opus/48000/2a=rtpmap:9 G722/8000/1a=rtpmap:0 PCMU/8000a=rtpmap:8 PCMA/8000a=setup:actpassa=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8}

RTPとRTCPを多重化、詳細はRFC5761。(本来は別々のPortだが、UDPホールパンチ等

のコストを減らせる)

Page 44: SDP for WebRTC - From Basics to Maniacs -

a=setup:actpass でDTLSを使う

44

m=audio 59540 RTP/SAVPF 109 9 0 8c=IN IP4 123.123.123.123a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ hosta=sendrecva=end-of-candidatesa=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-levela=ice-pwd:55104ba020a9bb780a06b8a8db085a6ea=ice-ufrag:24b20be8a=mid:sdparta_0a=rtcp-muxa=rtpmap:109 opus/48000/2a=rtpmap:9 G722/8000/1a=rtpmap:0 PCMU/8000a=rtpmap:8 PCMA/8000

a=setup:actpassa=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8}

DTLSを使いはじめようという意味RFC5763参照

Page 45: SDP for WebRTC - From Basics to Maniacs -

a=ssrcはRTPで利用する参加者の識別子のこと

45

m=audio 59540 RTP/SAVPF 109 9 0 8c=IN IP4 123.123.123.123a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ hosta=sendrecva=end-of-candidatesa=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-levela=ice-pwd:55104ba020a9bb780a06b8a8db085a6ea=ice-ufrag:24b20be8a=mid:sdparta_0a=rtcp-muxa=rtpmap:109 opus/48000/2a=rtpmap:9 G722/8000/1a=rtpmap:0 PCMU/8000a=rtpmap:8 PCMA/8000a=setup:actpassa=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8}

SSRCはランダムに割り振られ変わるCNAMEはランダムに変わってもわかる

ように紐付けする名前

Page 46: SDP for WebRTC - From Basics to Maniacs -

Videoは略(RFC読もう)

46

m=audio 59540 RTP/SAVPF 109 9 0 8c=IN IP4 123.123.123.123a=candidate:0 1 UDP 2130379007 192.168.1.8 59540 typ hosta=sendrecva=end-of-candidatesa=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-levela=ice-pwd:55104ba020a9bb780a06b8a8db085a6ea=ice-ufrag:24b20be8a=mid:sdparta_0a=rtcp-muxa=rtpmap:109 opus/48000/2a=rtpmap:9 G722/8000/1a=rtpmap:0 PCMU/8000a=rtpmap:8 PCMA/8000a=setup:actpassa=ssrc:2602856860 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8}

m=video 53336 RTP/SAVPF 120 126 97c=IN IP4 123.123.123.123a=candidate:0 1 UDP 2130379007 192.168.1.8 53336 typ hosta=sendrecva=end-of-candidatesa=fmtp:120 max-fs=12288;max-fr=60a=fmtp:126 profile-level-id=42e01f;level-asymmetry-allowed=1;packetization-mode=1a=fmtp:97 profile-level-id=42e01f;level-asymmetry-allowed=1a=ice-pwd:55104ba020a9bb780a06b8a8db085a6ea=ice-ufrag:24b20be8a=mid:sdparta_1a=rtcp-muxa=rtpmap:120 VP8/90000a=rtpmap:126 H264/90000a=rtpmap:97 H264/90000a=setup:actpassa=ssrc:2337298562 cname:{4518e50c-1e53-9640-88cb-56d3189fb9b8}

メディア記述部[1]

メディア記述部[2]説明略!

Page 47: SDP for WebRTC - From Basics to Maniacs -

ということで

47

Page 48: SDP for WebRTC - From Basics to Maniacs -

48

こう見えていたのが

Page 49: SDP for WebRTC - From Basics to Maniacs -

v=0o=- 7919192553830045546 2 IN IP4 127.0.0.1s=-t=0 0a=group:BUNDLE videoa=msid-semantic: WMS IJaEuKH4cYDg9YxONEt16knZtoFuZZ4ioQRqm=video 51986 RTP/SAVPF 100 116 117 96c=IN IP4 192.168.123.1a=rtcp:51986 IN IP4 192.168.123.1a=candidate:964645231 1 udp 2122260223 192.168.123.1 51986 typ host generation 0a=candidate:964645231 2 udp 2122260223 192.168.123.1 51986 typ host generation 0a=candidate:678703848 1 udp 2122194687 192.168.100.1 49989 typ host generation 0a=candidate:678703848 2 udp 2122194687 192.168.100.1 49989 typ host generation 0a=candidate:2178013618 1 udp 2122129151 192.168.33.1 55585 typ host generation 0a=candidate:2178013618 2 udp 2122129151 192.168.33.1 55585 typ host generation 0a=candidate:4278134664 1 udp 2122063615 192.168.1.8 50973 typ host generation 0a=candidate:4278134664 2 udp 2122063615 192.168.1.8 50973 typ host generation 0a=candidate:2013048223 1 tcp 1518280447 192.168.123.1 0 typ host tcptype active generation 0a=candidate:2013048223 2 tcp 1518280447 192.168.123.1 0 typ host tcptype active generation 0a=candidate:1727516184 1 tcp 1518214911 192.168.100.1 0 typ host tcptype active generation 0a=candidate:1727516184 2 tcp 1518214911 192.168.100.1 0 typ host tcptype active generation 0a=candidate:3478267202 1 tcp 1518149375 192.168.33.1 0 typ host tcptype active generation 0a=candidate:3478267202 2 tcp 1518149375 192.168.33.1 0 typ host tcptype active generation 0a=candidate:2960972664 1 tcp 1518083839 192.168.1.8 0 typ host tcptype active generation 0a=candidate:2960972664 2 tcp 1518083839 192.168.1.8 0 typ host tcptype active generation 0a=ice-ufrag:oaw7CiwPrr8SugF+a=ice-pwd:6Wvv5xxI8Es575wFb5Houqlga=ice-options:google-icea=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:30a=setup:actpassa=mid:videoa=extmap:2 urn:ietf:params:rtp-hdrext:toffseta=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-timea=sendrecva=rtcp-muxa=rtpmap:100 VP8/90000a=rtpmap:116 red/90000a=rtpmap:117 ulpfec/90000a=rtpmap:96 rtx/90000a=fmtp:96 apt=100 49

こうなったはず!

Page 50: SDP for WebRTC - From Basics to Maniacs -

おしまい!

50

NTTコミュニケーションズの新卒採用(WebRTCに限らず)に興味がある方がいれば

@iwashi86までご連絡ください!

ちょっと宣伝