一种大规模视频监控存储方法与流程

文档序号:13763796阅读:351来源:国知局
一种大规模视频监控存储方法与流程

本发明涉及一种大规模视频监控存储方法。



背景技术:

视频监控技术正向数字化、网络化、高清化方向发展,大规模视频监控应用日益普遍并快速增长,如何可靠地存储高速增加的原始视频构成新的挑战。对于几千路、上万路摄像头的监控系统,其存储规模可达PiB(250字节)级别;随着高清、超高清视频的逐步普及,存储规模会进一步增大;对于视频数据的存储,可以每路一个视频文件单独存放,也可以多路视频合并成一个文件存放。



技术实现要素:

为了克服已有视频监控存储方法的无法适用于大规模场合、处理大规模数据时定位快速性较差的不足,本发明提供了一种有效适用于大规模数据场合、定位快速性良好的大规模视频监控存储方法。

本发明解决其技术问题所采用的技术方案是:

一种大规模视频监控存储方法,所述存储方法包括写操作,所述写操作中,把一个多视频流合并后的数据块写入新建的数据文件“File1.dat”时,存储系统同时构建对应元数据并写入到元数据文件“File1.metadata”,将元数据文件分为A、B两部分,A部分空间是预分配空间,B部分空间是动态分配空间,采用索引方式;

设定系统支持的最大视频路数为M_max,数据文件“File1.dat”进行存储的视频路数为M_File1,数据文件总体大小为T,数据块为存储的最小单元,所占空间大小为τ,用S_i_j表示存储第i路的视频数据,视频数据大小占j个数据块,1<=i<=M_File1,1<=j<T/τ;

所述写操作包括如下过程:

1.1)往存储系统写入数据文件“File1.dat”并创建元数据文件“File1.metadata”;

1.2)根据系统配置,将系统支持的最大视频路数写入元数据A部分相应位置并分配元数据A部分空间,元数据A存放某一路视频在元数据B的偏移及视频流当前总字节数,元数据A开始部分为“最大路数”字段;

1.3)以追加形式写File1.metadata,

第一次为第i路视频数据构建元数据时,为视频S_i_j元数据分配索引所占空间,否则,根据索引确定要追加的视频S_i_j元数据对应的索引位置,将视频S_i_j元数据按数据块个数j,逐个将数据块存储地址追加到索引的空白索引条目;

在当前最高级索引块剩余的空白索引条目为零,且还有数据块存储地址未追加到最高级索引的时候,系统会在元数据文件追加一个新的最高级索引块,更新次高级索引指向新分配的最高级索引块;

在当前次高级索引块剩余的空白索引条目为零,当前最高级索引块剩余的空白索引条目为零,且还有数据块存储地址未追加到最高级索引的时候,系统会在元数据文件追加一个新的次高级索引块、一个新的最高级索引块,更新次次高级索引向新分配的次高级索引块,更新次高级索引指向新分配的最高级索引块;

1.4)更新元数据A,包括元数据B的偏移及视频流当前总字节数;

1.5)重复1.3)、1.4)步骤,直至数据文件对应元数据完全写入或索引条目达到最大值。

进一步,元数据B采用三级索引,设定一级索引条目数为N1,二级索引条目数为N2,三级索引条目数为N3,一级索引指向二级索引的存储地址,二级索引指向三级索引的存储地址,三级索引指向数据块存储地址,某一路视频存储大小最大为N1×N2×N3×τ;

所述步骤1.3)中,第一次为第i路视频数据构建元数据时,为视频S_i_j元数据分配一级、二级、三级索引所占空间,否则,根据一级、二级、三级索引确定要追加的视频S_i_j元数据对应的三级索引位置,将视频S_i_j元数据按数据块个数j,逐个将数据块存储地址追加到三级索引的空白索引条目;

在当前三级索引块剩余的空白索引条目为零,且还有数据块存储地址未追加到三级索引的时候,系统会在元数据文件追加一个新的三级索引块,更新二级索引指向新分配的三级索引块;

