建立peerConnection后创建WebRTC数据通道

问题描述:

当对等连接已经建立时,是否有创建数据通道的方法?建立peerConnection后创建WebRTC数据通道

下面是我在做什么:

peerConnection.onstatechange = function(event){ 
     var state = peerConnection.readyState; 
     console.log('state changed to : '+state); 
     if(state==='stable'){ 
      console.log('connection is stable'); 
      var dataChannel = peerConnection.createDataChannel('test',{reliable: false}); 
      dataChannel.onopen = function(){ 
       console.log('data channel opened'); 
       dataChannel.send('hello data channel'); 
      }; 
      peerConnection.ondatachannel = function(event){ 
       console.log('ondatachannel event fire ',event); 
      };    
     } 
    }; 

,它给了我下面的输出:

state changed to : have-local-offer 
state changed to : stable 
connection is stable 
  1. 如何确保连接真正建立起来?我发现herestable状态等于active状态。

  2. onopen事件不会因某种原因而触发,所以我仍然不确定连接是否建立。

如果您需要更多的代码,请告诉我。

编辑: 我加onnegotiationneeded事件处理程序,现在peerConnection.ondatachannel被解雇,但渠道是connecting状态

+0

你有解决方案吗? – 2013-04-15 06:26:54

+0

之类的,但它仍然非常不稳定 – 2013-04-16 08:44:09

你可能已经遇到了同样的问题,因为我有。显然你必须在创建一个offer之前添加一个数据通道,如果你想添加一个流,你将需要创建一个新的offer/answer并重新协商。根据W3C规范:

http://www.w3.org/TR/webrtc/

特别地,如果一个RTCPeerConnection对象被消耗MediaStream和轨道被添加到该流的MediaStreamTrackList对象中的一个,通过,例如,add()方法被调用时,RTCPeerConnection对象必须触发“negotiationneeded”事件。媒体组件的移除也必须触发“协商需要”。

然而,谈判需要的事件还没有建立在FF(我认为在Chrome中),所以这就是为什么事情可能会有点不正常。