Kurento创建PeerConnection前的WebSocket连接状态检查

问题背景:

在做基于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            连接已经关闭或不可用
————————————————————————————————————

参考链接:WebSocket对象的“readyState”属性记录连接过程中的状态值

猜你喜欢

转载自blog.csdn.net/ranweizheng/article/details/82967462