3

我正在尝试降低RTCPeerConnectionFireFox 中的比特率。我已经成功地能够在 Chrome 中进行操作。

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

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

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

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

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

编辑:说真的火狐??

4

2 回答 2

1

好吧,目前似乎不支持它,至少我是这样假设的,因为还没有对此错误的响应。猜猜我现在被困在使用 Chrome 上。

于 2014-04-09T21:42:44.443 回答
1

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

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

RTCRtpSender.setParametersFirefox 从 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因为它对和的作用不同。在 chrome 上,它可以正常工作。balancedmaintain-frameratemaintain-resolution

在此处输入图像描述

于 2019-04-20T10:31:35.353 回答