在FireFox中修改WebRTC的SDP约束

3
我正在尝试降低 FireFox 中 RTCPeerConnection 的比特率,我已经成功地在 Chrome 中实现了这一点。
我正在修改由 FireFox 自动生成的 SDP 字符串,该字符串是在调用 createOffer 方法后生成的。我的回调函数修改了 SDP 然后尝试将其设置在生成的 RTCSessionDescription 中(根据协议规范,它只是一个 DOMString)。在 Chrome 中,我可以修改 SDP 字符串并设置它(在传递给 createOffer 的回调函数中完成)。
desc.sdp = TransFormSDP(desc.sdp);
connection.setLocalDescription(desc);

然而,这似乎在FireFox中无法工作,它不会在我分配后更新SDP,并继续使用由createOffer方法生成的字符串。
具体来说,我正在尝试特别添加一个fmtp:max-fr = 15; max-fs = 400;限制VP8编解码器被提供和通过在SDP的视频媒体部分中添加b = AS:512行来限制带宽。
FF是否不允许在自动生成SDP之后修改SDP?或者FireFox不允许特定的SDP选项,这些选项属于SDP的标准化(例如带宽限制和编解码器设置)?
编辑:火狐你认真的吗?
2个回答

1
实际上,编解码器的比特率可以通过API获得,但在Firefox上并不工作得很好。
正确的API应该是规范中描述的那个https://www.w3.org/TR/webrtc/#dom-rtcrtpencodingparameters
从64版本开始,Firefox支持RTCRtpSender.setParameters。但实际上(v.66)并不正确支持它,比特率可以工作,但帧率不行。
修改比特率的API方式片段:
const sender = peerConnection.getSenders().filter(s => s.track.kind === 'video')[0];
sender.setParameters({...(sender.getParameters()), encodings: [{
    maxBitrate: 1000*50,
}]});

然而,在FF中通过API更改比特率只有短暂的效果,如下图所示。几秒钟后,比特率会恢复到默认值。原因不清楚,可能与degradationPreference编解码器属性有关,因为它对balancedmaintain-frameratemaintain-resolution的行为不同。在Chrome中,它正常工作。

enter image description here


如果您发现 https://webrtc.github.io/samples/src/content/peerconnection/bandwidth/ 的行为与此不符,请向 Firefox 提交错误报告。 - Philipp Hancke

1

看起来目前不支持, 至少我是这样假设的,因为还没有对这个bug做出回应。猜想我现在只能使用Chrome。


如果有更好的答案,请提供。当我能接受自己的答案时,我将在两天内接受无法使用FF的命运... :( - Benjamin Trent
你找到解决方案了吗? - igorpavlov
据我所知,这仍然是一个错误,Mozilla尚未解决它。 - Benjamin Trent
截至2016年1月,似乎Firefox 48尚未支持此功能:ref - Jokester
Firefox的开发人员似乎完全不感兴趣按照规范使webRTC正常工作。尽管如此,在SDP中无法更改带宽。无论你做什么,音频都将保持在40 kBit/s。这真是太遗憾了。 - Armin Hierstetter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接