2013-03-10 34 views
3

當對等連接已經建立時,是否有創建數據通道的方法?建立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

回答

8

你可能已經遇到了同樣的問題,因爲我有。顯然你必須在創建一個offer之前添加一個數據通道,如果你想添加一個流,你將需要創建一個新的offer/answer並重新協商。根據W3C規範:

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

特別地,如果一個RTCPeerConnection對象被消耗MediaStream和軌道被添加到該流的MediaStreamTrackList對象中的一個,通過,例如,add()方法被調用時,RTCPeerConnection對象必須觸發「negotiationneeded」事件。媒體組件的移除也必須觸發「協商需要」。

然而,談判需要的事件還沒有建立在FF(我認爲在Chrome中),所以這就是爲什麼事情可能會有點不正常。