1. 程式人生 > >Kurento建立PeerConnection前的WebSocket連線狀態檢查

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”屬性記錄連線過程中的狀態值