在FireFox中修改WebRTC的SDP约束

时间:2014-04-09 20:54:34

标签: javascript firefox webrtc sdp

我正在尝试降低FireFox中RTCPeerConnection的比特率。我已经成功地在Chrome中完成了。

我正在修改在调用createOffer方法后由FireFox自动生成的SDP字符串。我的回调修改了SDP,然后尝试在生成的RTCSessionDescription中设置SDP(根据协议规范只是DOMString)。在Chrome中,我可以修改该SDP字符串然后进行设置(在传递给createOffer的回调中完成:

desc.sdp = TransFormSDP(desc.sdp);
connection.setLocalDescription(desc);

但是,这似乎不适用于FireFox,它在我的分配后不会更新SDP并继续使用createOffer方法生成的字符串。

具体来说,我试图通过在SDP的视频媒体部分添加fmtp: max-fr=15; max-fs=400;行,专门为所提供的VP8编解码器和带宽添加b=AS:512限制。

FF是否允许您在自动生成SDP后修改它?或者FireFox是否禁止作为SDP标准化一部分的特定SDP选项(如带宽限制和编解码器设置)?

编辑:Seriously FireFox??

2 个答案:

答案 0 :(得分:1)

嗯,好像现在it is not supported,至少我是这样假设的,因为还没有对这个bug做出回应。猜猜我现在卡在使用Chrome。

答案 1 :(得分:1)

实际上,编解码器编码的比特率可通过API获得,但是在Firefox上效果不佳。

正确的API应该是规范https://www.w3.org/TR/webrtc/#dom-rtcrtpencodingparameters

中描述的API

RTCRtpSender.setParameters在Firefox版本64中受支持。但实际上(v.66)不正确支持它,比特率有效,但fps不起作用。

修改比特率的API方法片段:

const sender = peerConnection.getSenders().filter(s => s.track.kind === 'video')[0];
sender.setParameters({...(sender.getParameters()), encodings: [{
    maxBitrate: 1000*50,
}]});

但是,通过API控制比特率仅在FF中具有暂时效果,如下图所示。几秒钟后,比特率将恢复为默认值。原因尚不清楚,可能是因为它与degradationPreferencebalancedmaintain-framerate的行为不同,可能与maintain-resolution编解码器属性有关。在chrome上,它可以正常工作。

enter image description here