EasyCVR平台基于云边端一体化架构,可支持多类型设备、多协议方式接入,包括市场主流标准协议国标GB/T28181、RTMP、RTSP/Onvif协议等,以及厂家私有协议如海康SDK、大华SDK、海康Ehome等。关于大华SDK的接入及配置方法,我们在前期的文章中也分享过很多,感兴趣的用户可以翻阅我们往期的文章进行了解。今天和大家分享我们在开发过程中遇到的问题及解决过程。
在EasyCVR中使用大华SDK接入设备的视频流,点击录像回看、播放录像回看视频。在关闭视频流时,有一定几率会出现崩溃现象。
于是我们针对设备录像出现的崩溃现象进行了分析和排查。
因为使用的是SDK方式接入,所以需要从大华SDK源码分析播放录像后关闭操作出现的崩溃问题。以下是打印的c 类的内存地址,如图:
在打印内存地址时,内存地址没有进行改变,所以内存地址不变。
但是在代码中却发现,将parse字段传入SDK中转换了LDWORD,所以转换的不是指针。在进行停止回看录像时,释放了parse的指针。如果录像流还有数据返回,那么进行转换并指向函数就会出现错误,导致指向的内存不存在,所以会出现崩溃现象。如下是转换的数据回调:
解决方法:
大华SDK回调的内存地址已经销毁,但是在回调时还是可以转换成功。只需要每次将parse的地址存到一个全局变量中。需要用的时候去取,销毁的时候执行删除即可。
全局变量:
向全局添加属性:
销毁全局变量:
EasyCVR平台可在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,可实现的视频功能包括:视频实时直播、云端录像、云存储、回放与检索、智能告警、视频快照、视频转码与分发、平台级联等。感兴趣的用户可以前往演示平台进行体验或部署测试。