Firefox 中的 WebRTC 直播流(H264)错误,无法生成有效的 SDP 答案
Posted
技术标签:
【中文标题】Firefox 中的 WebRTC 直播流(H264)错误,无法生成有效的 SDP 答案【英文标题】:WebRTC live stream(H264) error in Firefox, can't generate valid SDP answer 【发布时间】:2018-01-09 10:01:31 【问题描述】:我正在尝试使用 Janus WebRTC 网关在 Web 浏览器中运行 H264
编码的实时流。使用Chrome
进行测试时,流工作正常,但使用firefox
时显示ICE failed, add a TURN server and see about:webrtc for more details
。
以下是我的 about:webrtc
Firefox 日志。
[ 6442450983 ] http://192.168.2.194:5000/ 15:18:19 GMT+0530 (IST)
PeerConnection ID: 1515491295667117 (id=6442450983 url=http://192.168.2.194:5000/)
ICE Stats
Local Candidate Remote Candidate ICE State Priority Nominated Selected Bytes sent Bytes received
ICE restarts:
ICE rollbacks:
SDP
Local SDP
v=0
o=mozilla...THIS_IS_SDPARTA-57.0.4 3500649212029345392 0 IN IP4 0.0.0.0
s=-
t=0 0
a=sendrecv
a=fingerprint:sha-256 11:44:F1:BD:D1:69:8E:17:E0:9A:AA:89:8E:76:9F:4E:09:E1:94:D0:37:34:EE:FE:DF:5E:FC:77:B0:4D:F7:53
a=ice-options:trickle
a=msid-semantic:WMS *
m=video 0 RTP/SAVPF 120
c=IN IP4 0.0.0.0
a=inactive
a=end-of-candidates
a=mid:video
a=rtpmap:120 VP8/90000
Remote SDP
v=0
o=- 1515491295396595 1515491295396595 IN IP4 106.51.68.195
s=-
t=0 0
a=sendrecv
a=group:BUNDLE video
a=msid-semantic:WMS janus
m=video 9 RTP/SAVPF 126
c=IN IP4 106.51.68.195
a=candidate:1 1 udp 2013266431 192.168.2.194 45887 typ host
a=candidate:2 1 udp 1677722111 106.51.68.195 45887 typ srflx raddr 192.168.2.194 rport 45887
a=sendonly
a=end-of-candidates
a=fingerprint:sha-256 D2:B9:31:8F:DF:24:D8:0E:ED:D2:EF:25:9E:AF:6F:B8:34:AE:53:9C:E6:F3:8F:F2:64:15:FA:E8:7F:53:2D:38
a=ice-options:trickle
a=ice-pwd:KsS99rsAZXj9lFd7psCT61
a=ice-ufrag:3tcw
a=mid:video
a=rtcp-fb:126 nack
a=rtcp-fb:126 goog-remb
a=rtcp-mux
a=rtpmap:126 H264/90000
a=setup:actpass
a=s-s-rc:3973486276 cname:janusvideo
a=s-s-rc:3973486276 msid:janus janusv0
a=s-s-rc:3973486276 mslabel:janus
a=s-s-rc:3973486276 label:janusv0
RTP Stats
我什至尝试添加以下 TURN 服务器
urls: "turn:numb.viagenie.ca",
username: "l1787875@mvrht.com",
credential: "test"
但是控制台错误变为ICE failed, your TURN server appears to be broken, see about:webrtc for more details
,保持about:webrtc
日志和以前一样。
我发现 Firefox 无法为 Janus 生成的 SDP 报价生成有效答案。 Firefox 创建的答案具有属性 rtpmap: 120 VP8/90000
,而 Janus 提供的 SDP 提供具有属性 rtpmap: 127 H264/90000
,这会阻止 Firefox 与 Janus 建立 SDP 会话。 Chrome 可以使用rtpmap: 127 H264/90000
生成有效答案,因此它可以完美地显示流。
我正在使用Mozilla firefox-57.0.4
。
有没有办法,我可以为来自 Janus 的传入 SDP offer
获取/生成有效的 SDP answer
?
【问题讨论】:
Chrome 可以工作,而 Firefox 不能,这很奇怪。在 Firefox 中转到about:config
并查看 media.peerconnection.ice.relay_only
是否设置为 true
,这将强制 Firefox 仅通过中继(TURN)建立连接。如果是,请将其更改为 false
并重试。
media.peerconnection.ice.relay_only
仅设置为其默认值,即false
。我还有什么需要检查的吗?
你已经粘贴了来自Janus的SDP,你也可以粘贴Firefox发送的SDP吗?另一件事是尝试指定公共 STUN 服务器,而不是指定 TURN,例如 urls: "stun:stun.l.google.com:19302"
.
我正在使用 STUN 服务器 urls: "stun:stun.l.google.com:19302"
并且没有 TURN 服务器。我刚刚使用 TURN 检查控制台错误 ICE failed, add a TURN server and see about:webrtc for more details
。但这并没有解决问题。 Chrome 一切正常。
这是来自 about:webrtc
在 Firefox 中的日志。你问我如何获得SDP?我对此没有太多经验。
【参考方案1】:
此解决方案对我有用(最后一条黄色消息): https://groups.google.com/forum/#!topic/meetecho-janus/jKg5u9421kM
我正在使用 Janus,但在 Firefox 中遇到了同样的错误。 问题是关于 SDP profile-level-id。 我只需要更换它:
// Create offer/answer now if(jsep === null || jsep === undefined) createOffer(handleId, media, callbacks); else if(adapter.browserDetails.browser === "edge") // This is Edge, add an a=end-of-candidates at the end jsep.sdp += "a=end-of-candidates\r\n"; var oldsdp = jsep["sdp"]; var pattern=/420029/gi; var newsdp = oldsdp.replace(pattern,"42e01f"); Janus.log(newsdp); jsep["sdp"]=newsdp; config.pc.setRemoteDescription( new RTCSessionDescription(jsep), function() Janus.log("Remote description accepted!"); createAnswer(handleId, media, callbacks); , callbacks.error);
【讨论】:
以上是关于Firefox 中的 WebRTC 直播流(H264)错误,无法生成有效的 SDP 答案的主要内容,如果未能解决你的问题,请参考以下文章
开源流媒体解决方案,流媒体服务器,推拉流,直播平台,SRS,WebRTC,移动端流媒体,网络会议
开源流媒体解决方案,流媒体服务器,推拉流,直播平台,SRS,WebRTC,移动端流媒体,网络会议,优秀博客资源等分享