牌照摄像机信息如下:
设备型号:DS-2CD9131-S
主控版本:V4.2.0 160816
编码版本:V4.2 build 160725
硬件版本:0x132100
通道数:1
在这个型号的摄像机上,没有配备硬盘录像机,摄像机也没有存储卡。
用C#+海康的SDK做二次开发,当过往车辆触发了拍照后,已经能够获取过往车辆的牌照和照片,也能够实时播放视频。
现在遇到的问题是,当摄像机发出识别的车牌和照片时,要马上能获取一个触发拍照前5秒到拍照当时的这一段视频,也就是说需要得到此时刻回退到5秒前的这段时间的视频,视频时长5秒,并用视频文件保存下来,请问如何实现?
参照 海康威视 SDK使用手册 录像功能
提个醒,之前做过海康威视的分屏监控,调用的sdk包,发现他们基于c#的包居然有内存泄漏,也就是你销毁它的屏幕对象后居然会有一百多k的泄漏,最后没办法只能每隔半天重新初始化sdk
这个我只能提供给你一个思路,相当于你要搞一个程序一直监控摄像头。每隔M秒比如10s或者某个大于5秒的时间间隔存储一下实时视频流,保存的视频流可以放到云端或者某个服务器上。但是可以只保存N次,比如10次(次数你自己设置)。大于N的次数就覆盖之前的。这样能保证能在拍摄下车牌后能找到拍摄前M*N(比如是
10*10
)就是100秒内的视频,这样就可以从云端或者服务器中找到你要的提前5s的视频,也能保证也就缓存100s左右的视频,空间也非常小也满足你的需求。有帮助请采纳,谢谢!
感谢各位的关注和帮助,这个技术问题我自己解决了。大概思路是这样的:
先定义一个byte数组,数组的大小要根据摄像机视频流的帧率、码率来确定好,大了的就记录更长的视频,小了就不足5秒。在实时视频流的回调函数里面,把视频流数据记录到这个byte数组,并且循环覆盖,循环覆盖是这里的核心思想。
当有拍照事件触发时,马上开启一个线程,复制这个byte数组,然后把复制的数组内容写入到文件,这就实现了记录回退5秒视频的目的,用这个办法效率比较高,而且内存耗费和硬盘耗费都很小。