【发布时间】:2014-12-15 17:42:14
【问题描述】:
我开始使用 WebRTC 进行开发,但那东西从来没有给我 ICE 候选人。我设置了所有东西,我正在交换描述和东西,我还在那里缩小了一个超级丑陋的功能,以确保一切都正常运行,一个接一个。两者的信号状态都是稳定的,onError 永远不会被触发(如预期的那样),但 onIceCandidate 也会(不是预期的那样),当我想发送一个随机的空 MediaStream 对象pc1.addStream(new webkitMediaStream()); 时,它总是触发onNegotiationNeeded。
有人知道我的代码到底有什么问题吗?我花了几个小时浏览 Stack Overflow、HTML5 Rocks 和 W3C 文档,但我不明白。这是我的完整代码:
var config={
'iceServers':[{
'url':'stun:stun.l.google.com:19302'
},{
'url':'stun:stun1.l.google.com:19302'
},{
'url':'stun:stun2.l.google.com:19302'
},{
'url':'stun:stun3.l.google.com:19302'
},{
'url':'stun:stun4.l.google.com:19302'
}]
};
var pc1=new webkitRTCPeerConnection(config);
var pc2=new webkitRTCPeerConnection(config);
var onError=function(error)
{
console.error(error);
}
pc1.onicecandidate=function()
{
console.log('PC1 onIceCandidate (finally) fired!');
}
pc2.onicecandidate=function()
{
console.log('PC2 onIceCandidate (finally) fired!');
}
pc1.oniceconnectionstatechange=function()
{
console.log('PC1 oniceconnectionstatechange fired!');
}
pc2.oniceconnectionstatechange=function()
{
console.log('PC2 oniceconnectionstatechange fired!');
}
pc1.onnegotiationneeded=function()
{
console.log('PC1 onnegotiationneeded fired!');
}
pc2.onnegotiationneeded=function()
{
console.log('PC2 onnegotiationneeded fired!');
}
pc1.createOffer(function(offer){
pc1.setLocalDescription(offer,function(){
pc2.setRemoteDescription(new RTCSessionDescription(offer),function(){
pc2.createAnswer(function(answer){
pc2.setLocalDescription(answer,function(){
pc1.setRemoteDescription(new RTCSessionDescription(answer),new Function()/*I don't need you, bro*/,onError);
},onError);
},onError);
},onError);
},onError);
},onError);
顺便说一句,我正在使用 Google Chrome 进行开发。我会确保它也在 Firefox 中运行,但现在问题应该是跨浏览器。我想在此之前进入数据通道......(但我没有反对使用 Firefox 或跨浏览器代码的工作解决方案)
【问题讨论】:
-
OT;现在,当我看到这段代码时,我知道他们为什么发明了 JS 承诺……
-
您可能想要post an actual answer(然后回滚您的编辑),而不是编辑您的问题的更新
-
好的,谢谢,我不知道有可能……我这里有点新,通常我只看这个网站
-
请注意,回调现在被视为遗留。 RTCPeerConnection supports promises 在所有浏览器中。
-
我现在也会考虑大部分问题本身。不敢相信我写了这个。
标签: javascript webrtc