您的位置:首页 > 其它

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

2015-09-13 22:53 106 查看
录像 和 录像搜索思考。

---- 关键是录像索引文件的管理,记录文件对应时间的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 等命令进行格式化,找不到录像数据以及录像索引文件。

可能还有一些地方没有想到的,后面再进行补充吧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: