WebRTC大多数时候将Safari与Chrome连接起来不起作用

苹果公司从桌面上的iOS 11和Safari 11开始支持WebRTC。

我是新的WebRTC。 作为一个基础,我使用的是两个浏览器之间的基本video聊天应用程序的谷歌codelab的代码。 为了testing,我在同一个WiFinetworking中使用了两个设备,只是为了确保。

在这种情况下,它可以很好地工作(请参阅规格设备):

  • 桌面/ Chrome < – > Android / Tab / Chrome
  • 桌面/ Chrome < – > iPad / Safari
  • 桌面/ Safari < – > iPad / Safari
  • 桌面/ Safari < – > iPhone / Safari
  • iPad / Safari < – > iPhone / Safari

不是在这些情况下工作:

  • 桌面/ Safari < – > Android / Tab / Chrome
  • 桌面/ Chrome < – > iPhone / Safari
  • Android / Tab / Chrome < – > iPad / Safari
  • Android / Tab / Chrome < – > iPhone / Safari

设备的规格:

桌面/镀铬
– Macbook MacOS 10.12.6
– Chrome 62.0.3202.89

桌面/ Safari浏览器
– Macbook MacOS 10.12.6
– Safari 11.0.1

安卓/标签/镀铬
– 三星Galaxy Tab3 8.0英寸(SM-T310)
– Android 4.4.2
– Chrome 61.0.3163.98

iPhone / Safari浏览器
– iPhone 6(A1586)iOS 11.1.2
– 苹果浏览器

iPad的/ Safari浏览器
– iPad mini 2(A1489)iOS 11.1.2
– 苹果浏览器

大多数情况下,Safari浏览器 – Chrome浏览器工作,但有一个例外:Desktop / Chrome < – > iPad / Safari(足够奇怪)

1)Android / Tab / Chrome < – > iPad / Safari

Android/Tab/Chrome发送offer ,然后iPad/Safari收到offer ,但出现错误:

 Unhandled Promise Rejection: OperationError (DOM Exception 34): Failed to set remote offer sdp: Session error code: ERROR_CONTENT. Session error description: Failed to set remote video description send parameters.. 

