WebRTC現在已經成為了W3C的正式標准,提供具有NAT遍歷功能的次秒級的點對點視頻和音頻流。次秒級延遲已經被廣泛應用於視頻會議之中,也一直是視頻流公司的焦點,目前我們已經在EasyGBS平台內實現了webrtc視頻的播放,如下圖:
在瀏覽器使用webrtc,那么在以下情況出現時將會導致會話終止:
A、關閉瀏覽器后,會話將終止;
B、關閉webrtc會話所在的選項卡時,會話將終止;
C、屬性webrtc會話所在的頁面時,會話將終止;
D、點擊連接移至到不同頁面(即使在同一站點上)時,會話將終止。
所以可以將WebRTC的斷開連接分為3大類:
A、完全無法連接
B、媒體流斷開
C、信令斷開
在每個場景中,都會有多個場景,定義失敗的原因以及如何處理和客服這些問題,下面我們逐個來分析一下。
無法連接:
有的情況是連接webrtc會話時發生了大量的失敗,甚至無法發送SDP信息,通過跨瀏覽器和設備的互操作性問題,再到無法連接進行媒體ICE的協商。
如果出現這種情況,解決的辦法是:重新進行SDP信息協商和ICE的信息交換;或者查看服務端有沒有運行。才導致的信息發不出去。
媒體斷開:
發生這種情況的原因有很多種:
- 所使用接入點的防火牆策略殺死P2P加密流量;
- 用戶在會話中途從一個網絡卻換到另一個網絡,這樣網絡協商錯誤,您應該遵循webrtc的ICE協商機制;
- 另一端崩潰、關閉或者下線,也會導致媒體斷開。
每一個媒體斷開都需要不同的處理,在一些代碼中有些需要手動處理。防火牆問題就是客戶端與客戶端在一起制定配置以解決問題。
信令斷開:
如果信令斷開連接,webrtc甚至不知道,因此webrtc不會立即導致會話本身斷開連接。那么可以根據服務器的websocket連接的狀態來終止webrtc對等連接,在服務器端一旦連接丟失,應該終止媒體路徑,向對端發送斷開連接消息。想確保媒體流繼續進行,需要在連接同一個用戶或者會話的對等連接,可以在連接狀態中添加一個計時器來確保連接狀態。