我正在尝试通过以下示例修改带宽:https://webrtc.github.io/samples/src/content/peerconnection/bandwidth/
但是,我在Chrome上收到此错误。
errorInvalidModificationError:在setParameters()中修改的只读字段
Firefox成功更改了带宽。几个月前,它也可以在Chrome上正常运行。突然收到此错误,我四处搜寻,但仍然找不到任何解决方案,请问我该如何解决此错误?谢谢。
var bandwidth = 500;
// Loop through each track
var i;
for (i = 0; i < peers[peer_id].getSenders().length; i++) {
var sender = peers[peer_id].getSenders()[i];
if(sender.track.kind === "video"){
var parameters = sender.getParameters();
if (!parameters.encodings) {
parameters.encodings = [{}];
}
parameters.encodings = [{}];
parameters.encodings[0].maxBitrate = bandwidth * 1000;
sender.setParameters(parameters).then(success, error);
function success(){
console.log("bandwidth success adjust");
};
function error(err){
console.log("bandwidth error"+err);
};
};
}
最佳答案
删除第二个parameters.encodings = [{}];
它会意外删除encodings
中的第一个编码的所有属性,其中某些属性是只读的,不允许修改。
pc.setParameters()方法要求其输入有效地来自pc.getParameters(),并且仅允许修改某些encodings
属性。
它被设计为交易:
const parameters = pc.getParemeters();
// modify certain parameters only
await pc.setParemeters(parameters);
这由
getParameters()
强制执行,包括setParameters()
进行检查的parameters.transactionId。如果修改了它或某些其他只读属性,则会得到InvalidModificationError
。Firefox太宽容
Firefox实施的API的早期版本过于宽大。 Bug 1401592跟踪解决此问题。
由于Firefox,仅需要以下行:
if (!parameters.encodings) {
parameters.encodings = [{}];
}
因为只有在Firefox中,从
encodings
返回的getParameters()
永远为空。在Chrome和规范中,保证
encodings
存在并且至少包含一项。关于javascript - WebRTC更改带宽,在Chrome上收到InvalidModificationError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57400849/