嵌入式数字视频监控体系的数据存储策略

作者:Amteam.org
2008/3/24 17:27:00
本文关键字: 存储 方案 案例

1、 引言

随着高速宽带互联的普及和MPEG4编解码算法相关软硬件技能的成熟,视频监控体系逐渐从传统的模仿化走向了数字化、网络化。由此带来了诸多的技能革新,其中比拟 重要的一点是视频数据存储方面的提高。模仿体系时期通常应用磁带作为存储介质,在数据容量、保存时光等方面都有着固有的局限性。而在数字化体系中,应用硬盘构成的大范围存储单元完整能够满足海量数据长时光不间断继续存储的请求,从而成为视频监控体系的发展趋势。

数字视频监控体系的根本架构重要分为两大类。一种是以PC为核心,视频数据的编码由专用的编解码PCI卡来完成,存储体系构建于PC之上,由PC操作体系负责文件体系管理。另一种则是以嵌入式体系为核心的一体化数字硬盘录像机,由于具有体积小、一体化、可操作性强、存储量大、容易维护等长处,正被越来越多的用户所接受。但嵌入式体系有其自身的特色,如CPU速度慢、内存小等,尤其是在文件体系的支撑上可能与PC操作体系有很大的不同。因此在实现数据存储时必须要考虑到这些区别以及可能带来的影响,对于存在的某些问题如果无法通过修正文件体系本身特色来战胜的话,就须要精心设计上层的存储策略加以填补。

下面以一种已实现的基于vxWorks的嵌入式数据视频监控体系中的数据存储策略为 例进行讨论。

2、 数据存储的请求

在设计存储策略时,重要应注意以下几个方面:磁盘读写的高效性、视频数据的继续性、检索的快速精确性、数据一致性及可靠性、文件体系可拆卸性。

vxWorks中提供的文件体系包孕dosFs,rt11Fs,rawFs,tapeFs等。考虑到dosFs与MS-DOS的兼容性,一般用dosFs作为构建数据存储的根基。从dosFs文件体系本身的角度来说,重要存在以下几个问题:

首先,dosFs文件体系在异常断电时极易导致文件损坏,造成录像数据的丢失,这在视频监控体系中是比拟严重的问题。如果不及时反省损坏的文件而继续应用,会导致文件体系的不稳固,严重时甚至会影响分区表和根目录区从而造成文件体系的瓦解。如果在启动进程中对多个大硬盘上的文件体系进行反省将破费极长的时光,这与嵌入式体系对启动时光短的请求是相悖的。因此须要从存储策略上提供掩护机制避免这一问题。

其次,dosFs文件体系会产生磁盘碎片,在视频监控体系中由于存在多路视频数据同时写盘的情况,文件的不继续性尤为显明,这会在必定的水平上影响磁盘 IO操作的效力。虽然对视频数据进行MPEG4编码可以很好的把持数据流量,但一般也达到了单路300kbps以上的水平。当同时须要进行多路视频数据读写时,对磁盘IO操作效力的请求极高,往往在文件体系状况良好的情况下都难以满足。因此必须想办法在避免磁盘碎片产生的同时尽可能的提高磁盘IO操作的效力。

从视频监控使用本身来说,重要存在以下几个问题:

对于一个视频监控体系,其前端可以输入多路独立的视频源。不同的视频源可能会请求设置不同的录像时光段和录像数据保存时光。因此对不同的视频源应应用相互独立的存储区域,同时又要维持存储空间分配以及覆盖的灵巧性。另外,同一视频源的数据可能会具有不同的录像性质,例如定时自动录像、手动录像、报警录像等,甚至经常会 在同一录像时光段中出现不同的录像性质,所以还须要在尽可能节俭存储空间的情况下有效的反应出以上的区别。

在视频监控使用中,能快速精确地查找到所需数据以供处置是一个十分重要的特色。比拟有代表性的处置方式是对视频数据进行回放,请求提供除了正常速度播放之外 的快进、慢进、快退、慢退等功效,同时须要保证画面的视觉继续性。因此应该建立完 美的索引机制。

