通过浏览器使用WebRTC时会话终止或断开都是什么原因?
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对等连接,在服务器端一旦连接丢失,应该终止媒体路径,向对端发送断开连接消息。想确保媒体流继续进行,需要在连接同一个用户或者会话的对等连接,可以在连接状态中添加一个计时器来确保连接状态。