Kurento建立PeerConnection前的WebSocket連線狀態檢查
阿新 • • 發佈:2018-11-08
問題背景:
在做基於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 連線已經關閉或不可用
————————————————————————————————————