2013-03-10 3 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. 어떻게 연결이 정말 설정되어 있는지 확인 할 수 있습니까? stable 상태가 active 인 동등 물인 here이 발견되었습니다.

  2. onopen 어떤 이유로 이벤트가 실행되지 않으므로 여전히 연결이 설정되어 있는지 확실하지 않습니다.

더 많은 코드가 필요하면 알려주세요.

는 편집 : 나는 onnegotiationneeded 이벤트 핸들러를 추가하고 지금 peerConnection.ondatachannel이 발사되어 있지만 채널은 내가 가지고있는 당신은 같은 문제로 실행했을 수도

+0

해결책을 얻었습니까? –

+0

일종의,하지만 여전히 매우 불안정합니다. –

답변

8

connecting 상태입니다. 제안을 생성하기 전에 데이터 채널을 추가해야하며, 스트림을 추가하려면 새로운 제안/답변을 생성하고 다시 협상해야합니다. W3C의 사양에 따르면, 특히

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

, 예를 들면, 추가() 메소드에 의해, RTCPeerConnection 객체가의 MediaStream 소모되고 트랙 스트림의 MediaStreamTrackList 개체 중 하나에 첨가하면 RTCPeerConnection 개체는 호출되는 동안 "negotiationneeded"이벤트를 발생시켜야합니다. 미디어 구성 요소를 제거하면 "협상 필요"가 트리거되어야합니다.

그러나 아직 협상이 필요하지 않은 이벤트가 FF로 작성되지 않았기 때문에 (Chrome에서 생각하기에) 문제가 다소 불규칙하게 나타납니다.

관련 문제