建立peerConnection后创建WebRTC数据通道

时间:2013-03-10 16:21:21

标签: 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. 如何确保真正建立连接?我发现here stable状态等于active状态。

  2. onopen事件由于某种原因不会触发,因此我仍然不确定是否已建立连接。

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

    编辑: 我添加了onnegotiationneeded事件处理程序,现在peerConnection.ondatachannel正在触发,但是频道处于connecting状态

1 个答案:

答案 0 :(得分:8)

你可能遇到了和我一样的问题。显然,您必须在创建商品之前添加数据通道,如果要添加流,则需要创建新的商品/答案并重新协商。根据W3C规范:

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

  

特别是,如果RTCPeerConnection对象正在使用MediaStream并且轨道被添加到流的MediaStreamTrackList对象之一,例如,通过调用add()方法,RTCPeerConnection对象必须触发“negotiationneeded”事件。删除媒体组件也必须触发“需要协商”。

然而,尚未在FF中构建协商需要的事件(我认为在Chrome中),这就是为什么事情可能会有点不规律。