sdp offer

 v=0 o=- 7644883235956031763 2 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLE audio video a=msid-semantic: WMS Yiel2ebiIcKBPDaLuAqKaFpR93Mbz1tSsNRm m=audio 9 UDP/TLS/RTP/SAVPF 111 103 9 0 8 105 13 110 113 126 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:mXxq a=ice-pwd:T4vRjmDaHYES+J3WJ8NAx65S a=ice-options:trickle a=fingerprint:sha-256 B1:36:E3:06:6E:6F:73:59:96:BB:74:95:79:20:64:F6:45:AD:99:1A:43:78:AD:CA:CA:7A:D9:23:2C:D8:C5:07 a=setup:actpass a=mid:audio a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level a=sendrecv a=rtcp-mux a=rtpmap:111 opus/48000/2 a=rtcp-fb:111 transport-cc a=fmtp:111 minptime=10;useinbandfec=1 a=rtpmap:103 ISAC/16000 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:110 telephone-event/48000 a=rtpmap:113 telephone-event/16000 a=rtpmap:126 telephone-event/8000 a=ssrc:1841783350 cname:RdL9LRY2OCXO8jbB a=ssrc:1841783350 msid:Yiel2ebiIcKBPDaLuAqKaFpR93Mbz1tSsNRm e1a0f1a7-66bf-4921-9677-30e5e838ad02 a=ssrc:1841783350 mslabel:Yiel2ebiIcKBPDaLuAqKaFpR93Mbz1tSsNRm a=ssrc:1841783350 label:e1a0f1a7-66bf-4921-9677-30e5e838ad02 m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 c=IN IP4 0.0.0.0 a=rtcp:9 IN IP4 0.0.0.0 a=ice-ufrag:mXxq a=ice-pwd:T4vRjmDaHYES+J3WJ8NAx65S a=ice-options:trickle a=fingerprint:sha-256 B1:36:E3:06:6E:6F:73:59:96:BB:74:95:79:20:64:F6:45:AD:99:1A:43:78:AD:CA:CA:7A:D9:23:2C:D8:C5:07 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=extmap:4 urn:3gpp:video-orientation a=extmap:5 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01 a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/video-timing a=sendrecv a=rtcp-mux a=rtcp-rsize a=rtpmap:96 VP8/90000 a=rtcp-fb:96 ccm fir a=rtcp-fb:96 nack a=rtcp-fb:96 nack pli a=rtcp-fb:96 goog-remb a=rtcp-fb:96 transport-cc a=rtpmap:97 rtx/90000 a=fmtp:97 apt=96 a=rtpmap:98 VP9/90000 a=rtcp-fb:98 ccm fir a=rtcp-fb:98 nack a=rtcp-fb:98 nack pli a=rtcp-fb:98 goog-remb a=rtcp-fb:98 transport-cc a=rtpmap:99 rtx/90000 a=fmtp:99 apt=98 a=rtpmap:100 red/90000 a=rtpmap:101 rtx/90000 a=fmtp:101 apt=100 a=rtpmap:102 ulpfec/90000 a=ssrc-group:FID 659734980 914875391 a=ssrc:659734980 cname:RdL9LRY2OCXO8jbB a=ssrc:659734980 msid:Yiel2ebiIcKBPDaLuAqKaFpR93Mbz1tSsNRm 53ce1350-e2ef-426e-9023-e91e4ea08dc6 a=ssrc:659734980 mslabel:Yiel2ebiIcKBPDaLuAqKaFpR93Mbz1tSsNRm a=ssrc:659734980 label:53ce1350-e2ef-426e-9023-e91e4ea08dc6 a=ssrc:914875391 cname:RdL9LRY2OCXO8jbB a=ssrc:914875391 msid:Yiel2ebiIcKBPDaLuAqKaFpR93Mbz1tSsNRm 53ce1350-e2ef-426e-9023-e91e4ea08dc6 a=ssrc:914875391 mslabel:Yiel2ebiIcKBPDaLuAqKaFpR93Mbz1tSsNRm a=ssrc:914875391 label:53ce1350-e2ef-426e-9023-e91e4ea08dc6 

如果iPad/Safari首先发送报价,则在Android/Tab/Chrome上出现相同的错误消息。

2)情况相同的错误

桌面/ Safari < – > Android / Tab / Chrome
Android / Tab / Chrome < – > iPhone / Safari

 Uncaught (in promise) DOMException: Failed to set remote offer sdp: Session error code: ERROR_CONTENT. Session error description: Failed to set remote video description send parameters.. 

3)桌面/ Chrome < – > iPhone / Safari

当我在iPhone/Safari上启动WebRTC会话时, Desktop/Chrome会收到offer ,然后发送answer 。 候选人被接收和发送。 然后在Desktop/Chrome上添加远程stream。 iPhone/Safari获取Desktop/Chrome一帧video然后冻结一切,而iPhone/Safari仍然在Desktop/Chrome上接收video和audio。 iPhone按几次后,iPhone停止发送stream。 iPhone仍然完全阻塞,需要重新设置之前再次工作。

后者似乎是一个报告错误https://bugs.webkit.org/show_bug.cgi?id=175014或https://bugs.webkit.org/show_bug.cgi?id=176439

但在其他情况下,我在网上找不到任何关于它的事情。

不工作3例:

  • 桌面/ Safari < – > Android / Tab / Chrome
  • Android / Tab / Chrome < – > iPad / Safari
  • Android / Tab / Chrome < – > iPhone / Safari

这是Android设备的一个已知问题,向WebRTC错误跟踪器报告: https ://bugs.chromium.org/p/webrtc/issues/detail?id = 8584

不工作的最后一种情况:

  • 桌面/ Chrome < – > iPhone / Safari

已报告的错误: https : //bugs.webkit.org/show_bug.cgi?id = 175014
https://bugs.webkit.org/show_bug.cgi?id=176439

有几个问题:

  • iOS仅支持H264(configuration文件42e01f)
  • 您的报价只包含VP8和VP9video编解码器,Safari可以解码,但不会编码(指责政治)
  • Android设备似乎支持H264,但configuration文件42001f …因此configuration文件不匹配

结果是,你可能需要做一些SDP-munging,以使H264在你所有的设备上运行。