【问题标题】:SDP issues: WebRTC connection fails Firefox but not ChromeSDP 问题:WebRTC 连接失败 Firefox 但不是 Chrome
【发布时间】:2021-08-03 23:44:48
【问题描述】:

我正在研究 WebRTC 流,它将视频从设备流式传输到浏览器。这种流式传输在 Chromium 浏览器中运行良好,但在 Firefox 中失败。 SDP 交换出现故障,然后停止其余连接(在 SDP 交换后没有发送 ICE 候选)。

我发现 Firefox 的答案 SDP 存在一些问题,但我还没有发现问题的原因:SDP 提到 VP8 但我们只使用 H264; m=video 0 具有端口 0,但通常非零;我通常会得到一条 a=inactive 行; a=sendrecv 应该是 a=recvonly;缺少许多其他行(例如,特定于 ICE 的行)

SDP 示例如下:

Example SDP offer from the device while using Firefox (Chrome has a similar format):


v=0
o=- 1709142607078008990 0 IN IP4 0.0.0.0
s=-
t=0 0
a=ice-options:trickle
a=group:BUNDLE video0
m=video 9 UDP/TLS/RTP/SAVPF 96
c=IN IP4 0.0.0.0
a=setup:actpass
a=ice-ufrag:3/ygyy34xZMRXsru4Z1KuPht0mJvnSqj
a=ice-pwd:0stYVWAG9GKvu+vwp8v5ZRU+WaBdIoGp
a=rtcp-mux
a=rtcp-rsize
a=sendrecv
a=rtpmap:96 H264/90000
a=rtcp-fb:96 nack pli
a=framerate:9
a=fmtp:96 packetization-mode=1;profile-level-id=4d4016;sprop-parameter-sets=Z01AFo2NQFAX/LgLcBAQFAAAD6AAARlDoYAL/wAD0JLvLjQwAX/gAHoSXeXCgA==,aO44gA==
a=ssrc:984898564 msid:user2537555540@host-7396b709 webrtctransceiver30
a=ssrc:984898564 cname:user2537555540@host-7396b709
a=mid:video0
a=fingerprint:sha-256 2D:05:6B:57:E7:93:01:DE:CA:BB:57:EE:93:F6:28:3F:1A:96:5D:E9:EC:CB:33:EF:2F:96:DE:68:F0:F7:D2:98


Example SDP answer from Firefox, with comments pointing out questionable lines:


v=0
o=mozilla...THIS_IS_SDPARTA-88.0 4439569731226206324 0 IN IP4 0.0.0.0
s=-
t=0 0
a=sendrecv                           // Often or always is recvonly in other browsers, not sendrecv
a=fingerprint:sha-256 7A:C6:F8:FF:57:1E:E5:63:86:09:A2:CB:38:ED:59:45:7D:06:63:B8:68:0A:71:89:18:54:85:59:22:8A:DD:A7
a=ice-options:trickle
a=msid-semantic:WMS *
m=video 0 UDP/TLS/RTP/SAVPF 120      // Why is the port 0?
c=IN IP4 0.0.0.0
a=inactive                           // This seems incorrect
a=mid:video0
a=rtpmap:120 VP8/90000               // This should be H264


For comparison, here is an answer SDP from Chrome which streams successfully:


v=0
o=- 4481503930448229400 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE video0
a=msid-semantic: WMS
m=video 9 UDP/TLS/RTP/SAVPF 96       // Port 9 used here
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:U/NT
a=ice-pwd:KVGFr/KEWwTJfam3FXRuKn98   // There are more ICE values here
a=ice-options:trickle
a=fingerprint:sha-256 98:D9:7D:22:7C:BB:00:58:73:20:F1:91:C1:F4:1E:D8:AE:1F:FE:60:57:5C:27:68:EF:17:BB:C6:93:65:76:73
a=setup:active
a=mid:video0
a=recvonly                           // recvonly instead of sendrecv
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 H264/90000               // Using H264
a=rtcp-fb:96 nack pli
a=fmtp:96 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d0015

我最初尝试使用 Firefox SDP 答案对 SDP 进行修改,以手动将 H264 添加到我在 Firefox 中的本地答案中,但这并不完全有效,因为还有许多其他必需的 ICE 值我可能无法伪造。 在这一点上,我想知道设备提供的是否需要任何专门用于 Firefox 的更新值,但我不确定这些值是什么。可能是 a=mid:video0,因为它有尾随 0,但为什么 Chrome 会工作并返回相同的值?可能是 profile-level-id,虽然我不确定这有多大影响。

任何人都知道这里可能发生什么问题以及可能需要哪些修复?

【问题讨论】:

    标签: javascript firefox webrtc sdp


    【解决方案1】:

    Firefox 可能不支持配置文件级别 id 0x4d4016。然后您没有共同的编解码器并且媒体被拒绝(这就是端口 0 的含义)。如果没有任何未拒绝的 m 线,您的连接将失败。

    【讨论】:

    • 我需要提供一个完整的解决方案,但这似乎是正确的。我对传入的提议 SDP 进行了快速 SDP 修改,以更改配置文件级别 ID,Firefox 方面似乎对此做出了回应(即回答 SDP 填写得更多,Firefox 发送了冰候选人)。谢谢!
    猜你喜欢
    • 2013-06-07
    • 2015-07-02
    • 2014-10-08
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 2019-07-19
    • 2012-06-02
    相关资源
    最近更新 更多