大华摄像机视频正常云台控制半分钟后失效排查记录

场景服务器

       现场后台流媒体服务器经过大华SDK取流和控制云台,视频流正常,云台控制在流媒体启动半分钟以内操做正常,半分钟以后控制失败。ide

排查过程函数

1)怀疑是大华SDK版本跟现场设备不匹配测试

进入这个误区是以前,遇到云台没法控制的状况,经过更新官网最新的SDK,解决问题,而且只是从新连接了新的LIB文件,并无替换掉现场的动态库DLL文件,解决问题。与此不一样的是以前是根本没法控制云台。this

2)添加SDK云台控制API的调用状况,查看错误码,没有相关的错误信息,而且发如今半分钟以后,没法收到任何的控制指令。排查是不是大华SDK调用阻塞致使的问题,可以正常返回,说明也不是阻塞的问题
操作系统

3)排查流媒体内部程序,云台控制指令的流向。流媒体的设计思路是启动一个线程等待客户端发送指令,其中调用C11的std::this_thread::sleep_for函数进行一段时间的休眠,发现半分钟以后休眠函数进入了阻塞模式,没法进行循环,采用Windows的原生态函数Sleep没有这个问题。这个时候考虑到是不是操做系统的版本问题,这个是2016版本的Windows Server DataCenter。怀疑是在该系统上执行该函数,兼容性有问题。在公司的虚拟机中安装测试,没有任何的问题,没法重现。线程

4)幸亏,能够远程,经过观察服务器的时间,发现服务器的时间存在跳变的问题。设置中启动了自动设置时间,可是没有设置NTP同步时间服务器。每半分钟会进行跳变,回到过去的某一个时间点,没有什么规律。设计

5)最终经过取消自动设置时间解决问题视频

总结部署

1)无论是boost仍是C11的休眠函数都存在相对睡眠时间的问题,针对的是系统的当前时间,Sleep就没有这个问题,Sleep函数不会根据系统的时间,猜想是根据程序的启动时间开始算

2)可以正常控制半分钟说明SDK没有兼容性问题。由于流媒体须要受权的缘故,其实部署一套在其余的电脑上,就能够过滤掉这个兼容性问题

相关文章
相关标签/搜索