在当前二级索引块剩余的空白索引条目为零,当前三级索引块剩余的空白索引条目为零,且还有数据块存储地址未追加到三级索引的时候,系统会在元数据文件追加一个新的二级索引块、一个新的三级索引块,更新一级索引向新分配的二级索引块,更新二级索引指向新分配的三级索引块。

再进一步,所述存储方法还包括读操作,所述读操作包括如下步骤:

2.1)上层请求访问File1.dat第k路视频数据,第h个数据块;

2.2)系统根据元数据A部分的“最大路数”字段,判断第k路是否在“最大路数”范围内,否则返回“非法请求”。

所述读操作还包括如下步骤:

2.3)系统访问元数据A部分第k路视频对应的字段,判断字段内容是否为空,字段内容为空,说明未在元数据B中分配三级索引空间,该元数据文件不含第k路视频流数据,返回“找不到视频流”。

所述读操作还包括如下步骤:2.4)系统根据元数据A部分第k路视频对应的字段获知第k路视频的总字节数W,然后除以数据块大小τ,得出第k路视频只有W/τ个数据块,比较W/τ与h的大小,当h大于W/τ时,说明元数据文件不含第k路视频数据,第h个数据块,返回“数据请求越界”;

所述读操作还包括如下步骤:2.5)根据元数据设计的结构,推算出一级索引位置、二级索引位置、三级索引位置的单元位置保存了指向数据文件的指针,系统访问该单元,得知数据块在数据文件的位置,系统访问数据文件,返回结果给上层。

本发明的技术构思为:在对大规模视频监控系统的视频存储方法进行研究时,发现对前端视频流进行缓存合并后写入后端的存储系统(例如Hadoop HDFS),如设计合适的元数据存储方案,可以实现对数千、上万路视频流的存储并快速定位数据。

对于数千路视频流合并为一个文件的情形,如何快速定位某路视频的某段数据是一个关键问题。本发明使用元数据A、元数据B两类元数据管理视频数据。将元数据文件分为A、B两部分,A部分空间是预分配空间,其大小根据系统支持的最大视频路数分配空间,指明了某路视频元数据在B部分的起始位置,用于快速定位某路视频在元数据B的开始位置。B部分空间是动态分配空间,其大小与数据文件包含的视频路数及视频大小有关,主要存放索引数据,采用三级索引,用于定位某路视频某个数据块在文件内的位置。

采用三级索引的理由:假如每级索引条目数为10,每个数据块大小为32MiB,对于三级索引,一个视频文件内其中一路视频大小最大为32×10×10×10==32000MiB==31.25GiB,足以应付普通需求。可根据视频大小,调节索引级数。

本发明的有益效果主要表现在:有效适用于大规模数据场合、定位快速性良好。

附图说明

图1是多视频流合并后的数据块的示意图。

图2是元数据文件分为A、B两部分的示意图。

图3是元数据A设计的示意图。

图4是多级索引高层次原理图。

图5是三级索引下元数据文件(File1.metadata)的元数据分布图。

具体实施方式

下面结合附图对本发明作进一步描述。

参照图1~图5,一种大规模视频监控存储方法,包括写操作和读操作,所述写操作中,把一个多视频流合并后的数据块写入新建的数据文件“File1.dat”时,存储系统同时构建对应元数据并写入到元数据文件“File1.metadata”,将元数据文件分为A、B两部分,A部分空间是预分配空间,B部分空间是动态分配空间;

设定,系统支持的最大视频路数为M_max,数据文件“File1.dat”进行存储的视频路数为M_File1,数据文件总体大小为T,数据块为存储的最小单元,所占空间大小为τ,用S_i_j表示存储第i路的视频数据,视频数据大小占j个数据块,1<=i<=M_File1,1<=j<T/τ;

