CN112380383A - 一种实时视频流数据的高效容错索引方法 - Google Patents
一种实时视频流数据的高效容错索引方法 Download PDFInfo
- Publication number
- CN112380383A CN112380383A CN202011254908.7A CN202011254908A CN112380383A CN 112380383 A CN112380383 A CN 112380383A CN 202011254908 A CN202011254908 A CN 202011254908A CN 112380383 A CN112380383 A CN 112380383A
- Authority
- CN
- China
- Prior art keywords
- data block
- index
- file
- time
- index data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/70—Information retrieval; Database structures therefor; File system structures therefor of video data
- G06F16/71—Indexing; Data structures therefor; Storage structures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Multimedia (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Television Signal Processing For Recording (AREA)
- Signal Processing For Digital Recording And Reproducing (AREA)
Abstract
本发明提供一种实时视频流数据的高效容错索引方法,包括以下步骤:配置存储系统;接收实时视频流,通过纠编码算法分割为多个定长的数据块;将各个数据块分布式存储到各个存储设备的硬盘中的视频数据文件中;将每个数据块的存储位置信息存储到索引数据块中。索引数据块采用定长度特殊设计。本发明提供一种实时视频流数据的高效容错索引方法,针对实时视频流数据创建索引文件,并基于索引文件进行高效的读取视频数据,从而提高视频数据读取的响应速度,可应用于安防存储领域。
Description
技术领域
本发明属于索引数据结构设计技术领域,具体涉及一种实时视频流数据的高效容错索引方法。
背景技术
随着智慧城市的快速发展,企业、政务等对实时视频流数据的存储需求日益增长。目前,实时视频流数据存储解决方案大多采用通用存储系统。通用存储系统对实时视频流数据的存入和读取采用顺序方式,其时间复杂度为O(n),在多路视频流数据并发读取或者读取确定时间的数据时,数据响应速度不高,导致用户体验较差。
发明内容
针对现有技术存在的缺陷,本发明提供一种实时视频流数据的高效容错索引方法,可有效解决上述问题。
本发明采用的技术方案如下:
本发明提供一种实时视频流数据的高效容错索引方法,包括以下步骤:
步骤1,配置存储系统;所述存储系统具有N个存储设备,分别为:存储设备C1,存储设备C2,...,存储设备CN;
步骤2,预设置视频数据处理单元的视频数据量Q0;
步骤3,令i=1;
步骤4,接收实时视频流,每当接收到视频数据量为Q0的视频数据处理单元Bi时,将所述视频数据处理单元Bi通过纠编码算法分割为N个定长的数据块,分别为:数据块Si1,数据块Si2,...,数据块SiN,同时,为每个数据块赋值相同的序列号,为i;为每个数据块赋予相同的时间戳,为Ti;
步骤5,将数据块Si1,数据块Si2,...,数据块SiN分布式存储于各个存储设备的硬盘中的视频数据文件中,即:将数据块Si1存储到存储设备C1的硬盘中的视频数据文件系统W1中,将数据块Si2存储到存储设备C2的硬盘中的视频数据文件系统W2中,...,将数据块SiN存储到存储设备CN的硬盘中的视频数据文件系统WN中;
其中,对于任意的数据块Sij,其中,j=1,2,...,N,采用以下方式存储到存储设备Cj的硬盘中的视频数据文件系统Wj中:
存储设备Cj的硬盘中的视频数据文件系统Wj由多个视频数据文件组成;首先判断视频数据文件系统Wj中当前最新的视频数据文件wnew是否已达到预设的文件生命周期;如果没有达到,则按时序将数据块Sij存储到视频数据文件wnew中;如果达到,则在硬盘中创建一个新的视频数据文件w'new,视频数据文件w'new具有时间段属性[t1,t1+ΔT],其中,t1为视频数据文件w'new创建时间,ΔT为视频数据文件w'new生命周期;然后将数据块Sij存储到视频数据文件w'new中;
步骤6,存储设备Cj上创建的每个索引文件与视频数据文件具有相同的文件生命周期;因此,每当在存储设备Cj上创建一个新的视频数据文件w'new时,同时创建一个新的索引文件Su'new,其中,索引文件Su'new具有时间段属性[t2,t2+ΔT],其中,t2为索引文件Su'new创建时间;其中,t2和t1相同;
步骤7,对于每个数据块Sij,在将其存储到对应的存储设备Cj的硬盘中的视频数据文件中后,读取内存中的索引数据块,假设当前为索引数据块Sk0,判断索引数据块Sk0是否达到指定时长,如果达到,则执行步骤8-步骤9;如果没有达到,预设置每个索引数据块的长度相等,均为L0,假设索引数据块Sk0当前长度为L1,判断索引数据块Sk0剩余长度L0-L1是否小于设定阈值ε,如果不小于,则执行步骤10;如果小于,则执行步骤8-步骤9;
步骤8,向索引数据块Sk0的填充区域填充字段,以使填充后的索引数据块Sk0长度达到L0-ΔL;其中,ΔL为CRC的长度;然后,计算索引数据块Sk0的CRC,并写入到CRC校验区域,由此生成完整的定长度为L0的索引数据块Sk0;
再将得到的索引数据块Sk0按时序追加保存到存储设备Cj硬盘上面当前最新的索引文件中;具体方法为:
对于当前最新的索引文件,表示为索引文件Sunew;判断索引文件Sunew大小是否为索引数据块定长度L0的整数倍,如果是,则将索引数据块Sk0追加到索引文件Sunew尾部;否则,表明索引文件Sunew出现异常,删除索引文件Sunew尾部的索引数据块Sk2,其中,索引数据块Sk2的大小必然不是索引数据块定长度L0的整数倍,然后,再将索引数据块Sk0追加到索引文件Sunew尾部;然后执行步骤9;
步骤9,按索引数据块创建规则,在内存中创建一个新的索引数据块Sk1,索引数据块Sk1具有以下结构:头部区域、尾部区域、CRC校验区域、时间段区域、填充区域、保留区域以及数据区域;其中,头部区域具有头部字段;尾部区域具有尾部字段;时间段区域具有时间段字段;数据区域配置三种字段,分别为:数据块序列号、数据块在视频数据文件中的存储偏移量以及数据块存储占用长度;
在初始创建索引数据块Sk1时,给时间段字段赋值为[t0,t0+Δt];其中,t0为时间戳Ti;Δt为预设时间段长度,为固定设置值;
然后,向索引数据块Sk1中写入数据块Sij的序列号、数据块Sij在视频数据文件中的存储偏移量以及数据块Sij存储占用长度;然后,执行步骤9;
步骤10,令i=i+1,返回步骤4,对继续接收到的下一个实时的视频数据处理单元进行数据块切分、数据块存储以及数据块索引内容存储的操作。
优选的,索引数据块的头部字段和尾部字段,采用特殊字符串标记。
优选的,还包括:
步骤11,当需要查找指定时间t0的视频数据时,在指定索引文件中使用二分法查找,定位到与指定时间t0对应的索引数据块Sk,再根据索引数据块Sk确定与指定时间t0关联的视频数据存储位置,最后根据视频数据存储位置查找存储设备硬盘中的视频数据文件系统,获得指定时间t0的视频数据。
优选的,步骤11具体为:
步骤11.1,当需要查找指定时间t0的视频数据时,并行查找存储设备C1,存储设备C2,...,存储设备CN,得到存储设备C1上与指定时间t0对应的数据块序列P1,存储设备C2上与指定时间t0对应的数据块序列P2,...,存储设备CN上与指定时间t0对应的数据块序列PN;
其中,对于任意存储设备Cu,u=1,2,...,N,采用以下方法得到与存储设备Cu对应的数据块序列Pu:
步骤11.1.1,存储设备Cu的硬盘具有索引文件系统,所述索引文件系统由多个索引文件按时序排列组成;并且,每个索引文件的时间段属性显示于该索引文件的名称中;索引文件的时间段属性表示该索引文件中存储的索引数据块的索引时间范围;
步骤11.1.2,根据指定时间t0确定索引文件的时间段属性,再根据索引文件的时间段属性确定索引文件的名称,通过索引文件的名称直接读取对应的索引文件,将读取到的索引文件表示为Su1;
步骤11.1.3,索引文件Su1由多个索引数据块按时序排列组成,设共有x个索引数据块,按时序排列分别为:索引数据块Sk11,索引数据块Sk12,...,索引数据块Sk1x;
步骤11.1.4,读取并解析索引数据块Sk11,得到其时间段字段,表示为[t10,t11],将t10赋值给low;
读取并解析索引数据块Sk1x,得到其时间段字段,表示为[t20,t21],将t21赋值给high;
步骤11.1.5,判断以下不等式是否成立:high≥low,如果不成立,则查找失败,无法查找到指定时间t0的视频数据;否则,计算mid=(high+low)/2;
步骤11.1.6,判断指定时间t0是否小于mid,如果是,读取low对应的索引数据块到high对应的索引数据块之间位于中间位置的中间索引数据块,并解析中间索引数据块,得到其时间段字段,表示为[t30,t31],并将t31赋值给high;然后返回步骤11.1.5;否则,执行步骤11.1.7;
步骤11.1.7,判断指定时间t0是否等于mid,如果否,则读取low对应的索引数据块到high对应的索引数据块之间位于中间位置的中间索引数据块,并解析中间索引数据块,得到其时间段字段,表示为[t30,t31],并将t31赋值给low;然后返回步骤11.1.5;如果是,执行步骤11.1.8;
步骤11.1.8,读取中间索引数据块,获得中间索引数据块记录的所有数据块的属性,包括:数据块序列号、数据块在视频数据文件中的存储偏移量以及数据块存储占用长度;
步骤11.1.9,根据步骤11.1.8得到的数据块的属性,查找存储设备Cu的视频数据文件,获得各个数据块,形成对应的数据块序列Pu:
步骤11.2,在获得数据块序列P1,数据块序列P2,...,数据块序列PN后,采用纠编码算法,恢复得到与指定时间t0对应的视频数据。
优选的,解析索引数据块Sk11、解析索引数据块Sk1x和解析中间索引数据块的方式相同,均采用以下方式解析:
判断索引数据块头部标记是否存在,如果不存在,则得出索引数据块无效的结论;如果存在,则进一步判断索引数据块尾部标记是否存在,如果不存在,则得出索引数据块无效的结论;如果存在,则进一步计算CRC,并与索引数据块中保存的CRC进行比对,如果不一致,则得出索引数据块无效的结论;如果一致,则得出索引数据块有效的结论;
当得出索引数据块无效的结论时,采用该索引数据块的相邻索引数据块代替,重新进行解析。
本发明提供的一种实时视频流数据的高效容错索引方法具有以下优点:
本发明提供一种实时视频流数据的高效容错索引方法,针对实时视频流数据创建索引文件,并基于索引文件进行高效的读取视频数据,从而提高视频数据读取的响应速度,可应用于安防存储领域。
附图说明
图1为本发明提供的一种实时视频流数据的高效容错索引方法的流程示意图。
具体实施方式
为了使本发明所解决的技术问题、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
针对现有技术中存在的实时视频流数据响应速度不高、读取时速度不高的问题,本发明提供一种实时视频流数据的高效容错索引方法,尤其设计了一种针对实时视频流数据的高效容错的索引数据结构,针对实时视频流数据创建索引文件,并基于索引文件进行高效的读取视频数据,从而提高视频数据读取的响应速度,可应用于安防存储领域。
具体的,本发明提供一种实时视频流数据的高效容错索引方法,首先将视频流数据分割为多个定长的数据块,将数据块分布式存储于各个存储设备的视频数据文件中;再将数据块在视频数据文件中的存储位置作为索引信息,记录到索引数据块,每个索引数据块只记录指定时间范围的数据块索引信息,因此,当索引数据块记录达到指定长度时,按时序保存到索引文件中。最后,通过二分法查找索引文件,可快速定位到指定时间对应的数据块存储位置信息,从而将查找指定时间视频数据的时间复杂度从O(n)降到O(logn),提高了多路视频流并发读取以及高倍速回放时的数据响应速度,提升了用户体验。同时,采用定长度的索引数据块记录数据块存储位置信息,可将错误影响范围限制在一个比较小的范围,解决了索引数据块记录的索引数据异常时整个视频数据文件无法正常读取的问题。
本发明具有以下特点:
(1)通过采用索引数据定长度的方式,索引文件最终存储多个定长度的索引数据块,,同时对定长的索引数据块基于时间排列,在读取时采用二分法进行查找,能够快速定位到指定时间对应的索引数据块,再根据定位到的索引数据块存储的数据块存储位置,可快速查到到对应的数据块,具有数据块查找效率高的优点;
(2)使用索引数据块方式,将错误影响范围限制在一个比较小的范围,解决了索引数据异常时整个视频数据文件无法正常读取的问题。
参考图1,本发明提供的一种实时视频流数据的高效容错索引方法,包括以下步骤:
步骤1,配置存储系统;所述存储系统具有N个存储设备,分别为:存储设备C1,存储设备C2,...,存储设备CN;
步骤2,预设置视频数据处理单元的视频数据量Q0;
步骤3,令i=1;
步骤4,接收实时视频流,每当接收到视频数据量为Q0的视频数据处理单元Bi时,将所述视频数据处理单元Bi通过纠编码算法分割为N个定长的数据块,分别为:数据块Si1,数据块Si2,...,数据块SiN,同时,为每个数据块赋值相同的序列号,为i;为每个数据块赋予相同的时间戳,为Ti;
步骤5,将数据块Si1,数据块Si2,...,数据块SiN分布式存储于各个存储设备的硬盘中的视频数据文件中,即:将数据块Si1存储到存储设备C1的硬盘中的视频数据文件系统W1中,将数据块Si2存储到存储设备C2的硬盘中的视频数据文件系统W2中,...,将数据块SiN存储到存储设备CN的硬盘中的视频数据文件系统WN中;
其中,对于任意的数据块Sij,其中,j=1,2,...,N,采用以下方式存储到存储设备Cj的硬盘中的视频数据文件系统Wj中:
存储设备Cj的硬盘中的视频数据文件系统Wj由多个视频数据文件组成;首先判断视频数据文件系统Wj中当前最新的视频数据文件wnew是否已达到预设的文件生命周期;如果没有达到,则按时序将数据块Sij存储到视频数据文件wnew中;如果达到,则在硬盘中创建一个新的视频数据文件w'new,视频数据文件w'new具有时间段属性[t1,t1+ΔT],其中,t1为视频数据文件w'new创建时间,ΔT为视频数据文件w'new生命周期;然后将数据块Sij存储到视频数据文件w'new中;
步骤6,存储设备Cj上创建的每个索引文件与视频数据文件具有相同的文件生命周期;因此,每当在存储设备Cj上创建一个新的视频数据文件w'new时,同时创建一个新的索引文件Su'new,其中,索引文件Su'new具有时间段属性[t2,t2+ΔT],其中,t2为索引文件Su'new创建时间;其中,t2和t1相同;
步骤7,对于每个数据块Sij,在将其存储到对应的存储设备Cj的硬盘中的视频数据文件中后,读取内存中的索引数据块,假设当前为索引数据块Sk0,判断索引数据块Sk0是否达到指定时长,如果达到,则执行步骤8-步骤9;如果没有达到,预设置每个索引数据块的长度相等,均为L0,假设索引数据块Sk0当前长度为L1,判断索引数据块Sk0剩余长度L0-L1是否小于设定阈值ε,如果不小于,则执行步骤10;如果小于,则执行步骤8-步骤9;
步骤8,向索引数据块Sk0的填充区域填充字段,例如,填充0x00,以使填充后的索引数据块Sk0长度达到L0-ΔL;其中,ΔL为CRC的长度;然后,计算索引数据块Sk0的CRC,并写入到CRC校验区域,由此生成完整的定长度为L0的索引数据块Sk0;
再将得到的索引数据块Sk0按时序追加保存到存储设备Cj硬盘上面当前最新的索引文件中;具体方法为:
对于当前最新的索引文件,表示为索引文件Sunew;判断索引文件Sunew大小是否为索引数据块定长度L0的整数倍,如果是,则将索引数据块Sk0追加到索引文件Sunew尾部;否则,表明索引文件Sunew出现异常,可能为异常宕机等因素引起上一次索引数据块中部分数据未写入索引文件,从而导致索引文件异常,此时,删除索引文件Sunew尾部的索引数据块Sk2,其中,索引数据块Sk2的大小必然不是索引数据块定长度L0的整数倍,然后,再将索引数据块Sk0追加到索引文件Sunew尾部;追加的方式保证了索引文件基于时间顺序存储各个索引数据块,从而可以在查找索引文件中指定的索引数据块时,可采用二分法查找。
对于索引文件中出现异常的索引数据块,即:不是索引数据块定长度L0整数倍的索引数据块,本发明只需要在索引文件中删除异常索引数据块,但异常索引数据块对应的存储于视频数据文件中的数据块并不需要进行删除处理,此种方式可作为今后数据恢复。
然后执行步骤9;
步骤9,按索引数据块创建规则,在内存中创建一个新的索引数据块Sk1,索引数据块Sk1具有以下结构:头部区域、尾部区域、CRC校验区域、时间段区域、填充区域、保留区域以及数据区域;其中,头部区域具有头部字段;尾部区域具有尾部字段;时间段区域具有时间段字段;数据区域配置三种字段,分别为:数据块序列号、数据块在视频数据文件中的存储偏移量以及数据块存储占用长度;
索引数据块的结构如下表所示:
在初始创建索引数据块Sk1时,给时间段字段赋值为[t0,t0+Δt];其中,t0为时间戳Ti;Δt为预设时间段长度,为固定设置值;
索引数据块的头部字段和尾部字段,采用特殊字符串标记。
索引数据块定长度,优点为:定长的索引数据块作为一种校验条件,可以识别索引文件是否正确;另外,CRC校验可以识别索引数据块内容的正确与否。在出现错误的情况下,定长的索引数据块将错误限制在其自身范围内,将错误的影响范围大大减小,提高了整个系统的可靠性。
然后,向索引数据块Sk1中写入数据块Sij的序列号、数据块Sij在视频数据文件中的存储偏移量以及数据块Sij存储占用长度;然后,执行步骤9;
步骤10,令i=i+1,返回步骤4,对继续接收到的下一个实时的视频数据处理单元进行数据块切分、数据块存储以及数据块索引内容存储的操作。
在读取指定时间(请求读取时间记为t0)视频数据时,根据索引文件可以快速定位到期望时间关联的视频数据位置,从而提高了数据响应速度,其过程如下:
步骤11,当需要查找指定时间t0的视频数据时,在指定索引文件中使用二分法查找,定位到与指定时间t0对应的索引数据块Sk,再根据索引数据块Sk确定与指定时间t0关联的视频数据存储位置,最后根据视频数据存储位置查找存储设备硬盘中的视频数据文件系统,获得指定时间t0的视频数据。
步骤11具体为:
步骤11.1,当需要查找指定时间t0的视频数据时,并行查找存储设备C1,存储设备C2,...,存储设备CN,得到存储设备C1上与指定时间t0对应的数据块序列P1,存储设备C2上与指定时间t0对应的数据块序列P2,...,存储设备CN上与指定时间t0对应的数据块序列PN;
其中,对于任意存储设备Cu,u=1,2,...,N,采用以下方法得到与存储设备Cu对应的数据块序列Pu:
步骤11.1.1,存储设备Cu的硬盘具有索引文件系统,所述索引文件系统由多个索引文件按时序排列组成;并且,每个索引文件的时间段属性显示于该索引文件的名称中;索引文件的时间段属性表示该索引文件中存储的索引数据块的索引时间范围;
步骤11.1.2,根据指定时间t0确定索引文件的时间段属性,再根据索引文件的时间段属性确定索引文件的名称,通过索引文件的名称直接读取对应的索引文件,将读取到的索引文件表示为Su1;
步骤11.1.3,索引文件Su1由多个索引数据块按时序排列组成,设共有x个索引数据块,按时序排列分别为:索引数据块Sk11,索引数据块Sk12,...,索引数据块Sk1x;
步骤11.1.4,读取并解析索引数据块Sk11,得到其时间段字段,表示为[t10,t11],将t10赋值给low;
读取并解析索引数据块Sk1x,得到其时间段字段,表示为[t20,t21],将t21赋值给high;
步骤11.1.5,判断以下不等式是否成立:high≥low,如果不成立,则查找失败,无法查找到指定时间t0的视频数据;否则,计算mid=(high+low)/2;
步骤11.1.6,判断指定时间t0是否小于mid,如果是,读取low对应的索引数据块到high对应的索引数据块之间位于中间位置的中间索引数据块,并解析中间索引数据块,得到其时间段字段,表示为[t30,t31],并将t31赋值给high;然后返回步骤11.1.5;否则,执行步骤11.1.7;
步骤11.1.7,判断指定时间t0是否等于mid,如果否,则读取low对应的索引数据块到high对应的索引数据块之间位于中间位置的中间索引数据块,并解析中间索引数据块,得到其时间段字段,表示为[t30,t31],并将t31赋值给low;然后返回步骤11.1.5;如果是,执行步骤11.1.8;
步骤11.1.8,读取中间索引数据块,获得中间索引数据块记录的所有数据块的属性,包括:数据块序列号、数据块在视频数据文件中的存储偏移量以及数据块存储占用长度;
步骤11.1.9,根据步骤11.1.8得到的数据块的属性,查找存储设备Cu的视频数据文件,获得各个数据块,形成对应的数据块序列Pu:
步骤11.2,在获得数据块序列P1,数据块序列P2,...,数据块序列PN后,采用纠编码算法,恢复得到与指定时间t0对应的视频数据。
在以上过程中,解析索引数据块Sk11、解析索引数据块Sk1x和解析中间索引数据块的方式相同,均采用以下方式解析:
判断索引数据块头部标记是否存在,如果不存在,则得出索引数据块无效的结论;如果存在,则进一步判断索引数据块尾部标记是否存在,如果不存在,则得出索引数据块无效的结论;如果存在,则进一步计算CRC,并与索引数据块中保存的CRC进行比对,如果不一致,则得出索引数据块无效的结论;如果一致,则得出索引数据块有效的结论;
当得出索引数据块无效的结论时,采用该索引数据块的相邻索引数据块代替,重新进行解析。
下面介绍一个实施例:
本实施例中索引数据应用的系统环境为多个嵌入式节点组成分布式存储系统,其容错策略采用纠删码方案,其冗余级别为n+m。其中每个嵌入式节点在一个周期存储1份分片数据块,针对这些分片数据块,生成并存储本申请中所述的索引文件。具体步骤如下:
步骤一:现有摄像机一台,其ID为00312,共有N个嵌入式节点,每个嵌入式节点即为一台存储设备,用于存储该摄像机视频流数据的一份纠删码,其纠删码编号为1。预设定每个数据块长度为2048字节,使用序列号标识同一块视频数据处理单元的不同分片数据;
步骤二:预设置视频数据处理单元的视频数据量为12KB;每当接收到12KB的视频数据处理单元时,对视频数据处理单元通过纠编码算法分割为N个定长的数据块,分别为:数据块Si1,数据块Si2,...,数据块SiN;并且,每个数据块具有相同的时间戳和序列号;
步骤三:将数据块Si1存储到存储设备C1的硬盘中的视频数据文件系统W1中,将数据块Si2存储到存储设备C2的硬盘中的视频数据文件系统W2中,...,将数据块SiN存储到存储设备CN的硬盘中的视频数据文件系统WN中;
其中,每个数据块存储到存储设备中的视频数据文件系统的方式均相同,且为并行存储方式;
本发明中,存储设备存储的视频数据文件和索引文件均具有相同的文件生命周期,例如,视频数据文件和索引文件的文件生命周期均为1小时,因此,每隔1小时,需要新创建视频数据文件和索引文件,后续过程进入文件内容写入时,均向新创建的视频数据文件和索引文件中写入。此种方式的优点为:由于存储设备中存储多个细粒度的视频数据文件和索引文件,因此,当某个视频数据文件或索引文件出现故障时,能够将损害范围降到最小。
另外,本实施例中,视频数据文件和索引文件用于对应存储1小时的数据,如9:00–10:00之间的数据。存储文件的名称由摄像机ID+所属整点UTC时间戳+纠删码编号唯一确定,其中,视频数据文件的文件名称为00312_1597885200.c1,索引文件的名称为00312_1597885200c1.markdata;
步骤四:本实施例中,索引数据块用于存储指定时间长度或指定长度的索引信息,例如,对于实时接收到的视频数据流的分片数据,从初始时刻开始,首先在内存中创建第1个索引数据块,对应时间段为:[9:00:01-9:00:06],即:对应9点0秒到9点6秒的时间段;因此,第1个周期,第1个视频数据处理单元切分形成N个数据块,将第1个数据块的存储位置信息存入到第1个索引数据块;第2个周期,将第2个视频数据处理单元的第1个数据块的存储位置信息存入到第1个索引数据块,依此类推,连续周期的各个视频数据处理单元的第1个数据块的存储位置信息按序存入到第1个索引数据块;
假设当时间达到9:00:06时,接收到第6个视频数据处理单元的第1个数据块,此时仍然属于第1个索引数据块的时间段范围,如果第1个索引数据块的长度还未达到指定长度,则将第1个索引数据块继续保留在内存中,并将第6个视频数据处理单元的第1个数据块的存储位置信息按序存入到第1个索引数据块;
下一周期,假设当时间达到9:00:07时,此周期切分形成的第7个视频数据处理单元的第1数据块的存储位置信息不满足继续存入到第1个索引数据块的时间要求,因此,对第1个索引数据块进行填充等处理操作,使第1个索引数据块达到定长度,再将第1个索引数据块存储到最新的索引文件中;
然后,在内存中创建第2个索引数据块,其时间段为[9:00:07-9:00:12],将第7个视频数据处理单元的第1数据块的存储位置信息存储到第2个索引数据块,如此不断循环。
步骤五:在3天的数据存储时间段内,间隔挑选了不同小时的20个时间点,读取2MB视频数据,测试其响应速度,系统基于确定时间点的响应时间为30~45ms。与之对应的,在使用顺序索引时,拣选20个时间点分别读取2MB数据,其响应时间约为120ms~150ms,证明了本发明设计的针对实时流数据的高效容错索引在响应速度上达到了预期的改进效果。
步骤六:手动删除索引文件中部分索引数据块,修改部分字节。读取全部数据与原始数据对比,读取到的数据量小于原始数据,数据量差值约为2.5MB,同时通过查对时间戳证实,缺失的数据在6秒之内,未蔓延到其他时间片,未出现全部数据不能读取的情况,这证明了本发明设计的针对实时流数据的高效容错索引结构具有很强的容错性。
本发明提供的实时视频流数据的高效容错索引方法,具有以下特点:
(1)实时视频流采用分片分布式并行存储方式,提高数据存储的效率。
(2)视频数据文件和索引文件具有生命周期,数据块采用定长度方式,因此,通过多种细粒度手段,当某个视频数据文件或索引文件出现故障时,能够将损害范围降到最小。
(3)视频数据块存储到视频数据文件,索引数据块存储到索引文件,可能会出现视频数据块和索引数据块不一致的情况。针对该情况,本发明中,首先将视频数据块存储到视频数据文件,再将足够长度或者足够时长的索引数据块保存到索引文件,能够避免出现视频数据块存储异常、而索引数据块正常存储,进而导致两者不一致的情况。在存储或读取视频数据文件时,校验索引文件是否完整。若索引文件不完整,则删除无效的索引数据块,保证索引文件的可用性。
(4)索引数据块中包含了时间戳,通过采用二分法查找索引文件,能够更加快速的定位到预期时间的索引数据块,进而快速根据索引数据块存储的数据块位置信息,定位到期望的数据块,加快了基于时间读取视频数据的速度,同时相对于顺序查找指定视频数据块,本发明有效减少了计算资源的消耗。
(5)具有一定程度的容错性。
安防领域视频数据大多数为冷数据,常存储于机械硬盘等相对廉价的存储设备上。由于机械硬盘内部磨损、盘片物理损坏等因素,不可避免的出现数据错误的情况。本发明使用了CRC校验识别索引数据块内容的正确性,保证读取到的索引数据块记录的正确性,从而保证数据块存储位置的正确性。另外,机房断电等因素可造成异常宕机,该情况下可能会产生磁盘数据未及时写入到硬盘,产生视频数据不完整,以及索引数据块存储不完整的情况。当索引文件不完整时,索引文件大小将不满足索引数据块定长度的整数倍要求,可以及时识别此种错误,再通过索引数据块头、尾标记在索引文件中重新定位索引数据块,保证读取到有效的数据块存储位置。
本发明设计的针对实时流数据的高效容错索引结构及相关算法,关键的实施步骤及应用方式,其核心的原理、思想以及由此衍生出的各种算法、策略及应用,都应该属于本发明的权利保护范围之内。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。
Claims (5)
1.一种实时视频流数据的高效容错索引方法,其特征在于,包括以下步骤:
步骤1,配置存储系统;所述存储系统具有N个存储设备,分别为:存储设备C1,存储设备C2,...,存储设备CN;
步骤2,预设置视频数据处理单元的视频数据量Q0;
步骤3,令i=1;
步骤4,接收实时视频流,每当接收到视频数据量为Q0的视频数据处理单元Bi时,将所述视频数据处理单元Bi通过纠编码算法分割为N个定长的数据块,分别为:数据块Si1,数据块Si2,...,数据块SiN,同时,为每个数据块赋值相同的序列号,为i;为每个数据块赋予相同的时间戳,为Ti;
步骤5,将数据块Si1,数据块Si2,...,数据块SiN分布式存储于各个存储设备的硬盘中的视频数据文件中,即:将数据块Si1存储到存储设备C1的硬盘中的视频数据文件系统W1中,将数据块Si2存储到存储设备C2的硬盘中的视频数据文件系统W2中,...,将数据块SiN存储到存储设备CN的硬盘中的视频数据文件系统WN中;
其中,对于任意的数据块Sij,其中,j=1,2,...,N,采用以下方式存储到存储设备Cj的硬盘中的视频数据文件系统Wj中:
存储设备Cj的硬盘中的视频数据文件系统Wj由多个视频数据文件组成;首先判断视频数据文件系统Wj中当前最新的视频数据文件wnew是否已达到预设的文件生命周期;如果没有达到,则按时序将数据块Sij存储到视频数据文件wnew中;如果达到,则在硬盘中创建一个新的视频数据文件w'new,视频数据文件w'new具有时间段属性[t1,t1+ΔT],其中,t1为视频数据文件w'new创建时间,ΔT为视频数据文件w'new生命周期;然后将数据块Sij存储到视频数据文件w'new中;
步骤6,存储设备Cj上创建的每个索引文件与视频数据文件具有相同的文件生命周期;因此,每当在存储设备Cj上创建一个新的视频数据文件w'new时,同时创建一个新的索引文件Su'new,其中,索引文件Su'new具有时间段属性[t2,t2+ΔT],其中,t2为索引文件Su'new创建时间;其中,t2和t1相同;
步骤7,对于每个数据块Sij,在将其存储到对应的存储设备Cj的硬盘中的视频数据文件中后,读取内存中的索引数据块,假设当前为索引数据块Sk0,判断索引数据块Sk0是否达到指定时长,如果达到,则执行步骤8-步骤9;如果没有达到,预设置每个索引数据块的长度相等,均为L0,假设索引数据块Sk0当前长度为L1,判断索引数据块Sk0剩余长度L0-L1是否小于设定阈值ε,如果不小于,则执行步骤10;如果小于,则执行步骤8-步骤9;
步骤8,向索引数据块Sk0的填充区域填充字段,以使填充后的索引数据块Sk0长度达到L0-ΔL;其中,ΔL为CRC的长度;然后,计算索引数据块Sk0的CRC,并写入到CRC校验区域,由此生成完整的定长度为L0的索引数据块Sk0;
再将得到的索引数据块Sk0按时序追加保存到存储设备Cj硬盘上面当前最新的索引文件中;具体方法为:
对于当前最新的索引文件,表示为索引文件Sunew;判断索引文件Sunew大小是否为索引数据块定长度L0的整数倍,如果是,则将索引数据块Sk0追加到索引文件Sunew尾部;否则,表明索引文件Sunew出现异常,删除索引文件Sunew尾部的索引数据块Sk2,其中,索引数据块Sk2的大小必然不是索引数据块定长度L0的整数倍,然后,再将索引数据块Sk0追加到索引文件Sunew尾部;然后执行步骤9;
步骤9,按索引数据块创建规则,在内存中创建一个新的索引数据块Sk1,索引数据块Sk1具有以下结构:头部区域、尾部区域、CRC校验区域、时间段区域、填充区域、保留区域以及数据区域;其中,头部区域具有头部字段;尾部区域具有尾部字段;时间段区域具有时间段字段;数据区域配置三种字段,分别为:数据块序列号、数据块在视频数据文件中的存储偏移量以及数据块存储占用长度;
在初始创建索引数据块Sk1时,给时间段字段赋值为[t0,t0+Δt];其中,t0为时间戳Ti;Δt为预设时间段长度,为固定设置值;
然后,向索引数据块Sk1中写入数据块Sij的序列号、数据块Sij在视频数据文件中的存储偏移量以及数据块Sij存储占用长度;然后,执行步骤9;
步骤10,令i=i+1,返回步骤4,对继续接收到的下一个实时的视频数据处理单元进行数据块切分、数据块存储以及数据块索引内容存储的操作。
2.根据权利要求1所述的一种实时视频流数据的高效容错索引方法,其特征在于,索引数据块的头部字段和尾部字段,采用特殊字符串标记。
3.根据权利要求1所述的一种实时视频流数据的高效容错索引方法,其特征在于,还包括:
步骤11,当需要查找指定时间t0的视频数据时,在指定索引文件中使用二分法查找,定位到与指定时间t0对应的索引数据块Sk,再根据索引数据块Sk确定与指定时间t0关联的视频数据存储位置,最后根据视频数据存储位置查找存储设备硬盘中的视频数据文件系统,获得指定时间t0的视频数据。
4.根据权利要求3所述的一种实时视频流数据的高效容错索引方法,其特征在于,步骤11具体为:
步骤11.1,当需要查找指定时间t0的视频数据时,并行查找存储设备C1,存储设备C2,...,存储设备CN,得到存储设备C1上与指定时间t0对应的数据块序列P1,存储设备C2上与指定时间t0对应的数据块序列P2,...,存储设备CN上与指定时间t0对应的数据块序列PN;
其中,对于任意存储设备Cu,u=1,2,...,N,采用以下方法得到与存储设备Cu对应的数据块序列Pu:
步骤11.1.1,存储设备Cu的硬盘具有索引文件系统,所述索引文件系统由多个索引文件按时序排列组成;并且,每个索引文件的时间段属性显示于该索引文件的名称中;索引文件的时间段属性表示该索引文件中存储的索引数据块的索引时间范围;
步骤11.1.2,根据指定时间t0确定索引文件的时间段属性,再根据索引文件的时间段属性确定索引文件的名称,通过索引文件的名称直接读取对应的索引文件,将读取到的索引文件表示为Su1;
步骤11.1.3,索引文件Su1由多个索引数据块按时序排列组成,设共有x个索引数据块,按时序排列分别为:索引数据块Sk11,索引数据块Sk12,...,索引数据块Sk1x;
步骤11.1.4,读取并解析索引数据块Sk11,得到其时间段字段,表示为[t10,t11],将t10赋值给low;
读取并解析索引数据块Sk1x,得到其时间段字段,表示为[t20,t21],将t21赋值给high;
步骤11.1.5,判断以下不等式是否成立:high≥low,如果不成立,则查找失败,无法查找到指定时间t0的视频数据;否则,计算mid=(high+low)/2;
步骤11.1.6,判断指定时间t0是否小于mid,如果是,读取low对应的索引数据块到high对应的索引数据块之间位于中间位置的中间索引数据块,并解析中间索引数据块,得到其时间段字段,表示为[t30,t31],并将t31赋值给high;然后返回步骤11.1.5;否则,执行步骤11.1.7;
步骤11.1.7,判断指定时间t0是否等于mid,如果否,则读取low对应的索引数据块到high对应的索引数据块之间位于中间位置的中间索引数据块,并解析中间索引数据块,得到其时间段字段,表示为[t30,t31],并将t31赋值给low;然后返回步骤11.1.5;如果是,执行步骤11.1.8;
步骤11.1.8,读取中间索引数据块,获得中间索引数据块记录的所有数据块的属性,包括:数据块序列号、数据块在视频数据文件中的存储偏移量以及数据块存储占用长度;
步骤11.1.9,根据步骤11.1.8得到的数据块的属性,查找存储设备Cu的视频数据文件,获得各个数据块,形成对应的数据块序列Pu:
步骤11.2,在获得数据块序列P1,数据块序列P2,...,数据块序列PN后,采用纠编码算法,恢复得到与指定时间t0对应的视频数据。
5.根据权利要求4所述的一种实时视频流数据的高效容错索引方法,其特征在于,解析索引数据块Sk11、解析索引数据块Sk1x和解析中间索引数据块的方式相同,均采用以下方式解析:
判断索引数据块头部标记是否存在,如果不存在,则得出索引数据块无效的结论;如果存在,则进一步判断索引数据块尾部标记是否存在,如果不存在,则得出索引数据块无效的结论;如果存在,则进一步计算CRC,并与索引数据块中保存的CRC进行比对,如果不一致,则得出索引数据块无效的结论;如果一致,则得出索引数据块有效的结论;
当得出索引数据块无效的结论时,采用该索引数据块的相邻索引数据块代替,重新进行解析。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011254908.7A CN112380383B (zh) | 2020-11-11 | 2020-11-11 | 一种实时视频流数据的容错索引方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011254908.7A CN112380383B (zh) | 2020-11-11 | 2020-11-11 | 一种实时视频流数据的容错索引方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112380383A true CN112380383A (zh) | 2021-02-19 |
CN112380383B CN112380383B (zh) | 2021-06-18 |
Family
ID=74582672
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011254908.7A Active CN112380383B (zh) | 2020-11-11 | 2020-11-11 | 一种实时视频流数据的容错索引方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112380383B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114116795A (zh) * | 2021-11-01 | 2022-03-01 | 北京力控元通科技有限公司 | 一种数据存储和查询方法、装置、存储介质及电子设备 |
CN114491145A (zh) * | 2022-01-27 | 2022-05-13 | 北京中电兴发科技有限公司 | 一种基于流存储的元数据设计方法 |
CN116932470A (zh) * | 2023-09-18 | 2023-10-24 | 江苏正泰泰杰赛智能科技有限公司 | 一种可计算存储物联网时序数据的方法、系统及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105677739A (zh) * | 2015-12-29 | 2016-06-15 | 东方网力科技股份有限公司 | 一种视频索引设置方法和装置 |
US20160306811A1 (en) * | 2013-12-26 | 2016-10-20 | Le Holdings (Beijing) Co., Ltd. | Method and system for creating inverted index file of video resource |
CN110502472A (zh) * | 2019-08-09 | 2019-11-26 | 西藏宁算科技集团有限公司 | 一种大量小文件的云存储优化方法及其系统 |
-
2020
- 2020-11-11 CN CN202011254908.7A patent/CN112380383B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160306811A1 (en) * | 2013-12-26 | 2016-10-20 | Le Holdings (Beijing) Co., Ltd. | Method and system for creating inverted index file of video resource |
CN105677739A (zh) * | 2015-12-29 | 2016-06-15 | 东方网力科技股份有限公司 | 一种视频索引设置方法和装置 |
CN110502472A (zh) * | 2019-08-09 | 2019-11-26 | 西藏宁算科技集团有限公司 | 一种大量小文件的云存储优化方法及其系统 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114116795A (zh) * | 2021-11-01 | 2022-03-01 | 北京力控元通科技有限公司 | 一种数据存储和查询方法、装置、存储介质及电子设备 |
CN114116795B (zh) * | 2021-11-01 | 2022-12-20 | 北京力控元通科技有限公司 | 一种数据存储和查询方法、装置、存储介质及电子设备 |
CN114491145A (zh) * | 2022-01-27 | 2022-05-13 | 北京中电兴发科技有限公司 | 一种基于流存储的元数据设计方法 |
CN116932470A (zh) * | 2023-09-18 | 2023-10-24 | 江苏正泰泰杰赛智能科技有限公司 | 一种可计算存储物联网时序数据的方法、系统及存储介质 |
CN116932470B (zh) * | 2023-09-18 | 2024-01-05 | 江苏正泰泰杰赛智能科技有限公司 | 一种可计算存储物联网时序数据的方法、系统及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112380383B (zh) | 2021-06-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112380383B (zh) | 一种实时视频流数据的容错索引方法 | |
CN102937967B (zh) | 数据冗余实现方法及装置 | |
CN109710572B (zh) | 一种基于HBase的文件分片方法 | |
CN111078662B (zh) | 一种区块链数据存储方法与装置 | |
CN108563532B (zh) | 数据处理方法及相关装置 | |
CN111400267B (zh) | 记录日志的方法和装置 | |
CN111400083A (zh) | 数据存储方法及系统、存储介质 | |
CN106407038A (zh) | 一种碎片文件的数据恢复方法 | |
CN113377292A (zh) | 一种单机存储引擎 | |
CN111857603B (zh) | 数据处理方法及相关装置 | |
CN114491145B (zh) | 一种基于流存储的元数据设计方法 | |
CN112799607B (zh) | 一种根据数据大小分区式存放的数据存储方法 | |
CN115061640B (zh) | 一种容错分布存储系统、方法、电子设备及介质 | |
CN107943415B (zh) | 基于fat文件系统的查找空闲簇的方法和系统 | |
CN103177026A (zh) | 数据管理方法和数据管理系统 | |
CN111736778B (zh) | 数据更新方法、装置、系统和电子设备 | |
CN112087418B (zh) | 计算报文数据填充位的方法及装置 | |
CN107357677A (zh) | 一种GlusterFS基于纠删码的数据冗余存储方法 | |
CN103092730B (zh) | 一种信息存储与读取方法 | |
CN113553215A (zh) | 一种基于环境信息的纠删码数据恢复优化方法及装置 | |
CN102262526B (zh) | 有序树表分段遍历方法及系统 | |
CN112799872A (zh) | 一种基于键值对存储系统的纠删码编码方法及装置 | |
US11928084B2 (en) | Metadata store in multiple reusable append logs | |
CN110297728B (zh) | 基于起源数据的文件重建过程中选择性数据重建方法 | |
KR102418616B1 (ko) | Dna 저장 장치의 시퀀스 집단화 방식 기반 복호화 방법, 프로그램 및 장치 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |