EasyRTC 通話報錯 `Failed to execute 'send' on 'RTCDataChannel': RTCDataChannel.readyState is not 'open'`修復
阿新 • • 發佈:2021-07-20
WebRTC的存在給線上視訊會議系統帶來了新的模式,TSINGSEE青犀視訊開發的網頁視訊會議系統EasyRTC綜合了webrtc和rtmp/rtsp方案的優點,支援一對一、一對多等視訊會議互動通話,滿足語音社交、線上教育和培訓、視訊會議和遠端醫療等場景,新的EasyRTC專案也即將和大家見面。
在測試 EasyRTC 新版的點對點通話功能時,出現報錯:Failed to execute ‘send’ on ‘RTCDataChannel’: RTCDataChannel.readyState is not ‘open’,並且不能將訊息成功的發給對方。
檢視程式碼如下:
//例項化傳送通道 sendChannel=localConnection.createDataChannel('webrtc-datachannel'); //onopen事件監聽 sendChannel.onopen=this.onSendChannelStateChange; //onclose事件監聽 sendChannel.onclose=this.onSendChannelStateChange;
以上程式碼並未發現錯誤,因此懷疑是呼叫順序的問題導致。再次檢視程式碼,發現在傳送 offer 資訊之後,建立了對應的資料傳輸通道,問題點大概出現在此處。
為了解決該問題,我們將程式碼順序調整如下:
//例項化傳送通道 sendChannel=localConnection.createDataChannel('webrtc-datachannel'); //onopen事件監聽 sendChannel.onopen=this.onSendChannelStateChange; //onclose事件監聽 sendChannel.onclose=this.onSendChannelStateChange; try{ console.log('localConnection建立提議Offer開始'); //建立提議Offer constoffer=awaitlocalConnection.createOffer(); //建立Offer成功 awaitthis.onCreateOfferSuccess(offer); }catch(e){ //建立Offer失敗 this.onCreateSessionDescriptionError(e); }
修改完畢後,可以正常傳送資訊。