对于大范围的使用,挂接在体系中的硬盘无法保证100%的无故障率,另外可能偶 尔须要对体系中的某个或某些硬盘进行款式化操作。为了确保实时监控数据的完整性, 须要使得在出现磁盘故障或对部分磁盘进行款式化时体系仍然能够正常地存储,而不用 关机或重启。那么存储策略的设计就必须考虑文件体系对单个硬盘的独立性,即文件体 系对单个硬盘的可拆卸性。


3、 存储策略的设计

3.1 采纳预分配空间存储方式

每个新硬盘在开端存储之前都要先进行预初始化,遵照指定的大小预先创立若干空文件,进行数据存储时按需从空文件池中得到一个文件句柄然后开端进行写入操作。这样每一个文件的簇链表在数据写入前就确定下来,写入操作只改写数据,不影响簇链表的构造,当异常断电时只是丢失当前正在写盘的数据,文件的一致性得以保存,不会造成文件的损坏。

3.2 采纳继续文件存储方式

每个文件在创立时分配一组物理上继续的簇,这样可以防止产生磁盘碎片,缩减硬盘寻道时光,加快硬盘读写速度。创立固定大小的继续文件是比拟消耗时光的一项操作,因此应放在后台完成,这样可以避免影响到要害责任的实行。

3.3 采纳帧索引方式

对视频数据的要害帧(I帧)进行索引,记录每一个I帧的地位、时光、长度,这样可以对视频数据进行精确的定位、回放和把持。

3.4 采纳文件索引方式

对每一个硬盘建立一个文件索引表,记录每个文件中的信息(文件索引号、录像类型、录像时光段个数等等)以及文件中的每个录像时光段的信息(数据地位及长度、帧索引地位及长度、起止时光等等),并且在内存中维持一个文件索引表的镜像,这样可以对所有硬盘上的文件进行快速的查找、检索,同时实现了文件体系对单个硬盘的独立性。

4、 存储策略的实现

4.1 文件帧索引构造

这里须要说明的是帧索引的概念。一般来说,经过MPEG4编码后的视频数据中包孕I帧、B帧、P帧;同时,在进行解码时能被处置的最小数据单位也是帧。要实现流畅的快进、快退、慢进、慢退等功效就必须能逐帧的查找传送数据,因此有必要建立帧索引记录。在每个文件的数据区后面紧跟着寄存该文件相应的帧索引记录信息可以将帧索引与视频数据有机的联合在一起,同时也可以使各数据文件相对独立。

在具体的实现中,我们将每个文件的大小设为256M+512K字节,前256M为数据区,后512K为帧索引区,这样在512kbit码率的条件下,一个文件大约可以存储60分钟的视频数据。具体的帧索引构造如下:

typedef struct _frame_index

{ unsigned int flag; /*有效性标志*/

unsigned int offset; /*偏移地位*/

unsigned int frame_len; /*帧长*/

unsigned int time; /*达到时光(秒)*/

unsigned int time_ms; /*达到时光(毫秒)*/

}FRAME_INDEX;

在创立空文件时帧索引区被置零,在异常断电后可以根据帧索引区的有效性标志断定文件最后写入数据的地位和时光,从而快速地修复文件索引表。

4.2 文件索引表构造

录像时光段数据构造FRAGMENT_INFO的定义如下:

typedef struct

{ unsigned int start_time; /*起始时光*/

unsigned int end_time; /*停止时光*/

unsigned int data_start_offset; /*数据起始地位*/

unsigned int data_end_offset; /*数据停止地位*/

unsigned int index_start_offset; /*帧索引起始地位*/

unsigned int index_end_offset; /*帧索引停止地位*/

}FRAGMENT_INFO;

录像文件数据构造FILE_INFO的定义如下:

typedef struct

{

BOOL used; /*有效性标志*/

unsigned int serial_number; /*索引号*/

unsigned int channel; /*录像通道*/

unsigned int record_type; /*录像类型*/

unsigned int fragment_num; /*录像时光段个数*/

FRAGMENT_INFO fragment_info[]; /*录像时光段信息*/

} FILE_INFO;

文件索引表构造DISK_INFO的定义如下:

typedef struct

{

BOOL used; /*硬盘有效性标志*/

unsigned long freeMbytes; /*硬盘剩余空间*/

unsigned long totalMbytes; /*硬盘总空间*/

unsigned int max_file_num; /*最大文件数*/

unsigned char file_exist[4096]; /*文件存在标志*/

FILE_INFO file_info[]; /*录像文件信息*/

}DISK_INFO;


