【问题标题】:WebRTC change bandwidth receiving InvalidModificationError on ChromeWebRTC 更改带宽在 Chrome 上接收 InvalidModificationError
【发布时间】:2019-08-07 19:05:19
【问题描述】:

我正在尝试按照以下示例修改带宽: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 = [{}];
  • 它成功了,非常感谢@jib,你真的很棒。这是我的错误,我不熟悉这行“if (!parameters.encodings)”并且没有知道这是问题的主要原因。再次感谢。

标签: javascript google-chrome webrtc


【解决方案1】:

删除第二个parameters.encodings = [{}]; 它不小心擦除了encodings 中第一个编码的所有属性,其中一些属性是只读的,不允许修改。

pc.setParameters() 方法要求其输入有效地来自pc.getParameters(),并且只允许修改某些encodings 属性。

它被设计成一个交易:

const parameters = pc.getParemeters();
// modify certain parameters only
await pc.setParemeters(parameters);

这是由getParameters() 强制执行的,包括parameters.transactionIdsetParameters() 会检查它。如果它或某些其他只读属性已被修改,您将获得InvalidModificationError

火狐太宽容了

Firefox 实现了一个非常宽松的 API 版本。 Bug 1401592 跟踪修复此问题。

只有 Firefox 才需要以下行:

  if (!parameters.encodings) {
    parameters.encodings = [{}];
  }

因为只有在 Firefox 中,从 getParameters() 返回的 encodings 才会为空。

在 Chrome 和规范中,encodings 保证存在并且至少包含一项。

【讨论】:

  • 嗨@jib 现在,我终于理解了“if (!parameters.encodings)”。感谢您的详细解释。
猜你喜欢
  • 2019-05-15
  • 1970-01-01
  • 1970-01-01
  • 2014-10-08
  • 1970-01-01
  • 1970-01-01
  • 2016-07-28
  • 1970-01-01
  • 2021-06-18
相关资源
最近更新 更多