EasyPlayer-rtsp 如何配置向Server发送心跳信息?
Posted TSINGSEE
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EasyPlayer-rtsp 如何配置向Server发送心跳信息?相关的知识,希望对你有一定的参考价值。
EasyPlayer播放器系列已经支持了H265编码视频的播放,根据用户在不同场景下的不同需求,我们已经有EasyPlayer-RTSP、EasyPlayer- RTMP、EasyPlayerPro 和EasyPlayer.js 等版本。
近期遇到一个客户在用EasyPlayer-rtsp WIN版本播放器播放雄迈的一款摄像机,起播后约30秒就不出流了,导致播放器无法正常工作;
经与客户沟通,发现一个可以复现的情况,就是每次起播后都是约30秒不能播放,或者断开后重新起播又可以播30秒,初步推断应该是保活机制的问题;带着猜测尝试修复这个问题;大家都知道EasyPlayer-rtsp播放器底层是依赖EasyRTSPClient实现的拉流,打开拉流动作接口如下:
/* 打开网络流 */
Easy_API int Easy_APICALL EasyRTSP_OpenStream(Easy_RTSP_Handle handle, int _channelid, char *_url, EASY_RTP_CONNECT_TYPE _connType, unsigned int _mediaType, char *_username, char *_password, void *userPtr, int _reconn/*1000表示长连接,即如果网络断开自动重连, 其它值为连接次数*/, int outRtpPacket/*默认为0,即回调输出完整的帧, 如果为1,则输出RTP包*/, int heartbeatType/*0x00:不发送心跳 0x01:OPTIONS 0x02:GET_PARAMETER*/, int _verbosity/*日志打印输出等级,0表示不输出*/);
EasyRTSPClient在设计之初就已经定义了相关命令交互的设计,看上面函数中 heartbeatType参数定义:
int heartbeatType/*0x00:不发送心跳 0x01:OPTIONS 0x02:GET_PARAMETER*
当给heartbeatType传1时,会定时向Server发送心跳信息;
再遇到此类RTSPSERVER需要Session保活检测机制的时候,我们需要将heartbeatType参数值传1。
不过此处值得注意的是,并不是所有的RTSPServer都做的那么好,就比如海康的某些IPC/NVR型号,当RTSPClient在拉流的过程中,突然发送OPTIONS保活报文,就像是发送了一个垃圾数据一样,RTSPServer自动就将整条RTSP连接断开了,导致RTP取流也随着停止了,我们只能在这类设备中,选择不发送OPTIONS保活包。
以上是关于EasyPlayer-rtsp 如何配置向Server发送心跳信息?的主要内容,如果未能解决你的问题,请参考以下文章
网页无插件视频流媒体播放器EasyPlayer-RTSP在WPF框架播放不显示视频画面,该如何排查处理?
EasyPlayer-rtsp Win版播放器获取媒体信息的代码实现