3

ピア接続が既に確立されているときにデータ チャネルを作成する方法はありますか?

これが私がやっていることです:

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. 接続が本当に確立されていることを確認する方法は? ここで、 state がsatestableと等しいことがわかりました。active

  2. onopen何らかの理由でイベントが発生しないため、接続が確立されているかどうかはまだわかりません。

さらにコードが必要な場合は、教えてください。

編集:onnegotiationneededイベント ハンドラーを追加し、現在起動中peerConnection.ondatachannelですが、チャネルはconnecting状態にあります

4

1 に答える 1

9

あなたは私と同じ問題に遭遇したかもしれません。どうやら、オファーを作成する前にデータチャネルを追加する必要があり、ストリームを追加する場合は、新しいオファー/回答を作成して再交渉する必要があります。W3C仕様によると:

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

特に、RTCPeerConnection オブジェクトが MediaStream を消費しており、たとえば add() メソッドが呼び出されることによって、ストリームの MediaStreamTrackList オブジェクトの 1 つにトラックが追加された場合、RTCPeerConnection オブジェクトは「negotiationneeded」イベントを起動する必要があります。メディア コンポーネントの削除も、「negotiationneeded」をトリガーする必要があります。

ただし、negotiationneeded イベントはまだ FF に組み込まれていないため (Chrome ではそうなると思います)、動作が少し不安定になる可能性があります。

于 2013-05-09T08:10:41.263 に答える