javascript - SDP问题: WebRTC connection fails Firefox but not Chrome

标签 javascript firefox webrtc sdp

我正在研究 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 会工作并返回相同的值?可能是个人资料级别 ID,但我不确定它的影响有多大。

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

最佳答案

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

关于javascript - SDP问题: WebRTC connection fails Firefox but not Chrome,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67523506/

相关文章:

javascript - 在localforage中动态生成key的值

javascript - 如何让 Bootstrap Toasts 不自动消失?

javascript - 在 Javascript 中引用另一个包含 'this' 引用的函数

javascript - 为什么 jQuery 的 event.which 在 Firefox 和 Chrome 中给出不同的结果?

javascript - 错误 : listen EACCES 0. 0.0.0 :444 node. js 在监听端口 444/443 时

webrtc - 如何减少回声消除使语音正常化所需的时间

javascript - 在 AngularJS 中表中添加的行上显示弹出窗口 3 秒

javascript - 嵌入式Youtube视频在Firefox上不起作用

javascript - 运行 webrtc/samples 测试,我得到错误 'Cannot read property serviceKey of undefined' ,如下面的 :

javascript - 将插件窗口附加到 Firefox 浏览器窗口