因项目需要,要实现获取海康相机当前时间向前5秒钟之内的视频数据。我考虑了如下方案。
1.使用海康的硬盘录像机。
硬盘录像机中,自带了视频回放功能,也有sdk可以调用。但测试时发现,我在10:10:10时获取9:10:10到9:10:15的数据,能够成功,但是获取10:10:5到10:10:10的数据会失败。也就是说无法获取到最近5s内的视频数据。
2.在pc上实时保存视频数据。
要在硬盘上实时保存视频,每个5s保存一次。该方案,看似可以视频功能,经过测试发现有两个问题。首先我们不是只连接1台相机,而是20多台相机,同时录像的情况下,普通硬盘会长时间处于满负荷运行,整个机器的性能大幅下降,几乎不可操作。并且只能获得整数时间的视频数据,不方便获取任意时间内,5s的视频数据。
3.在内存中缓存视频数据。
通过海康相机的SDK,可以获取到视频数据,每隔很短的时间获取一个h264数据包,将数据包缓存在内存中,缓冲区内保存大约10s的视频数据,在需要的时候,可以随时将内存中的数据保存为视频文件。这种实现方式,刚好满足了项目需求,不会保存失败,并且由于数据保存在内存,只要内存足够大,运行的速度还是足够快的。