建立peerConnection后创建WebRTC数据通道

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. 如何确保连接已经真正建立?我在这里发现,stable状态等同于active状态。

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

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

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


有点像排序,但仍然非常不稳定。 - Yury Solovyov
1个回答

10

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

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

特别地,如果一个RTCPeerConnection对象正在使用一个MediaStream并且通过调用add()方法将轨道添加到流的MediaStreamTrackList对象之一,则RTCPeerConnection对象必须触发"negotiationneeded"事件。删除媒体组件也必须触发“negotiationneeded”事件。 然而,“negotiationneeded”事件在火狐(我认为在谷歌浏览器中也是如此)中尚未内置,因此事情可能会有些不稳定。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接