我在我的webrtc 1-1视频通话应用程序中使用adapter.js。它在谷歌浏览器上工作正常,两个人都可以看到对方的视频并可以听到音频。但是,当我在FireFox上运行相同的应用程序时,我在来自adapter.js的控制台上收到以下错误。
NS_ERROR_UNEXPECTED
这是来自adapter.js的函数,它在return语句中给出了上述错误:
var RTCPeerConnection = function(pcConfig, pcConstraints) {
// .urls is not supported in FF yet.
maybeFixConfiguration(pcConfig);
return new mozRTCPeerConnection(pcConfig, pcConstraints);
};
这就是pcConfig中的内容:
{"iceServers":[{"url":"stun:stun.l.google.com:19302"}]}
这就是pcConstraints中的内容:
{"optional":[{"DtlsSrtpKeyAgreement":true},{"RtpDataChannels":true}],"mandatory":{}}
这就是函数maybeFixConfiguration(pcConfig)
的样子:
function maybeFixConfiguration(pcConfig) {
if (pcConfig == null) {
return;
}
for (var i = 0; i < pcConfig.iceServers.length; i++) {
if (pcConfig.iceServers[i].hasOwnProperty('urls')){
pcConfig.iceServers[i]['url'] = pcConfig.iceServers[i]['urls'];
delete pcConfig.iceServers[i]['urls'];
}
}
}
我不明白我在这里犯了什么错误。 pcConfig和pcConstraints结构有问题。我正在使用今天下载的最新FireFox。
答案 0 :(得分:3)
这可能已经过时但可能会有所帮助。
创建NS_ERROR_UNEXPECTED
时,我有new RTCPeerConnection(config)
个相同的内容。
我的问题是我的iceServers
数组有一个无效的urls
部分给Firefox带来了问题,特别是我有
urls: 'turn:someUsername@ipAddress:port'
经过一段时间后我发现someUsername@
虽然适用于Chrome,却不接受FF。
删除字符串的username@
部分为我解决了问题,希望它有所帮助。
答案 1 :(得分:0)
我发现了错误,就是我们如何指定iceServers。
更正是:
{'iceServers': [
createIceServer(isChrome
? 'stun:stun.l.google.com:19302'
: 'stun:23.21.150.121', null, null)
]}
答案 2 :(得分:0)
更新您的浏览器。 iceServer URL have been supported since Firefox 22 (circa March 2013)和adapter.js
中的完全限定域名通常不包括旧版本的浏览器。
另请注意,the latest version of adapter.js中不再需要createIceServer
- 且不可用。在那里仍然有一个polyfill用于语法上的一些更改,但它现在透明地处理,而不需要使用这个特殊的函数。