录像 的一些思考总结--1

来源:互联网 发布:应届生求职软件知乎 编辑:程序博客网 时间:2024/06/05 00:08
录像 和 录像搜索思考。
---- 关键是录像索引文件的管理,记录文件对应时间的I帧的在硬盘分区中的偏移位置,考虑如果硬盘有坏道的情况,以及I帧率位置记录。




1、录像文件写入的思考:
如果通道开启录像,录像记录方式:
一个通道创建一个大的文件为4G,文件名称为通道号加上日期时间到分钟如01_201510212115.st(通道1,时间为2015-10-21:21:15分 ),
如果如果录像大于4G 再创建一个类似的文件。
文件offset 记录文件名次和视频名次前缀一样如01_201510212115.index,可以5s(也可以1s,10s 这个时间就是后面录像搜索的时间精度)记录一个该录像的文件偏移位置。
文件类型记录(在记录offset的时候 同时记录类型,如motion ,time)


01_201510212115.index记录格式如:
20151021211520_01_xxxx_ (xxxx 表示4个字节的2进制存放 ,表示文件的位置,加上\n 这样一行所以一共24字节)
如果觉得24字节太多可以把时间存储为2进制,去掉一些分隔符合等。
####################
bformat=0   0 表示没格式化,1表示被格式化
filesize=xxxx 表示对应录像文件的大小值
20151021211520_01_2EFE_  (分别是时间精确到秒,类型01如表示为定时,偏移位置 )
20151021211525_01_4A38_
20151021211530_01_6400_
20151021211535_02_6919_ (分别是时间精确到秒,类型02如表示为定时移动侦测,偏移位置)
##############


2、录像搜索方式:
比如查找 通道1 时间为2015-10-21-21点15分27s 录像类型为1 定时 开始的录像
a、先找到录像文件,录像文件时间的名称必须<= 当前搜索的时间点,因为录像文件名称的时间是往后面记录的,01_201510212115.st 。
b、同样找到对应的录像索引文件01_201510212115.index 
c、从01_201510212115.index 中找到和收缩时间最近但是大于等于搜索的时间的索引 这里是20151021211530_01_6400 
(关于这里的搜索可以先读取第一行 在根据5s一个索引 计算出下一次读取的位置,然后找到文件索引--但是有可能中间隔有断开录像,后面隔了几天进行录像,
那么还是记录在这个索引文件中,因为录像文件没有满4G,这样不能进行先读取第一行,根据时间来查找对应的时间索引,只能用其他算法(2分法)或者一行一行读取。)
d、找到索引后把索引的 录像类型,以及录像偏移位置都解析出来,可以根据类型来判断是否是要找到的录像类型。
e、根据录像文件偏移位置找到改录像,因为记录的时候都是I帧记录,所以把对应的I帧 读取出来 可以进行图像显示,
也可以把I帧率单独放在一个文件中来进行转图片,但是需要在索引中添加I帧的位置,方便查找。
f、如果对应位置的录像I帧读取失败,或者对应位置录像有坏块,那么重新在索引文件中查找下一条索引信息,依此类推。


3、硬盘格式化:
1、快速简单格式化---,实际数据没有被格式化,可以直接把录像索引文件删除,或者再索引文件中的filesize 写为0,或者做一些其他标记位置说明被格式化的文件(用于后续恢复数据)

2、完全格式化----硬盘的录像数据分区进行重新文件系统格式化,用mkfs 等命令进行格式化,找不到录像数据以及录像索引文件。


可能还有一些地方没有想到的,后面再进行补充吧

0 0
原创粉丝点击