目录
一、问题说明
客户在测试视频监控平台服务器的实时视频请求API接口时,发现接口返回的视频流url仅能播放一分钟左右,一分钟之后url就失效了,vlc中输入url无法播放视频,这是什么原因呢?
二、问题分析
1、进一步探究问题
收到客户的问题后,向客户询问了他们进行实时视频请求接口时的操作方式,得到客户的回复后,经过确认,接口中传入的参数没有问题,然后在本地使用相同的方式进行操作,将获得的url放在vlc里播放,一分钟后,视频自动停止播放。
系统生成的url如下图所示:
于是我们去查询了播放视频流相关的日志,发现在视频请求的一分钟后,服务器中出现了关闭视频流的相关信息,也就是说vlc无法继续播放视频的原因是视频流被关闭了。
2、服务端关闭视频流的原因
什么情况下视频流会被关闭呢?
首先想到的是在客户端手动去关闭正在播放的视频画面,但是这次的视频流是使用API接口请求的,并且也没有使用停止实时视频的API接口去手动停止播放,所以这个想法马上被否决了。
接着,就考虑另一种情况:接口只是请求了实时视频,但没有向服务端发送视频心跳保活数据包。
三、心跳保活
心跳保活是网络通信中的一种机制,特别是用于维护长连接的可用性。具体来说,心跳保活是指应用层通过定时发送心跳包的方式,来检测并维持双方连接的状态。
1、定义与原理
(1)定义
心跳保活是指在网络通信中,通信双方通过定期发送心跳包来检测对方是否在线,从而维持长连接的可用性。
(2)原理
通信的某一方(通常是客户端)按照预定的时间间隔向另一方(服务端)发送心跳包。如果服务端正常接收到心跳包并作出响应,则认为双方连接正常;如果服务端在一定时间内未收到心跳包或响应,则认为连接可能出现问题,进而可以采取相应的措施。
2、保活的作用
①检测连接状态:心跳保活能够实时检测连接的可用性,避免因连接中断或失效而导致的通信问题。
②维持长连接:在需要长时间保持连接的场景中(如IM即时通讯、在线游戏等),心跳保活机制能够确保连接的稳定性和可靠性。
③提高通信效率:通过及时检测并恢复失效的连接,心跳保活可以减少因连接中断而导致的重复连接请求和资源浪费。
3、实现方式
①定时发送心跳包:通信的某一方按照预定的时间间隔向另一方发送心跳包。心跳包的发送频率和格式可以根据实际需求进行配置。
②接收并响应心跳包:接收方在收到心跳包后,应该立即作出响应。如果接收方在一定时间内未收到心跳包或响应,则可以认为连接出现问题。
③处理连接问题:当检测到连接问题时,通信双方可以采取相应的措施来恢复连接。例如,客户端可以重新发起连接请求,或者服务端可以尝试重启连接等。
四、测试视频心跳保活
1、请求实时视频
使用API接口请求实时视频。
2、查看保活消息
在一分钟内调用视频心跳保活接口,根据请求实时视频返回的session-id,在接口中传入相关参数,向服务端发送保活信息。
返回结果为OK。
3、观察服务器媒体流相关日志
请求实时视频产生的部分日志,请求时间为16:19:52,如下图所示:
断开视频流的日志,时间为:16:23:01,如下图所示:
在接口请求实时视频的过程中,调用了几次视频心跳保活接口,每调用一次,实时视频的请求时间便会延长1分钟,如果在接下来的1分钟内没有再次调用心跳保活接口,视频流便会被关闭。
五、实际使用
1、查看保活
在客户端的实际使用过程中,在客户端打开视频画面后,便会每30秒向服务器发送一次心跳保活数据包,以此来达到视频画面持续播放的目的。
如下为接着的保活消息:
可以看出,两个保活消息的时间间隔是30秒。
2、查看视频
在VLC一直观察视频情况,如下图示:
可以看出,视频一直保持播放。
文章正下方可以看到我的联系方式:鼠标“点击” 下面的 “威迪斯特-就是video system 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。