元数据B采用三级索引,设定一级索引条目数为N1,二级索引条目数为N2,三级索引条目数为N3,一级索引指向二级索引的存储地址,二级索引指向三级索引的存储地址,三级索引指向数据块存储地址。某一路视频存储大小最大为N1×N2×N3×τ;

所述写操作包括如下过程:

1.1)往存储系统写入数据文件“File1.dat”并创建元数据文件“File1.metadata”;

1.2)根据系统配置,将系统支持的最大视频路数写入元数据A部分相应位置并分配元数据A部分空间,元数据A存放某一路视频在元数据B的偏移及视频流当前总字节数,元数据A开始部分为“最大路数”字段;

1.3)以追加形式写File1.metadata,

第一次为第i路视频数据构建元数据时,为视频S_i_j元数据分配一级、二级、三级索引所占空间,否则,根据一级、二级、三级索引确定要追加的视频S_i_j元数据对应的三级索引位置,将视频S_i_j元数据按数据块个数j,逐个将数据块存储地址追加到三级索引的空白索引条目;

在当前三级索引块剩余的空白索引条目为零,且还有数据块存储地址未追加到三级索引的时候,系统会在元数据文件追加一个新的三级索引块,更新二级索引指向新分配的三级索引块;

在当前二级索引块剩余的空白索引条目为零,当前三级索引块剩余的空白索引条目为零,且还有数据块存储地址未追加到三级索引的时候,系统会在元数据文件追加一个新的二级索引块、一个新的三级索引块,更新一级索引向新分配的二级索引块,更新二级索引指向新分配的三级索引块;

1.4)更新元数据A,包括元数据B的偏移及视频流当前总字节数;

1.5)重复1.3)、1.4)步骤,直至数据文件对应元数据完全写入或索引条目达到最大值。

进一步,所述读操作包括如下步骤:

2.1)上层请求访问File1.dat第k路视频数据,第h个数据块;

2.2)系统根据元数据A部分的“最大路数”字段,判断第k路是否在“最大路数”范围内,否则返回“非法请求”;

2.3)系统访问元数据A部分第k路视频对应的字段,判断字段内容是否为空,字段内容为空,说明未在元数据B中分配三级索引空间,该元数据文件不含第k路视频流数据,返回“找不到视频流”;

2.4)系统根据元数据A部分第k路视频对应的字段获知第k路视频的总字节数W,然后除以数据块大小τ,得出第k路视频只有W/τ个数据块,比较W/τ与h的大小,当h大于W/τ时,说明元数据文件不含第k路视频数据,第h个数据块,返回“数据请求越界”;

2.5)根据元数据设计的结构,推算出一级索引位置、二级索引位置、三级索引位置的单元位置保存了指向数据文件的指针,系统访问该单元,得知数据块在数据文件的位置,系统访问数据文件,返回结果给上层。

第k路视频数据,第h个数据块,c=h-a×N3×N2-b×N3-1,为向下取整符号,a为一级索引位置、b为二级索引位置、c为三级索引位置。

对于数千路视频流合并为一个文件的情形,如何快速定位某路视频的某段数据是一个关键问题。本发明使用元数据A、元数据B两类元数据管理视频数据。元数据A用作快速定位某路视频在元数据B的开始位置,其查找的时间复杂度为Ο(1);而元数据B用作定位某路视频某个数据块在文件内的位置。

当系统把一个多视频流合并后的数据块(图1)写入新建的数据文件“File1.dat”时,存储系统同时构建对应元数据并写入到元数据文件“File1.metadata”。元数据文件分为A、B两部分(图2),A部分是预分配空间,指明了某路视频元数据在B部分的起始位置。A部分大小是根据系统支持的最大视频路数分配空间,视频流1占用1号位置、视频流3占用3号位置,不含某视频流的位置则为空(图3)。B部分空间主要存放索引数据,空间动态分配,其大小与数据文件包含的视频路数及视频大小有关。

