我想知道我做错了什么。
我从这里得到'格式错误的约束对象'错误:
pc.createAnswer( function (answer) {
...
}, fail, { offerToReceiveAudio: true, offerToReceiveVideo: true });
有什么想法吗?
答案 0 :(得分:6)
根据最新的Webrtc spec,约束参数的正确形式应为:
{ offerToReceiveAudio: true, offerToReceiveVideo: true }
请注意offerToReceiveAudio
和offerToReceiveVideo
开头的小写'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印刷精美的版本,以便于调试。)