WebRTC - 从 Chrome 而不是 Firefox 获取 'malformed constraints object'
WebRTC - getting 'malformed constraints object' from Chrome but not Firefox
我想知道我做错了什么。
我收到 'malformed constraints object' 个错误:
pc.createAnswer( function (answer) {
...
}, fail, { offerToReceiveAudio: true, offerToReceiveVideo: true });
有什么想法吗?
根据最新的Webrtc spec约束参数的正确形式应该是:
{ offerToReceiveAudio: true, offerToReceiveVideo: true }
注意 offerToReceiveAudio
和 offerToReceiveVideo
开头的小写字母“o”。
目前只有 FF 33 或更新版本支持。
Chrome只支持自己的方式:
{ mandatory: { OfferToReceiveAudio: true, OfferToReceiveVideo: true } }
Chrome 如果你给它一个结构符合新规范的约束对象,它会抛出错误。
好消息是 Firefox 仍然接受旧形式。在这种情况下,它只是打印一条警告消息。所以,至少现在,使用旧版本。
我已经为这个问题奋斗了好几个小时,就在刚才我发现了一些有趣的东西:
当我向 Object.prototype
添加任何方法时,我得到 Uncaught TypeError: Failed to construct 'RTCPeerConnection': Malformed constraints object.
示例:
Object.prototype.nothingSpecial = function() {
console.log("Here goes nothing ...");
};
这会导致异常。
解决方法:删除对Object.prototype
.
的any/all修改
我认为这是浏览器中的错误。
-
编辑: 我的同事找出了这个错误的确切原因:
- 将
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 版本,以便于调试。)
我想知道我做错了什么。
我收到 'malformed constraints object' 个错误:
pc.createAnswer( function (answer) {
...
}, fail, { offerToReceiveAudio: true, offerToReceiveVideo: true });
有什么想法吗?
根据最新的Webrtc spec约束参数的正确形式应该是:
{ offerToReceiveAudio: true, offerToReceiveVideo: true }
注意 offerToReceiveAudio
和 offerToReceiveVideo
开头的小写字母“o”。
目前只有 FF 33 或更新版本支持。
Chrome只支持自己的方式:
{ mandatory: { OfferToReceiveAudio: true, OfferToReceiveVideo: true } }
Chrome 如果你给它一个结构符合新规范的约束对象,它会抛出错误。
好消息是 Firefox 仍然接受旧形式。在这种情况下,它只是打印一条警告消息。所以,至少现在,使用旧版本。
我已经为这个问题奋斗了好几个小时,就在刚才我发现了一些有趣的东西:
当我向 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 版本,以便于调试。)