为便于定位某路视频某个块的位置,我们使用多级索引(图4)。假如每级索引条目数为10,每个数据块大小为32MiB,对于三级索引,一个视频文件内其中一路视频大小最大为32×10×10×10==32000MiB==31.25GiB,足以应付普通需求。各路视频的各级索引均保存在一个元数据文件中,图5显示了索引的保存方法。

本实施例中,对本存储系统的读、写过程进行描述:

1.元数据首次写操作,过程如下:

1.1]往存储系统写入数据文件“File1.dat”(图1)并创建元数据文件“File1.metadata”

1.2]根据系统配置,将系统支持的最大视频路数写入元数据A部分相应位置并分配元数据A部分空间

假如File1.dat的首段是视频流1,那么系统在元数据A部分视频1的位置记录视频1在元数据B部分的起始位置,对于本示例,起始偏移相对于元数据B为0

1.3]以追加形式写File1.metadata,为视频流1分配索引所占空间(一级索引10个指针地址,二级索引10个地址,三级索引10个地址)。

1.4]更新一级索引位置0、二级索引位置0以及三级索引位置0~2的值,其中,三级索引指向的是真正存放数据的位置,对于本例子,是0、1、2;

元数据追加写操作:

①假设要追加的元数据是视频1b元数据

②系统根据当前视频1的大小(已有三个数据块,索引位置0~2)确定要追加的数据块为第四、第五块,因此通过一级索引位置 0、二级索引位置0定位到三级索引位置3、4,把第四、第五数据块的起始位置写到位置3、4内,对于本例,是17、18。

③假如追加的块是第十一块,则系统会在元数据文件追加一个三级索引块,然后由二级索引位置1指向新分配的块,然后再更新三级索引的内容。因此本设计支持动态数据追加。

所述读操作的过程如下:

A.超出范围:

[1]上层请求访问File1.dat第10001路

[2]系统根据元数据A部分的“最大路数”字段(假如内容为10000),比较得出请求越界,返回“非法请求”

B.找不到对应项:

[1]上层请求访问File1.dat第2路视频流

[2]系统访问元数据A部分视频2字段,发现字段内容为空,说明该文件不含第2路视频流数据,返回“找不到视频流”

C.数据请求越界:

[1]上层请求访问File1.dat第4路视频的第五个数据块的数据

[2]系统根据元数据A部分视频4字段获知第4路视频的总字节数,然后除以每块大小32MiB,得出第4路视频只有4个数据块,返回“数据请求越界”

D.合法访问:

[1]上层请求访问File1.dat第3路视频的第五个数据块的数据

[2]系统判断其为合法请求后,根据元数据设计的结构,推算出一级索引位置0、二级索引位置0、三级索引位置4的单元位置保存了指向数据文件的指针,系统访问该单元,得知数据块在数据文件的第9块(从0开始算),系统访问数据文件,返回结果给上层。

第3路视频数据,第5个数据块,c=5-a×10×10-b×10-1=4,为向下取整符号,a为一级索引位置、b为二级索引位置、c为三级索引位置。

图1是多视频流合并后的数据块的示意图。图2是元数据文件分为A、B两部分的示意图,元数据文件由A、B两部分组成。A为预分配,大小固定,用作直接定位索引起始位置;B主要是索引,视乎视频路数的多寡及每段视频的大小而变,内部每段长短亦可不同,用作定位数据位置。图3是元数据A设计的示意图。图4是多级索引高层次原理图,该图仅显示视频1的部分索引,加粗外框部分是当前已分配的索引块(共三个块)。视乎视频1数据的大小,二级索引最小有1个块、最大10个块,三级索引最小有1个块,最大有10×10==100个块。图5是三级索引下元数据文件(File1.metadata)的元数据分布图,其中,“视频1元数据”是指视频1当前的元数据分布,若视频1数据不断增加,二级索引与三级索引会相应增加。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1