WebRTC - 从Chrome获取'格式错误的约束对象',而不是Firefox

时间:2015-01-07 23:55:55

标签: javascript html5 webrtc

我想知道我做错了什么。

我从这里得到'格式错误的约束对象'错误:

pc.createAnswer( function (answer) {
  ...
}, fail, { offerToReceiveAudio: true, offerToReceiveVideo: true });

有什么想法吗?

2 个答案:

答案 0 :(得分:6)

根据最新的Webrtc spec,约束参数的正确形式应为:

{ offerToReceiveAudio: true, offerToReceiveVideo: true }

请注意offerToReceiveAudioofferToReceiveVideo开头的小写'o'。

目前仅由FF 33或更新版本支持。

Chrome只支持自己的方式:

{ mandatory: { OfferToReceiveAudio: true, OfferToReceiveVideo: true } }

如果您为其提供具有符合新规范的结构的约束对象,Chrome将会抛出错误。

好消息是Firefox仍然接受旧表格。在这种情况下,它只会打印一条警告消息。所以,至少现在,使用旧版本。

答案 1 :(得分:1)

我已经为这个问题奋斗了许多小时,不久前我发现了一些有趣的东西:

当我向Object.prototype添加任何方法时,我得到Uncaught TypeError: Failed to construct 'RTCPeerConnection': Malformed constraints object.

示例:

Object.prototype.nothingSpecial = function() {
    console.log("Here goes nothing ...");
};

这将导致异常。

解决方案::删除对Object.prototype的所有/所有修改。

我相信这是浏览器中的错误。

-

编辑:我的同事找出了此错误的确切原因:

  • enumerable字段添加到Object.prototype时出现错误。
  • 仅添加non-enumerable字段时有效(例如,使用defineProperty)

-

我正在使用erizo视频流库。

使用以下工具进行测试:JX Browser 6.21(基于Chromium)
版本:Mozilla / 5.0(Windows NT 10.0; Win64; x64)AppleWebKit / 537.36(KHTML,例如Gecko)Chrome / 64.0.3282.24 Safari / 537.36

完整错误如下:

Uncaught TypeError: Failed to construct 'RTCPeerConnection': Malformed constraints object.
    at Object.Erizo.ChromeStableStack (erizo.js:2405)
    at Object.Erizo.Connection (erizo.js:2910)
    at erizo.js:3670
    at c.<anonymous> (erizo.js:3373)
    at c.onPacket (erizo.js:890)
    at d.onPacket (erizo.js:722)
    at d.c.onPacket (erizo.js:465)
    at d.c.onData (erizo.js:453)
    at WebSocket.websocket.onmessage (erizo.js:929)

第一个异常导致了第二个异常:

Uncaught TypeError: Cannot read property 'processSignalingMessage' of undefined
    at c.<anonymous> (erizo.js:3253)
    at c.emit [as $emit] (erizo.js:213)
    at c.onPacket (erizo.js:887)
    at d.onPacket (erizo.js:722)
    at d.c.onPacket (erizo.js:465)
    at d.c.onData (erizo.js:453)
    at WebSocket.websocket.onmessage (erizo.js:929)

(如果您想知道erizo.js文件名和行号:我使用的是erizo.min.js印刷精美的版本,以便于调试。)