WebRTC无法将Safari与Chrome for Android连接 . 从Chrome桌面到Safari,没有任何问题 . Safari - Safari也没有问题 .
自iOS 11和桌面上的Safari 11以来,Apple本身就支持WebRTC .
作为基础,我使用google codelab的代码,我在两个浏览器之间有一个基本的视频聊天应用程序 . 为了测试我在同一个WiFi网络中使用了两个设备,只是为了确保 .
在这些情况下它可以工作 WELL (参见规范设备):
-
桌面/ Chrome < - >桌面Safari
-
桌面/ Chrome < - > Android / Tab / Chrome
-
桌面/ Chrome < - > iPad / Safari
-
桌面/ Chrome < - > iPhone / Safari
-
桌面/ Safari < - > iPad / Safari
-
桌面/ Safari < - > iPhone / Safari
-
iPad / Safari < - > iPhone / Safari
在这些情况下工作是 NOT :
-
Android / Tab / Chrome < - > iPad / Safari
-
Android / Tab / Chrome < - > iPhone / Safari
-
Android / Tab / Chrome < - >桌面/ Safari
设备规格:
桌面/镀铬
- Macbook MacOS 10.12.6
- Chrome 63.0.3239.132
桌面/ Safari浏览器
- Macbook MacOS 10.12.6
- Safari 11.0.2
安卓/标签/镀铬
- 三星Galaxy Tab3 8.0英寸(SM-T310)
- Android 4.4.2
- Chrome 63.0.3239.111
iPad的/ Safari浏览器
- iPad mini 2(A1489)
- iOS 11.2.2
- 苹果浏览器
iPhone / Safari浏览器
- iPhone 6(A1586)
- iOS 11.2.2
- 苹果浏览器
1)Android / Tab / Chrome < - > iPad / Safari
Android/Tab/Chrome
发送 offer
,然后 iPad/Safari
收到它,但随后发出错误:
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)同样的错误
Android / Tab / Chrome < - > iPhone / Safari
Android / Tab / Chrome < - >桌面/ 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..
更新:
从iOS 11.1.2升级到iOS 11.2.2后,桌面/ Chrome < - > iPhone / Safari的另一个问题就解决了 . 所以现在这个工作正常 .
2 回答
Android和iOS / Safari上的Chrome之间的WebRTC连接有两个不同的问题:
1)设备上没有H.264实现
Chrome for Android只有H.264的硬件实现,没有软件实现 . 目前,H.264仅适用于配备Qualcomm(Kitkat及更高版本)或Samsung Exynos(Lollipop及更高版本)处理器的设备 . 由于Apple仅支持H.264,因此其他Android设备无法与iOS和Safari连接 .
2)Chrome for Android存在错误:
Chrome Android does not offer/answer H.264 Constrained Baseline Profile
由于Apple仅支持H.264,因此此时Android / Chrome无法与iOS连接 .
这个问题将在Chrome Android 65(现在的Canary)中得到解决 . 有关详细信息,请参阅this .
在我的情况下,问题是错误,但我认为人们应该意识到这两个问题 .
有几个问题:
iOS仅支持H264(配置文件42e01f)
您的优惠仅包含VP8和VP9视频编解码器,Safari可以解码但不会编码(责怪政治)
安卓设备似乎支持H264,但配置文件42001f ...因此配置文件不匹配
结果是您可能需要进行一些SDP-munging才能在所有设备上运行H264 .