【问题标题】:WebRTC is not working connecting Safari with Chrome for AndroidWebRTC 无法将 Safari 与 Android 版 Chrome 连接
【发布时间】:2018-05-07 19:37:48
【问题描述】:

WebRTC 无法将 Safari 与 Android 版 Chrome 连接起来。从桌面上的 Chrome 到 Safari 都没有问题。 Safari - Safari 也没有问题。

自 iOS 11 和桌面版 Safari 11 以来,Apple 原生支持 WebRTC。

作为基础,我使用了google codelab 的代码,其中我在两个浏览器之间有一个基本的视频聊天应用程序。为了确保测试,我在同一个 WiFi 网络中使用了这两个设备。

它在这些情况下很好工作(请参阅规格设备):

  • 桌面/Chrome 桌面Safari
  • 桌面/Chrome Android/Tab/Chrome
  • 桌面/Chrome iPad/Safari
  • 桌面/Chrome iPhone/Safari
  • 桌面/Safari iPad/Safari
  • 桌面/Safari iPhone/Safari
  • iPad/Safari iPhone/Safari

在这些情况下工作:

  • Android/Tab/Chrome iPad/Safari
  • Android/Tab/Chrome iPhone/Safari
  • Android/Tab/Chrome 桌面/Safari

设备规格:

桌面/Chrome
- Macbook MacOS 10.12.6
- 铬 63.0.3239.132

桌面/Safari
- Macbook MacOS 10.12.6
- Safari 11.0.2

Android/Tab/Chrome
- 三星 Galaxy Tab3 8.0 英寸 (SM-T310)
- 安卓 4.4.2
- 铬 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..

sdpoffer:

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 的另一个问题得到了解决。所以现在可以正常工作了。

阅读 thisthis 以获取原始错误报告。

【问题讨论】:

    标签: android ios google-chrome safari webrtc


    【解决方案1】:

    有几个问题:

    • iOS 仅支持 H264(配置文件 42e01f)
    • 您的报价仅包含 Safari 可以解码但不会编码的 VP8 和 VP9 视频编解码器(归咎于政治)
    • android 设备似乎支持 H264,但配置文件为 42001f...因此配置文件不匹配

    结果是,您可能必须进行一些 SDP-munging 才能让 H264 在您的所有设备上运行。

    【讨论】:

    • 您的回答没有解释为什么它适用于Desktop/Chrome <-> iPad/Safari 而不适用于Desktop/Chrome <-> iPhone/Safari
    • 您的回答不正确,但为我指明了正确的方向,因为您注意到我的报价仅包含 VP8 和 VP9 视频编解码器。 iOS 仅支持 H264,但 Desktop/Chrome 确实提供 H264。由于一个错误,Android/Chrome 不提供 H264。
    • 所以你对我的回答投了反对票,即使它为你指明了正确的方向。你回答了你自己的问题。
    • 哦,抱歉,我认为这是正确的方法。我将删除反对票。我回答了自己的问题以帮助其他用户解决同样的问题。
    • 没问题。你可能也想看看这个:bugs.chromium.org/p/chromium/issues/detail?id=761336
    【解决方案2】:

    有两个不同的问题导致 Android 上的 Chrome 和 iOS/Safari 之间的 WebRTC 连接无法正常工作:

    1) 设备上没有 H.264 实现

    Chrome for Android 只有 H.264 的硬件实现,没有软件实现。目前,H.264 仅适用于配备 Qualcomm(Kitkat 及更高版本)或三星 Exynos(Lollipop 及更高版本)处理器的设备。由于 Apple 仅支持 H.264,其他 Android 设备无法连接 iOS 和 Safari。

    2) Android 版 Chrome 存在错误:

    Chrome Android does not offer/answer H.264 Constrained Baseline Profile

    由于Apple只支持H.264,Android/Chrome暂时无法连接iOS。

    这个问题将在 Chrome Android 65(现在的 Canary)中得到解决。请参阅this 了解更多信息。

    在我的情况下,问题是错误,但我认为人们应该意识到这两个问题。

    【讨论】:

      猜你喜欢
      • 2018-06-19
      • 1970-01-01
      • 1970-01-01
      • 2014-10-08
      • 1970-01-01
      • 2021-02-08
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      相关资源
      最近更新 更多