RTCDataChannel的ReadyState不是'开放' [英] RTCDataChannel's ReadyState is not 'open'
本文介绍了RTCDataChannel的ReadyState不是'开放'的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试通过<$ h $ => http: /webrtc.googlecode.com/svn/trunk/samples/js/base/adapter.js\"rel =nofollow> WebRTC的adapter.js ,但我收到以下错误:
I'm trying to send text over an RTCPeerConnection
with RTCDataChannel
using WebRTC's adapter.js, but I'm getting the following error:
Uncaught InvalidStateError:
Failed to execute 'send' on 'RTCDataChannel':
RTCDataChannel.readyState is not 'open'
我的代码可通过这个小提琴及以下:
My code is available via this fiddle and below:
var peerConnection = new RTCPeerConnection(null, {
optional: [{
RtpDataChannels: true
}]
});
peerConnection.ondatachannel = function(event) {
receiveChannel = event.channel;
receiveChannel.onmessage = function(event){
alert(event.data);
};
};
var dataChannel = peerConnection.createDataChannel("data", {reliable: false});
dataChannel.send("Hello");
我做错了吗?
推荐答案
我今天早上编写了以下代码,使用 RTCPeerConnection
和 RTCDataChannel
单页。声明这些函数的顺序很重要。
I wrote the following code this morning that uses RTCPeerConnection
and RTCDataChannel
in a single page. The order in which these functions are declared is important.
var localPeerConnection, remotePeerConnection, sendChannel, receiveChannel;
localPeerConnection = new RTCPeerConnection(null, {
optional: [{
RtpDataChannels: true
}]
});
localPeerConnection.onicecandidate = function(event) {
if (event.candidate) {
remotePeerConnection.addIceCandidate(event.candidate);
}
};
sendChannel = localPeerConnection.createDataChannel("CHANNEL_NAME", {
reliable: false
});
sendChannel.onopen = function(event) {
var readyState = sendChannel.readyState;
if (readyState == "open") {
sendChannel.send("Hello");
}
};
remotePeerConnection = new RTCPeerConnection(null, {
optional: [{
RtpDataChannels: true
}]
});
remotePeerConnection.onicecandidate = function(event) {
if (event.candidate) {
localPeerConnection.addIceCandidate(event.candidate);
}
};
remotePeerConnection.ondatachannel = function(event) {
receiveChannel = event.channel;
receiveChannel.onmessage = function(event) {
alert(event.data);
};
};
localPeerConnection.createOffer(function(desc) {
localPeerConnection.setLocalDescription(desc);
remotePeerConnection.setRemoteDescription(desc);
remotePeerConnection.createAnswer(function(desc) {
remotePeerConnection.setLocalDescription(desc);
localPeerConnection.setRemoteDescription(desc);
});
});
这篇关于RTCDataChannel的ReadyState不是'开放'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文