建立对等连接后创建WebRTC数据通道

建立对等连接后创建WebRTC数据通道,webrtc,Webrtc,当对等连接已经建立时,有没有办法创建数据通道 以下是我正在做的: peerConnection.onstatechange = function(event){ var state = peerConnection.readyState; console.log('state changed to : '+state); if(state==='stable'){ console.log('connection is sta

当对等连接已经建立时,有没有办法创建数据通道

以下是我正在做的:

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 
  • 如何确保真正建立了连接?我发现
    stable
    状态等于
    active
    sate

  • onopen
    事件由于某种原因不会触发,所以我仍然不确定是否建立了连接

  • 如果你需要更多的代码,告诉我

    编辑:
    我添加了
    onnegotiationneeded
    事件处理程序,现在
    peerConnection.ondatachannel
    正在启动,但通道处于
    连接状态

    您可能遇到了与我相同的问题。显然,在创建报价之前必须添加数据通道,如果要添加流,则需要创建新的报价/应答并重新协商。根据W3C规范:

    特别是,如果RTPeerConnection对象正在使用MediaStream,并且通过(例如)调用的add()方法将轨迹添加到流的MediaStreamTrackList对象之一,则RTPeerConnection对象必须触发“NegotiationRequired”事件。移除介质组件还必须触发“需要协商”


    然而,NegotiationRequired事件还没有内置在FF中(我认为是在ChromeTo中),所以这就是为什么事情可能会表现得有点不稳定

    你找到解决办法了吗?有点,但还是很不稳定