问题背景:
在做基于kurento的webRTC项目时,信令服务是通过webSocket来发送/接收消息的。
其中一个模块的需求是,要求在进入页面后自动开始建立webRTC连接,这时问题就出现了:如果我在ws连接建立完成前调用创建peerConnection的方法,会报出错误,非法的状态:
An attempt was made to use an object that is not, or is no longer, usable
其原因时,建立peerConnection中的一步是,创建SDP Offer信息,然后通过ws发送给信令服务器,此时,ws的状态不是connected,进而导致发送失败。
解决方案:
创建连接前,先检查ws的状态,是否为1。如果为1,则进行后面的创建工作,否则,等待1秒后重试。
function viewer() {
if (!webRtcPeer) {
video = document.getElementById('video');
showSpinner(video);
if (ws.readyState != 1) {
setTimeout(viewer, 1000);
return;
}
var options = {
remoteVideo : video,
onicecandidate : onIceCandidate
}
webRtcPeer = new kurentoUtils.WebRtcPeer.WebRtcPeerRecvonly(options,
function(error) {
if (error) {
return console.error(error);
}
this.generateOffer(onOfferViewer);
});
}
}
附:
webSocket.readyState状态介绍
————————————————————————————————————
属性值 属性常量 描述
————————————————————————————————————
0 CONNECTING 连接尚未建立
1 OPEN WebSocket的链接已经建立
2 CLOSING 连接正在关闭
3 CLOSED 连接已经关闭或不可用
————————————————————————————————————