我正在尝试降低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选项(如带宽限制和编解码器设置)?
答案 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中具有暂时效果,如下图所示。几秒钟后,比特率将恢复为默认值。原因尚不清楚,可能是因为它与degradationPreference
,balanced
和maintain-framerate
的行为不同,可能与maintain-resolution
编解码器属性有关。在chrome上,它可以正常工作。