EasyCVR 视频融合云平台不仅支持多协议(标准协议与私有协议)、多类型设备的接入,而且还具备优秀的视频转码、播放、录像、回看、级联等能力,在很多实际场景中均有落地项目应用,如智慧工地、智慧安防、智慧工厂、智慧园区等。
去年我们研发团队已经完成EasyCVR对大华SDK的接入,用户可以通过 EasyCVR 对接大华设备实现视频直播、录像、回放、云台控制等操作。
近期,我们接到用户的反馈,使用 EasyCVR 添加大华 SDK 用来播放视频回放,播放出来等一段时间还是黑屏,并且前端页面提示“视频加载错误”。
本文我们就针对该问题分享一下排查及解决过程。
首先我们分析问题出现的原因,视频录像回放加载不出来,分析流程要分为如下2步:
1、分析 C++ 是否回放成功,数据是否回调。
排查该用户的 C++ 回放接口与调用,如图:
该段代码里有个数据回调 PlaybackDataCallBackCB,查看数据回调是否进去。在测试的过程中,C++ 的回调函数有数据,并且使用 ffplay 指令可以播放。这样则说明 C++ 没问题,那么接下来排查 Go 层的问题。
2、分析前端调用 Go 或者 Go 调用 C++ 是否有出现问题。
1)首先,需要找到回放的接口定义;
2)然后,在进入函数并打断点是否启动 C++ 回放接口调用;
排查发现在程序打断点的是 devObj.DeviceHandle,显示的是永远小于或者等于0。而这样设置则会导致程序回放失败。
3)再接着查看 devObj 的结构体的值,DeviceHandle 和 DahuaDeviceHandle 都是设备的句柄值。
因此针对上述问题,我们可以这样解决:
用户使用的是大华设备回放失败问题,则只需要判断大华设备的句柄值即可。
代码修改如下:
我们将不定期在文章中分享关于EasyCVR的功能开发与优化、代码技巧、FAQ疑难问题解决、场景方案等内容,欢迎关注我们的更新。