我在WebRTC JS应用程序和stcuk上工作,此时我需要创建一个数据通道。我有这部分代码,它确实有效,但openRTCDataChannel方法被执行了两次:
this.myRTCConnections[id][hash]=window.RTCPeerConnection?new RTCPeerConnection(this.RTCConfiguration,{optional:[]}):(window.mozRTCPeerConnection?new mozRTCPeerConnection(this.RTCConfiguration,{optional:[]}):new webkitRTCPeerConnection(this.RTCConfiguration,{optional:[]}));
this.myRTCConnections[id][hash].ondatachannel=function(event){This.openRTCDataChannel(event,id,hash)}//first calling of openRTCDataChannel method
this.openRTCDataChannel(false,id,hash)//second calling of openRTCDataChannel method
this.openRTCDataChannel=function(event,id,hash,onOffer,initiator){
var RTCDataChannelOptions={reliable:true},This=this
if(!this.myRTCDataChannels[id])this.myRTCDataChannels[id]={}
this.myRTCDataChannels[id][hash]=event&&event.channel?event.channel:this.myRTCConnections[id][hash].createDataChannel("myDataChannel",RTCDataChannelOptions)
this.myRTCDataChannels[id][hash].onerror=function(error){log(error)}
this.myRTCDataChannels[id][hash].onmessage=function(e){This.handleIncomingRTCMessage(e.data,id,hash)}
this.myRTCDataChannels[id][hash].onclose=function(e){This.onSignalingServerLeave(false,id,hash)}
this.myRTCDataChannels[id][hash].onopen=function(e){This.onRTCDataChannelOpen(id,hash,onOffer,initiator)}
}
如果我第一次或第二次调用If-openRTCDataChannel方法进行注释,我的一些对等方可以在它们之间交换数据,而有些则不能。
所以问题是,如果我想让我的代码工作,我需要用两种不同的方式执行openRTCDataChannel方法两次。我做错了什么?启动在所有浏览器中都能工作的数据通道的最佳方式是什么?
感谢您的帮助!
好的。看来我已经发现这里出了什么问题。
启动连接并发送报价的对等方应通过以下方式创建数据通道:
this.openRTCDataChannel(false,id,hash)
另一个接受报价并发送回复的同行应该使用这个:
this.myRTCConnections[id][hash].ondatachannel=function(event){This.openRTCDataChannel(event,id,hash)}
我在Mozilla和Chrome中检查了这个,它对我很有效。如果我错了,请纠正我。