• 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保活包。

  • 相关阅读:
    未让换行符弄错了数据
    REPLICATE
    内存 商业智能
    sql
    PageMethods介绍
    在ASP.NET AJAX中如何判断浏览器及计算其宽高
    用JavaScript实现网页图片等比例缩放
    js技巧收集(200多个)(转自:asp.net中文俱乐部)
    C#调用ORACLE存储过程返回结果集及函数
    Using PageMethods to access Session data
  • 原文地址:https://www.cnblogs.com/TSINGSEE/p/15036105.html
Copyright © 2020-2023  润新知