SDP 问题:WebRTC 连接失败 Firefox 但不是 Chrome
SDP issues: WebRTC connection fails Firefox but not Chrome
我正在研究 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 和 return 的值相同?可能是 profile-level-id,但我不确定影响有多大。
有人知道这里可能发生什么问题以及可能需要什么修复吗?
Firefox 可能不支持配置文件级别 ID 0x4d4016。然后你没有共同的编解码器并且媒体被拒绝(这就是端口 0 的意思)。如果没有任何未拒绝的 m 线,您的连接将失败。
我正在研究 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 和 return 的值相同?可能是 profile-level-id,但我不确定影响有多大。
有人知道这里可能发生什么问题以及可能需要什么修复吗?
Firefox 可能不支持配置文件级别 ID 0x4d4016。然后你没有共同的编解码器并且媒体被拒绝(这就是端口 0 的意思)。如果没有任何未拒绝的 m 线,您的连接将失败。