场景

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

排查过程

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

进入这个误区是之前,遇到云台无法控制的情况,通过更新官网最新的SDK,解决问题,并且只是重新链接了新的LIB文件,并没有替换掉现场的动态库DLL文件,解决问题。与此不同的是之前是根本无法控制云台。

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没有兼容性问题。因为流媒体需要授权的缘故,其实部署一套在其他的电脑上,就可以过滤掉这个兼容性问题

©著作权归作者所有:来自51CTO博客作者fengyuzaitu的原创作品,如需转载,请注明出处,否则将追究法律责任

你的赞赏是我请进的动力

赞赏

0人进行了赞赏支持

更多相关文章

  1. 《JS对象与流程控制》
  2. 算法——算法的时间与空间复杂度
  3. 【故障】dell G7 7588笔记本已安装声卡驱动无声音
  4. 第3章 0127-常用运算与流程控制,学心得、笔记(表达式、三元运算与n
  5. JS对象与流程控制
  6. 听说优秀的程序员20%的时间都在写UT?
  7. PHP指定时间戳加上1天,1周,1月
  8. SpringCloud 服务的平滑上下线
  9. 从博客时间轴总结这一年

随机推荐

  1. android TextView 文本过长时用滚动条显
  2. Android(安卓)viewPage notifyDataSetCha
  3. android:网路检测
  4. android 傻瓜式 MultiDex 插件,从此再也不
  5. 一个android参考网站,工具+源码
  6. minSdkVersion各个版本号对应android版本
  7. android源码下载-等待提示动画
  8. centos下安装adb环境
  9. android:inputType参数类型说明
  10. Android通过PHP连接MySQL(传值查询)