Webrtc作为TSINGSEE青犀视频突破视频直播延时的新方式,我们投入了不少精力对此进行研究,目前的webrtc-client已经初具雏形。
在测试过程中,使用webrtc推两路rtsp流,在浏览器可以正常播放,两路流都可以播放;但是假如关闭其中一路的推流,浏览器video标签中所有流的视频画面都会卡住不动,刷新页面也不会出现视频流的id。
正常状态下后端应该会返回视频id,即下图中圈出的位置。
但在该错误状态下,这个返回数组显示为空。该处连数据都获取不到,因此我们考虑是服务端问题,我们使用的是nginx+webrtc来进行排查。
1、根据routerName是否存在来创建router
2、创建唯一routerId
3、根据routerId,来创建Transport,并生成transportId
4、关闭一路会进closeRouter,根据routerId来释放
5、Router析构函数里面进去,再次释放Transport
通过以上几个步骤,可以大致了解到,每次推流都会有一个唯一的routerId,所以RouterId永远只有一个,该逻辑导致了只要有一路流关闭都会关闭所有流并释放。
此处我们使用的是websocket连接,推流生成一个transportId,拉流也会生成一个transportId;推流关闭会进websocket disconnect函数,只要websocket关闭找到相应的transportId即可,并释放推流端资源。
这样做其实还有个小问题,就是拉流端没释放资源。解决这个问题也并不困难,其实拉流端关闭也会进websocket disconnect函数,只要找到transportId一起释放资源即可。
由于webrtc-client目前仍在测试,所以如果大家想了解一些关于我们现有视频平台的相关内容,也可以联系我们,经过实践测试,包括EasyCVR、EasyNVR、EasyGBS等在内的一些视频平台都提供了高稳定性和可靠性的视频传输直播分发服务。如有需求,欢迎了解。