Microsoft EdgeのWebRTC対応について調査した

  • 9
    いいね
  • 1
    コメント

はじめに

この資料は、WebRTC Meetup Tokyo #14の発表資料です。


自己紹介

  • なかゆうすけ(@yusuke84
  • WebRTC Platform SkyWay 中の人
    • Enginner
      • Developer Relations
      • Technical Solutions Engineer
  • WebRTC Meetup Tokyo 主催者の一人

前回のMeetupでEdgeの話がありました

スクリーンショット 2017-03-23 11.56.38.png

  • MSのエバンジェリストさんがEdgeがWebRTC対応しているよ的な話をしてましたね

Appear.inも動きます

appearin.png


時雨堂さんも対応した模様

スクリーンショット 2017-03-23 12.02.35.png


この資料の目的

  • 実際にEdgeがどの程度、WebRTCの機能をサポートしているのか、もっと掘り下げて解説します。
  • WebRTCを使ったWebサービスを開発されている方が、これからEdge対応する際の参考になれば良いなと考えています。

Edgeのサポート状況

機能の開発状況

機能分類 項目 対応状況(build 15019) 開発優先度 備考
Stream & Port handling Multiple Streams & Unified Plan WebRTC1.0は未対応
ORTCは対応済み
ORTCは1つのDTLSトランスポートに複数のストリームを載せることが可能
Multiplexing 対応済み Audio/Videoのmultiplexing、RTP/RTCPのmultiplexingに対応
Data Channels 未対応
Edge Platform status - 検討中
優先度低
Media Recorder 未対応
Edge Platform status - 検討中
優先度低 ハードウェアサポートが有るH.264を想定
Security & Encryption No HTTPS requirement HTTP/HTTPS両方で動作する 今後、利用状況をモニタリングしHTTPSオンリーに変更する可能性がある。
“IP Leakage” prevention 対応済み
ローカルIPアドレスの候補を収集しないようにするオプションを about:flags で提供
エンタープライズ用途ではグループポリシーを使って一括設定可能。
Screen sharing security 未サポート
Edge Platform status - 検討中
優先度中 理想としては、Windowsプラットフォームの権限設定機能と連携し、拡張機能は使わずにユーザが機能を有効化出来るようにしたい。EdgeはディフォルトONにしたい。
ECDSA Support DTLS1.2とECDSA(楕円曲線暗号スイート)はWin10アニバーサリーサポートで対応済み。
Certificate Management API は実装していないため、証明書は作れない。
ディフォルトはRSA証明書を生成する。
DTLS1.0とRSAしかもってないデバイスへの後方互換対応については検討中
Device Fingerprinting 未対応 永続的なuser Permissionはサポートしていない。
ユーザが許可を与えない限りキャプチャデバイスのリストに表示されることはない。
セッションとしてdeviceidは保持しない。
Codec & Video Support ORTC & 1.0 Parity H.264/AVC,VP8はWebRTC1.0とORTC API両方で利用可能
G.264/UC,SILK、extended telemetryはORTCのみ利用可能
Audio Opus 対応済み Opus Audio Playbackは現在開発中。
FEC(パケットエラー補正) 未対応 Opus internal FECは未対応だが、CN(Comfort Noise)、VADはOpusで対応している
RED(冗長化) 対応済み Opusで利用できるが、相互運用性はテストしていない
RTX(再送) 対応済み
G.729 未対応 G.711,G.722,Opus,SILK,DTMF,CNには対応している
Video H.264/AVC 対応済み WebRTC1.0とORTC両方で利用可能

サポート仕様
- packetization-mode=1(RFC7742)
- Constrained Baseline Profile with Level up to 4.2
- Google REMB,Absolute send time header extension
- Picture Loss Indication(PLI)
- Generic NAC(RFC4585)
- Retransmission(RTP再送)(RFC4588)
VP8 対応済み ディフォルトONでWebRTC1.0とORTC両方で利用可能
VP9 未対応 VP9の動画再生は可能だが、RTC用のコーデックとしては利用できない。
SVC & Simulcast Edge ORTCではH.264/UCにてSVC&Simulcastによるencodingとdecodingに対応
H.264/AVCとVP8におけるSVC&Simulcastは未対応
現在対応項目として含まれていない。ただし、VP8はTemporal Scalabilityのデコードが利用可能。エンコードとしては対応予定はなし。
RTX, FEC, ULPFEC, RED RTX(再送)は対応済み(WebRTC1.0、ORTC両方で利用可)
RED+ULPFECは検討中
flexible FECは未対応
RED+ULPFECは優先度中
PLI,NACK,REMB 全て対応済み
Video Interop H.264/AVC、VP8のビデオコーデックサポートに加えて、PLI、NACK FBメッセージ (RTP/SAVPF)、輻輳制御(REMB)、RTX(再送)に対応済み(全てWebRTC1.0とORTCで利用可)
ICE&TURN Trickle-ICE Support 未対応 優先度中 だが、15019で既に利用できる。詳しくは後述
TURN Variations TURN(RFC5766),TURN IPv6(RFC6156),ICE-TCP(RFC6544)に対応済み
Allocation of TCP candidates(RFC 6062)は未対応
TURN over TCP/TLSは検討中
TURN over TCP/TLSは優先度中
その他 Stats API msStats APIにてORTCの情報を取得できる。

実際に検証してみました

  • 前提:build 150019で検証しています。最新は15063なので細かな仕様変更があるかもしれません。(リリースノートレベルでは何もありませんでしたが)

 Edgeの癖

  • RTCPeerConnectionの iceServers にSTUNサーバを指定するとエラーになる。(これはORTCでもそうで、STUNサーバは受け付けない)
  • TURNサーバを用意する必要あり
{"iceServers":[ {"urls":"turn:turn.skyway.io:443?transport=udp","username":"xxxxx","credential":"xxxxx"} ]};

Trickle ICEが既に動作する

  • 対応していないということだったが、 pc.onicecandidate , pc.addIceCandidate 共に動作し利用できる

念のためにMultiStreamの動作も確認した

  • Audio/Videoをトラック追加して、Audio2トラック、Video2トラックの4トラック状態でOffer SDPを生成したが動作せず
  • addTrack,getVideoTracks,getAudioTracksについては動作した

(参考)Edgeが生成するSDP

Trickle ICE版

v=0
o=- 5490060217672355606 0 IN IP4 127.0.0.1
s=-
t=0 0
a=msid-semantic: WMS DB9D0BF6-C88F-44FD-8691-AF34A4272844
a=group:BUNDLE audio video
m=audio 9 UDP/TLS/RTP/SAVPF 111 9 0 8 105 13 126
c=IN IP4 0.0.0.0
a=rtpmap:111 opus/48000/2
a=rtpmap:9 G722/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:105 CN/16000
a=rtpmap:13 CN/8000
a=rtpmap:126 telephone-event/8000
a=rtcp:9 IN IP4 0.0.0.0
a=setup:active
a=mid:audio
a=maxptime:60
a=sendrecv
a=ice-ufrag:8n1F
a=ice-pwd:oiLbCg1ci90zxzy4adrseWtn
a=fingerprint:sha-256 C4:5B:6A:6C:F5:6C:00:13:D2:C3:B2:95:31:1A:6F:23:80:17:DB:F4:13:35:C6:35:2D:57:90:C8:BF:9D:7A:92
a=ssrc:583533957 cname:DB9D0BF6-C88F-44FD-8691-AF34A4272844
a=ssrc:583533957 msid:DB9D0BF6-C88F-44FD-8691-AF34A4272844 CE6A7804-0653-4BD6-9DE8-874568D3D986
a=ssrc:583533957 mslabel:DB9D0BF6-C88F-44FD-8691-AF34A4272844
a=ssrc:583533957 label:CE6A7804-0653-4BD6-9DE8-874568D3D986
a=rtcp-mux
m=video 9 UDP/TLS/RTP/SAVPF 100 107 96 99
c=IN IP4 0.0.0.0
a=rtpmap:100 VP8/90000
a=rtpmap:107 H264/90000
a=rtpmap:96 rtx/90000
a=rtpmap:99 rtx/90000
a=fmtp:100 packetization-mode=1;mst-mode=NI-TC
a=fmtp:107 packetization-mode=1;level-asymmetry-allowed=1;profile-level-id=42c02a
a=fmtp:96 apt=100
a=fmtp:99 apt=107
a=rtcp:9 IN IP4 0.0.0.0
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=rtcp-fb:100 goog-remb
a=rtcp-fb:107 nack
a=rtcp-fb:107 nack pli
a=rtcp-fb:107 goog-remb
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=setup:active
a=mid:video
a=sendrecv
a=ice-ufrag:8n1F
a=ice-pwd:oiLbCg1ci90zxzy4adrseWtn
a=fingerprint:sha-256 C4:5B:6A:6C:F5:6C:00:13:D2:C3:B2:95:31:1A:6F:23:80:17:DB:F4:13:35:C6:35:2D:57:90:C8:BF:9D:7A:92
a=ssrc:583534057 cname:DB9D0BF6-C88F-44FD-8691-AF34A4272844
a=ssrc:583534057 msid:DB9D0BF6-C88F-44FD-8691-AF34A4272844 6D9E69A8-C1E6-4C56-A966-C1769B2FAA99
a=ssrc:583534057 mslabel:DB9D0BF6-C88F-44FD-8691-AF34A4272844
a=ssrc:583534057 label:6D9E69A8-C1E6-4C56-A966-C1769B2FAA99
a=ssrc:583534058 cname:DB9D0BF6-C88F-44FD-8691-AF34A4272844
a=ssrc:583534058 msid:DB9D0BF6-C88F-44FD-8691-AF34A4272844 6D9E69A8-C1E6-4C56-A966-C1769B2FAA99
a=ssrc:583534058 mslabel:DB9D0BF6-C88F-44FD-8691-AF34A4272844
a=ssrc:583534058 label:6D9E69A8-C1E6-4C56-A966-C1769B2FAA99
a=ssrc-group:FID 583534057 583534058
a=rtcp-mux
a=rtcp-rsize

Candidate(抜粋)

"candidate:3 1 udp 33553407 xxxx:x:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx 33066 typ host", sdpMid: "audio", sdpMLineIndex: 0
"candidate:5 1 tcp 1684797439 xxx.xxx.xxx.xxx 3526 typ…rflx raddr xxx.xxx.xxx.xxx rport 3526 tcptype active", sdpMid: "audio", sdpMLineIndex: 0

Vanilla ICEの場合

v=0
o=- 4876039618903095554 0 IN IP4 127.0.0.1
s=-
t=0 0
a=msid-semantic: WMS AB888BBA-94C5-4F5C-A2D8-440F191274AB
a=group:BUNDLE audio video
m=audio 4288 UDP/TLS/RTP/SAVPF 102 9 0 8 97 13 118 101
c=IN IP4 172.16.0.217
a=rtpmap:102 opus/48000/2
a=rtpmap:9 G722/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:97 RED/8000
a=rtpmap:13 CN/8000
a=rtpmap:118 CN/16000
a=rtpmap:101 telephone-event/8000
a=rtcp:9 IN IP4 0.0.0.0
a=extmap:1 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=setup:actpass
a=mid:audio
a=maxptime:60
a=sendrecv
a=ice-ufrag:HToE
a=ice-pwd:PeuHvesQZxyiGU6Fy9aEV+K5
a=fingerprint:sha-256 BC:E5:83:A5:0F:40:06:C4:54:9F:51:0F:BD:43:EE:29:65:82:BD:96:49:62:DB:F9:7A:CF:34:76:76:AA:73:A2
a=candidate:1 1 udp 2130706431 xxx.xxx.xxx.xxx 4288 typ host
a=candidate:2 1 udp 2130705919 xxxx:x:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx 9752 typ host
a=candidate:3 1 udp 33553407 xxxx:x:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx 28872 typ host
a=candidate:5 1 tcp 1684797439 xxx.xxx.xxx.xxx 4288 typ srflx raddr xxx.xxx.xxx.xxx rport 4288 tcptype active
a=ssrc:2576747288 cname:AB888BBA-94C5-4F5C-A2D8-440F191274AB
a=ssrc:2576747288 msid:AB888BBA-94C5-4F5C-A2D8-440F191274AB 3B8CF0F5-F428-4CD4-89A0-4A86E95303BB
a=ssrc:2576747288 mslabel:AB888BBA-94C5-4F5C-A2D8-440F191274AB
a=ssrc:2576747288 label:3B8CF0F5-F428-4CD4-89A0-4A86E95303BB
a=rtcp-mux
a=rtcp-rsize
m=video 9 UDP/TLS/RTP/SAVPF 99 107 96 100
c=IN IP4 0.0.0.0
a=rtpmap:99 rtx/90000
a=rtpmap:107 H264/90000
a=rtpmap:96 rtx/90000
a=rtpmap:100 VP8/90000
a=fmtp:99 apt=107;rtx-time=3000
a=fmtp:107 packetization-mode=1;level-asymmetry-allowed=1;profile-level-id=42c02a
a=fmtp:96 apt=100;rtx-time=3000
a=fmtp:100 packetization-mode=1;mst-mode=NI-TC
a=rtcp:9 IN IP4 0.0.0.0
a=rtcp-fb:107 nack
a=rtcp-fb:107 nack pli
a=rtcp-fb:107 goog-remb
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=rtcp-fb:100 goog-remb
a=extmap:1 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=setup:actpass
a=mid:video
a=sendrecv
a=ice-ufrag:HToE
a=ice-pwd:PeuHvesQZxyiGU6Fy9aEV+K5
a=fingerprint:sha-256 BC:E5:83:A5:0F:40:06:C4:54:9F:51:0F:BD:43:EE:29:65:82:BD:96:49:62:DB:F9:7A:CF:34:76:76:AA:73:A2
a=ssrc:2576747388 cname:AB888BBA-94C5-4F5C-A2D8-440F191274AB
a=ssrc:2576747388 msid:AB888BBA-94C5-4F5C-A2D8-440F191274AB C98E3E0B-1744-4BA1-AE44-CFC9939B81C2
a=ssrc:2576747388 mslabel:AB888BBA-94C5-4F5C-A2D8-440F191274AB
a=ssrc:2576747388 label:C98E3E0B-1744-4BA1-AE44-CFC9939B81C2
a=ssrc:2576747389 cname:AB888BBA-94C5-4F5C-A2D8-440F191274AB
a=ssrc:2576747389 msid:AB888BBA-94C5-4F5C-A2D8-440F191274AB C98E3E0B-1744-4BA1-AE44-CFC9939B81C2
a=ssrc:2576747389 mslabel:AB888BBA-94C5-4F5C-A2D8-440F191274AB
a=ssrc:2576747389 label:C98E3E0B-1744-4BA1-AE44-CFC9939B81C2
a=ssrc-group:FID 2576747388 2576747389
a=rtcp-mux
a=rtcp-rsize

MultiStream

Edgeの場合

  • Audio/Videoをトラック追加して、Audio2トラック、Video2トラックの4トラック状態でOffer SDPを生成したが動作せず
    • addTrack,getVideoTracks,getAudioTracksについては動作した
v=0
o=- 7109637118066294576 0 IN IP4 127.0.0.1
s=-
t=0 0
a=msid-semantic: WMS BFC9ADA1-3022-414B-9117-9E18D36B789C
a=group:BUNDLE audio video
m=audio 9 UDP/TLS/RTP/SAVPF 102 9 0 8 97 13 118 101
c=IN IP4 0.0.0.0
a=rtpmap:102 opus/48000/2
a=rtpmap:9 G722/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:97 RED/8000
a=rtpmap:13 CN/8000
a=rtpmap:118 CN/16000
a=rtpmap:101 telephone-event/8000
a=rtcp:9 IN IP4 0.0.0.0
a=extmap:1 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=setup:actpass
a=mid:audio
a=maxptime:60
a=sendrecv
a=ice-ufrag:sNJi
a=ice-pwd:mpjiVtdsVOrdwJ/nM8vgPUnW
a=fingerprint:sha-256 B2:CE:14:D1:5C:2E:46:FC:41:84:BA:EB:05:77:7F:36:C6:21:1A:EA:1F:58:CA:1C:C6:5C:E9:E2:7A:1E:30:11
a=ssrc:1124057924 cname:BFC9ADA1-3022-414B-9117-9E18D36B789C
a=ssrc:1124057924 msid:BFC9ADA1-3022-414B-9117-9E18D36B789C 67D1C186-26E0-40C1-BB1F-DDE610F46267
a=ssrc:1124057924 mslabel:BFC9ADA1-3022-414B-9117-9E18D36B789C
a=ssrc:1124057924 label:67D1C186-26E0-40C1-BB1F-DDE610F46267
a=rtcp-mux
a=rtcp-rsize
m=video 9 UDP/TLS/RTP/SAVPF 99 107 96 100
c=IN IP4 0.0.0.0
a=rtpmap:99 rtx/90000
a=rtpmap:107 H264/90000
a=rtpmap:96 rtx/90000
a=rtpmap:100 VP8/90000
a=fmtp:99 apt=107;rtx-time=3000
a=fmtp:107 packetization-mode=1;level-asymmetry-allowed=1;profile-level-id=42c02a
a=fmtp:96 apt=100;rtx-time=3000
a=fmtp:100 packetization-mode=1;mst-mode=NI-TC
a=rtcp:9 IN IP4 0.0.0.0
a=rtcp-fb:107 nack
a=rtcp-fb:107 nack pli
a=rtcp-fb:107 goog-remb
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=rtcp-fb:100 goog-remb
a=extmap:1 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=setup:actpass
a=mid:video
a=sendrecv
a=ice-ufrag:sNJi
a=ice-pwd:mpjiVtdsVOrdwJ/nM8vgPUnW
a=fingerprint:sha-256 B2:CE:14:D1:5C:2E:46:FC:41:84:BA:EB:05:77:7F:36:C6:21:1A:EA:1F:58:CA:1C:C6:5C:E9:E2:7A:1E:30:11
a=ssrc:1124058024 cname:BFC9ADA1-3022-414B-9117-9E18D36B789C
a=ssrc:1124058024 msid:BFC9ADA1-3022-414B-9117-9E18D36B789C CF73978B-E139-4BA3-B677-D980DE3DF2C9
a=ssrc:1124058024 mslabel:BFC9ADA1-3022-414B-9117-9E18D36B789C
a=ssrc:1124058024 label:CF73978B-E139-4BA3-B677-D980DE3DF2C9
a=ssrc:1124058025 cname:BFC9ADA1-3022-414B-9117-9E18D36B789C
a=ssrc:1124058025 msid:BFC9ADA1-3022-414B-9117-9E18D36B789C CF73978B-E139-4BA3-B677-D980DE3DF2C9
a=ssrc:1124058025 mslabel:BFC9ADA1-3022-414B-9117-9E18D36B789C
a=ssrc:1124058025 label:CF73978B-E139-4BA3-B677-D980DE3DF2C9
a=ssrc-group:FID 1124058024 1124058025
a=rtcp-mux
a=rtcp-rsize

(参考)Chromeの場合

v=0
o=- 729419066758698405 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE audio video
a=msid-semantic: WMS f2Z7xcj2ZY4Fxk8mQuns669llPCLGvK8tBHA
m=audio 50260 UDP/TLS/RTP/SAVPF 102 9 0 8 13 118 101
c=IN IP4 172.16.0.156
a=rtcp:9 IN IP4 0.0.0.0
a=candidate:3507182495 1 udp 2122262783 xxxx:x:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx 63030 typ host generation 0 network-id 2 network-cost 10
a=candidate:1032279807 1 udp 2122194687 xxx.xxx.xxx.xxx 50260 typ host generation 0 network-id 1 network-cost 10
a=ice-ufrag:tcca
a=ice-pwd:pVKIgrT1Fl1MGQiGlzu4gZ7a
a=fingerprint:sha-256 89:F3:B9:EF:8E:A4:08:16:B7:34:31:FE:95:A7:65:FB:E5:F0:C9:08:9E:7A:07:9A:E0:0F:20:0D:E7:90:D7:F9
a=setup:active
a=mid:audio
a=sendrecv
a=rtcp-mux
a=rtpmap:102 opus/48000/2
a=fmtp:102 minptime=10;useinbandfec=1
a=rtpmap:9 G722/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:13 CN/8000
a=rtpmap:118 CN/16000
a=rtpmap:101 telephone-event/8000
a=ssrc:852272730 cname:Y7zMVlJNh+cbosnY
a=ssrc:852272730 msid:f2Z7xcj2ZY4Fxk8mQuns669llPCLGvK8tBHA ff097ff4-117e-46b5-a665-3576a5558efb
a=ssrc:852272730 mslabel:f2Z7xcj2ZY4Fxk8mQuns669llPCLGvK8tBHA
a=ssrc:852272730 label:ff097ff4-117e-46b5-a665-3576a5558efb
a=ssrc:2727587040 cname:Y7zMVlJNh+cbosnY
a=ssrc:2727587040 msid:f2Z7xcj2ZY4Fxk8mQuns669llPCLGvK8tBHA ccf609b2-c8fd-4a2a-aaec-7469e505aa93
a=ssrc:2727587040 mslabel:f2Z7xcj2ZY4Fxk8mQuns669llPCLGvK8tBHA
a=ssrc:2727587040 label:ccf609b2-c8fd-4a2a-aaec-7469e505aa93
m=video 9 UDP/TLS/RTP/SAVPF 99 107 96 100
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:tcca
a=ice-pwd:pVKIgrT1Fl1MGQiGlzu4gZ7a
a=fingerprint:sha-256 89:F3:B9:EF:8E:A4:08:16:B7:34:31:FE:95:A7:65:FB:E5:F0:C9:08:9E:7A:07:9A:E0:0F:20:0D:E7:90:D7:F9
a=setup:active
a=mid:video
a=extmap:1 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=sendrecv
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:99 rtx/90000
a=fmtp:99 apt=107
a=rtpmap:107 H264/90000
a=rtcp-fb:107 nack
a=rtcp-fb:107 nack pli
a=rtcp-fb:107 goog-remb
a=fmtp:107 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
a=rtpmap:96 rtx/90000
a=fmtp:96 apt=100
a=rtpmap:100 VP8/90000
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=rtcp-fb:100 goog-remb
a=ssrc-group:FID 36461750 3444642770
a=ssrc:36461750 cname:Y7zMVlJNh+cbosnY
a=ssrc:36461750 msid:f2Z7xcj2ZY4Fxk8mQuns669llPCLGvK8tBHA 32c4b19c-f34f-456a-a909-cb392f48d544
a=ssrc:36461750 mslabel:f2Z7xcj2ZY4Fxk8mQuns669llPCLGvK8tBHA
a=ssrc:36461750 label:32c4b19c-f34f-456a-a909-cb392f48d544
a=ssrc:3444642770 cname:Y7zMVlJNh+cbosnY
a=ssrc:3444642770 msid:f2Z7xcj2ZY4Fxk8mQuns669llPCLGvK8tBHA 32c4b19c-f34f-456a-a909-cb392f48d544
a=ssrc:3444642770 mslabel:f2Z7xcj2ZY4Fxk8mQuns669llPCLGvK8tBHA
a=ssrc:3444642770 label:32c4b19c-f34f-456a-a909-cb392f48d544
a=ssrc-group:FID 4154513763 2493581106
a=ssrc:4154513763 cname:Y7zMVlJNh+cbosnY
a=ssrc:4154513763 msid:f2Z7xcj2ZY4Fxk8mQuns669llPCLGvK8tBHA d8091ebe-c80a-495d-85dc-34464418a2cf
a=ssrc:4154513763 mslabel:f2Z7xcj2ZY4Fxk8mQuns669llPCLGvK8tBHA
a=ssrc:4154513763 label:d8091ebe-c80a-495d-85dc-34464418a2cf
a=ssrc:2493581106 cname:Y7zMVlJNh+cbosnY
a=ssrc:2493581106 msid:f2Z7xcj2ZY4Fxk8mQuns669llPCLGvK8tBHA d8091ebe-c80a-495d-85dc-34464418a2cf
a=ssrc:2493581106 mslabel:f2Z7xcj2ZY4Fxk8mQuns669llPCLGvK8tBHA
a=ssrc:2493581106 label:d8091ebe-c80a-495d-85dc-34464418a2cf

Adapter.jsの利用について

  • aboba氏の資料によれば
    • そのまま使い続けることをおすすめしている
    • Adapter.jsを使ったテストも手動だけどMS内部でやっているようだ
    • マルチストリーム等の高度なユースケースにはまだ対応しないので、adapter.jsでカバーして欲しい
    • Edge RTPスタックへの実装が必要だがまだユースケースがWIPなので

デモ

  • 今回はSkyWayで公開しているskyway.jsで必要な改修を行うとP2PのMediaConnectionは利用可能
  • SkyWayとしての公式対応時期は未定

改修ポイント

STUNサーバの指定を削除

  • Before
    this.defaultConfig = {
      iceServers: [{
        urls: 'stun:stun.skyway.io:3478',
        url:  'stun:stun.skyway.io:3478'
      }],
      iceTransportPolicy: 'all'
    };
  • After
    this.defaultConfig = {
      iceTransportPolicy: 'all'
    };

TURNSにはまだ対応していないので削除

  • Before
var turnCombinations = [{ protocol: 'turn', transport: 'tcp' }, { protocol: 'turns', transport: 'tcp' }, { protocol: 'turn', transport: 'udp' }];
  • After
var turnCombinations = [{ protocol: 'turn', transport: 'tcp' }, { protocol: 'turn', transport: 'udp' }];

urlスキーマには対応していない

  • Before
              var iceServer = {
                urls: protocol + ':' + util.TURN_HOST + ':' + util.TURN_PORT + '?transport=' + transport,
                url: protocol + ':' + util.TURN_HOST + ':' + util.TURN_PORT + '?transport=' + transport,
  • After
              var iceServer = {
                urls: protocol + ':' + util.TURN_HOST + ':' + util.TURN_PORT + '?transport=' + transport,

3. 繋がった

skyway.jpeg


peer.jsは?

  • 上記ポイントを修正してもICE Transportの確立に失敗し動作しませんでした
  • Candidateの交換タイミングとかが原因かもしれません

我如古さんの手動シグナリングは?


終わりに

  • MSには複数のWebRTCプロジェクトがある
    • EdgeのWebRTC/ORTC対応
    • Skype for WebのWebRTC/ORTC対応
    • WebRTC for UWP

WebRTC for UWPが今後くるかもしれない


ご清聴ありがとうございました