4.3 具体实现

体系上电落后行硬盘初始化时,依次反省每个IDE接口,对于存在的硬盘获取其总容量、剩余容量等信息,按总容量以及预设的空文件大小计算出其最多可存储的文件数量。然后在该硬盘上查找索引信息文件index.dat。如果失败,说明该硬盘上没有寄存有效数据,则遵照之前计算所得文件大小在硬盘上分配一个继续空间给index.dat,并开端进行上文所说的创立空文件的工作。在这一进程中,生成的所有空文件的相应FILE_INFO构造中的channel域都被置为0xff,表现不与任何视频输入源关联,将被放入空文件池中。如果查找index.dat胜利,则读出全体内容,得到该硬盘上所有文件的信息,遍历每个文件信息中的最后一个时光段构造,可以断定该文件末端数据是否被损坏,以及是否还有足够的空间写入新数据。对于末端数据被损坏的文件,通过查找其帧索引区回溯到最后一帧正常数据,相应地更新最后一个时光段构造中各域值,完成修复。若还有足够的空间写入新数据,则作为对应于该录像通道的当前存储文件打开以备写入。在对每个挂接到装备的硬盘依次做完同样的操作之后,预初始化工作就算完成了。

体系正常运行时创立两个后台守护进程,一个用于将编码数据写入硬盘;另一个用于定时反省硬盘状况和文件相关状况,确保当前写入数据的文件以及硬盘有足够的空间,必要时进行文件或者硬盘的切换。每得到一帧编码完毕的数据,就分别往视频输入源特定的两个新闻队列中发送新闻,指明该帧数据在编码缓冲区中的偏移、长度以及时光信息,在记录视频数据的同时更新相关的数据索引和帧索引部分。由于数据相关的帧信息随文件存储,因此在读取文件、查找数据、解码播放时都可以便利的以帧为单位进行,大大提高了索引精确度以及在数据回放中进行速度切换等操作时的图像流畅性。

从上面的讨论可以看出,基于此存储策略的所有操作相对于硬盘而言都是独立的。因此可以便利地停滞或开端某个指定硬盘上的文件存储,而不用担忧导致数据纷乱或索引失效。这样就可以保证在部分硬盘无法用于正常存储时不用关机或重启,避免了当前所监控的视频数据丢失。

5、 结语

我们在嵌入式数字视频监控体系中实现了该存储策略,CPU为主频200MHZ的RISC芯片,操作体系为vxWorks。硬盘存储子体系相对独立,接口简略,子体系单独运行时硬盘读写速度在35Mbit/s以上,全体体系在总和20Mbit/s的视频编码数据输入、存储并网络输出这样的苛刻条件下工作稳固可靠,收到了很好的效果。

参考文献

[1] 孔祥营 柏桂枝 “嵌入式实时操作体系VxWorks及其开发环境Tornado” 中国电

力出版社 2002

[2] Wind River Systems,Inc , “Tornado Device Driver Workshop ”

http://www.windriver.com/training1999

[3] Daniel Robbins,“Software RAID in the Linux 2.4 kernel”

http://www-900.ibm.com/developerWorks/cn/linux/filesystem/raid12001

[4] Daniel Robbins,“Advanced filesystem implementors guide”

责编:
vsharing 微信扫一扫实时了解行业动态
portalart 微信扫一扫分享本文给好友
著作权声明:kaiyun体育官方人口 文章著作权分属kaiyun体育官方人口 、网友和合作伙伴,部分非原创文章作者信息可能有所缺失,如需补充或修改请与我们联系,工作人员会在1个工作日内配合处理。
最新专题
流动存储 为大数据而生

伴随信息技术的突飞猛进,更大量级的非结构化数据与结构化数据构成的大数据成为企业级存储所面临的最大挑战:一方..

磁盘阵列及虚拟化存储

利用数组方式来作磁盘组,配合数据分散排列的设计,提升数据的安全性。虚拟化存储,对存储硬件资源进行抽象化表现。

    畅享
    首页
    返回
    顶部
    ×
    畅享IT
      信息化规划
      IT总包
      供应商选型
      IT监理
      开发维护外包
      评估维权
    客服电话
    400-698-9918
    Baidu
    map