专利类型 | 发明公开 | 法律事件 | 公开; 实质审查; |
专利有效性 | 实质审查 | 当前状态 | 实质审查 |
申请号 | CN202410413602.3 | 申请日 | 2024-04-08 |
公开(公告)号 | CN118524236A | 公开(公告)日 | 2024-08-20 |
申请人 | 西安丰树电子科技发展有限公司; | 申请人类型 | 企业 |
发明人 | 王延博; 郑音; 杨辉; 朱俊兰; 邓雷; 刘昭; | 第一发明人 | 王延博 |
权利人 | 西安丰树电子科技发展有限公司 | 权利人类型 | 企业 |
当前权利人 | 西安丰树电子科技发展有限公司 | 当前权利人类型 | 企业 |
省份 | 当前专利权人所在省份:陕西省 | 城市 | 当前专利权人所在城市:陕西省西安市 |
具体地址 | 当前专利权人所在详细地址:陕西省西安市高新区丈八五路二号现代企业中心东区1号楼1区10402室 | 邮编 | 当前专利权人邮编:710077 |
主IPC国际分类 | H04N21/232 | 所有IPC国际分类 | H04N21/232 ; H04N21/231 ; H04N21/234 ; H04N21/433 ; H04N21/44 ; G06F16/13 ; G06F16/172 ; G06F16/71 |
专利引用数量 | 0 | 专利被引用数量 | 0 |
专利权利要求数量 | 7 | 专利文献类型 | A |
专利代理机构 | 西安弘理专利事务所 | 专利代理人 | 赵燕秋; |
摘要 | 本 发明 公开了基于FAT32预分配功能文件的多路视频储存系统,包括 视频流 入库模 块 、检查修复模块、视频流读取模块,该三个业务模块各自与系统 接口 模块连接,视频流入库模块,用于将从视频通道 解码器 获取的 视频 帧 数据存储到预分配功能文件中;检查修复模块,用于对预分配功能文件及数据进行检查与修复;视频流读取模块,读取系统存储的视频数据;系统接口模块,提供了各业务模块对外的 访问 接口,包括储存系统初始化接口、视频读取接口、以及系统检查修复接口。本发明系统属于视频处理技术领域,解决了通用FAT32文件的磁盘碎片问题;提高了视频存储访问的效率,实现了多路视频的储存;保证了视频文件储存的可靠性。 | ||
权利要求 | 1.基于FAT32预分配功能文件的多路视频储存系统,其特征在于:包括三个并列设置的业务模块,即视频流入库模块、检查修复模块、视频流读取模块,该三个业务模块各自与系统接口模块连接, |
||
说明书全文 | 基于FAT32预分配功能文件的多路视频储存系统技术领域[0001] 本发明属于视频处理技术领域,涉及基于FAT32预分配功能文件的多路视频储存系统。 背景技术[0002] 近年来,随着科技的发展和社会的进步,视频监控正在各行各业中得到广泛的应用。安防行业以视频监控探头为中心,运用图像传感器、网络传输等先进技术构成视频监控解决方案。视频监控存储是视频监控系统中重要的功能之一,对监控过程进行全程记录和保存,一旦发生紧急事件或者安全事故,可以及时查找和提取相关监控录像,为事后调查和分析提供了有力的依据。近年来,基于嵌入式Linux系统的视频数据服务系统需求越来越大,考虑FAT32是一种相对简单的、通用的文件系统,不需要太多的处理器或内存资源就能运行,因此,嵌入式Linux系统对视频监控的存储适合采用FAT32文件系统,然而,传统的FAT32文件系统对簇大小的限制较小,读写效率低;FAT32没有日志功能,当系统异常关机可能会导致文件系统损坏或数据丢失,文件数据安全性低;同时,对于处理大型媒体文件,长时间连续覆盖使用后,FAT32文件系统会导致磁盘产生大量文件碎片,或磁盘损坏,降低磁盘使用率,视频数据丢失,数据安全性不能得到保证。 [0003] 为了解决嵌入式Linux系统中视频数据储存问题,当前常用的方法是采用裸系统的方式进行存储,也就是不采用FAT32文件系统,而是在Linux系统中开发专门的视频储存系统,直接操作磁盘扇区,对硬盘扇区进行管理,实现视频存储,该方法复杂度高,开发难度大,技术门槛高。 发明内容[0004] 本发明的目的是提供基于FAT32预分配功能文件的多路视频储存系统,解决了现有技术中存在磁盘使用率降低,视频数据丢失,数据安全性不能得到保证的问题。 [0005] 本发明所采用的技术方案是,基于FAT32预分配功能文件的多路视频储存系统,包括三个并列设置的业务模块,即视频流入库模块、检查修复模块、视频流读取模块,该三个业务模块各自与系统接口模块连接, [0007] 检查修复模块,用于对预分配功能文件及数据进行检查与修复; [0008] 视频流读取模块,是根据输入的视频通道编号、起始时间以及终止时间信息,读取系统存储的视频数据; [0009] 系统接口模块,提供了各业务模块对外的访问接口,包括储存系统初始化接口、视频读取接口、以及系统检查修复接口。 [0010] 本发明的有益效果是,(1)基于FAT32文件系统,采用预分配功能文件的方式,通过预分配功能文件之间的关联索引实现视频流数据的存储,减少视频存储过程中对文件增删操作,解决了通用FAT32文件在进行视频大型媒体文件存储长时间连续覆盖使用,导致的磁盘碎片问题;(2)基于双线程双缓存方式,提高了视频存储访问的效率,实现了多路视频的储存;(3)通过增加检查修复功能的方式,解决了异常情况视频储存的修复处理,保证了视频文件储存的可靠性;(4)基于FAT32文件系统开发平台,通过性好,文件操作接口规范,使用方便,适合嵌入式Linux系统中视频数据储存。附图说明 [0011] 图1是本发明多路视频储存系统中预分配功能文件的组成示意图; [0012] 图2是本发明多路视频储存系统中系统模块组成示意图; [0013] 图3是本发明多路视频储存系统中视频数据预处理原理简图; [0014] 图4是本发明多路视频储存系统中数据写入的流程A示意图; [0015] 图5是本发明多路视频储存系统中索引数据文件循环覆盖的流程B示意图; [0016] 图6是本发明多路视频储存系统中数据读取的流程C示意图; [0017] 图7是本发明多路视频储存系统中检查修复的流程D示意图。 具体实施方式[0018] 下面结合附图和具体实施方式对本发明进行详细说明。 [0019] 参照图1,是本发明基于FAT32预分配功能文件的多路视频储存系统(以下简称本发明多路视频储存系统)的预分配功能文件组成图,预分配功能文件分为六个:即系统配置文件、系统运行文件、索引信息文件、索引数据文件、数据块信息文件、数据块文件,[0020] 其中,系统配置文件及系统运行文件各一个; [0021] 根据系统存储的视频通道数k,设置k个索引数据文件及索引信息文件,每个索引数据文件对应一个索引信息文件,索引数据文件和索引信息文件的文件名中均包含自增的文件编号,文件编号从1开始,最大文件编号为k; [0022] 根据系统存储容量的大小,设置n个数据块文件及数据块信息文件,每个数据块文件对应一个数据块信息文件,数据块文件和数据块信息文件的文件名中均包含自增的文件编号,文件编号从1开始,最大文件编号为n。 [0023] 上述6个预分配功能文件的具体设置及架构说明如下: [0024] 1)系统配置文件,用来存储预分配功能文件的配置信息,包括系统的初始化的一些设定参数和系统的配置参数,如表1所示,是具体实施时在系统配置文件中存储的参数信息。 [0025] 表1、系统配置文件的参数设置 [0026] [0027] 2)系统运行文件,用来储存系统初始化的信息,以及系统运行过程中的一些信息,如表2所示,是系统运行文件存储的参数信息。 [0028] 表2、系统运行文件的参数设置 [0029]序号 参数名 参数功能 1 数据块文件总数(n) 数据块文件的总数n 2 当前写入数据块文件编号(i) 当前写入数据块的文件的编号 3 起始数据块文件编号(SD) 存储数据的起始数据块文件的编号 [0030] 3)数据块文件,用来存储视频数据包,数据块文件的大小由系统配置文件中数据块文件大小参数决定;由于系统的视频通道个数不定,且各视频通道数据包大小不同,各视频通道数据包连续混合写入数据块文件,如表3所示,给出了4个视频通道的视频数据包在第i个数据块文件中的存储示意。 [0031] 表3、数据包存储示意表 [0032] [0033] 4)数据块信息文件,用来存储对应数据块文件的使用信息,如表4所示,给出了数据块信息文件存储的参数信息。 [0034] 表4、数据块信息文件的参数设置 [0035] [0036] 5)索引数据文件,用来存储写入的数据包对应的索引数据结构体,该索引数据文件中的数据主要用来进行数据查询和读取,每个视频通道对应一个索引数据文件。如表5所示,通道i的索引数据文件中包含多个指定大小的数据结构体,索引数据文件的大小由系统配置文件中的参数IPS确定。每个索引数据结构体与索引数据文件中写入的一个视频数据包关联,索引数据结构体中包含索引数据文件中写入的视频数据包的描述信息和数据包在数据块中的存储信息,如表6所示,给出了索引数据文件中索引数据结构体的参数信息。 [0037] 表5、索引数据文件的存储示意 [0038] [0039] [0040] 表6、索引数据结构体的参数设置 [0041]序号 参数名 参数功能 1 文件块编号(IS1) 数据包存入的索引数据文件的编号 2 数据块写入指针(IDWP1) 数据包在索引数据文件中写入的位置 3 数据包长度(IDS1) 存入的数据包长度 4 时间戳(IDT2) 存储数据包对应的时间 [0043] 表7、索引信息文件的参数设置 [0044] 序号 参数名 参数功能1 当前索引数据块写入指针(IP) 当前数据结构体写入的位置 2 索引数据块起始指针(SIP) 循环覆盖过程中,起始写入索引数据结构体的位置[0045] 在预分配功能文件中,将系统配置文件、系统运行文件、数据块信息文件以及索引数据信息文件统称为信息文件,如表8所示,信息文件按照给出的指定的数据格式进行存储。 [0046] 表8、信息文件的存储格式 [0047] 头部标记 数据信息 CRC校验 标记4字节 字节数由各文件参数确定 4字节 4字节 [0048] 在表8中,信息文件的存储格式,其中头部标记存储的为固定的设定值0XAAFF;尾部标记存储的为固定的设定值0XEEDD;数据信息为各文件的信息参数;CRC校验存储的是从文件头部标记开始计算到数据信息结束的循环冗余校验码。 [0049] 参照图2,是本发明多路视频储存系统的功能模块,包括三个并列设置的业务模块,即视频流入库模块、检查修复模块、视频流读取模块,该三个并列设置的业务模块各自与系统接口模块连接,(该三个业务模块没有相互连接关系,一个是将数据存储写入,一个是将数据读取出来,一个是用来检查和修复存储过程中的预分配功能文件异常及数据错误);其中,视频流入库模块,用于将从视频通道解码器获取的H264、H265格式的视频帧数据存储到预分配功能文件中;检查修复模块,用于发生异常情况(如异常掉电等)时,系统对预分配功能文件及数据进行检查与修复;视频流读取模块是根据输入的视频通道编号、起始时间以及终止时间信息,读取系统存储的视频数据;系统接口模块,提供了上述各业务模块对外的访问接口,主要包括储存系统初始化接口、视频读取接口、以及系统检查修复接口。 [0050] 本发明多路视频储存系统通过存储索引信息构建已存储数据的关联索引,通过关联索引进行数据的查询读取;视频流入库模块,将数据按照指定格式打包后,存储在数据块文件中,存储过程中会通过写入索引数据文件构建数据的索引关联关系;数据读取则通过查询和读取索引数据文件,进行数据的读取,系统运行过程中会通过更新预分配功能文件中的数据块信息文件、索引信息文件及系统运行文件,来维护系统运行中预分配功能文件的使用信息。 [0051] 考虑到多路视频的数据量大,为了支持多通道高码率存储写入,本发明多路视频储存系统在视频数据存储前,在视频流入库模块中预置有一个视频数据预处理流程,该流程采用双线程双缓存的方式。 [0052] 参照图3,为本发明多路视频储存系统中的视频数据的预处理过程: [0053] 首先:视频数据帧获取线程(线程1),从各视频通道的解码器中获取视频帧数据,并将各视频通道的视频数据帧压入到视频数据帧队列; [0054] 摄像头的视频图像经解码器得到H264或H265格式编码的视频数据帧,视频数据帧的组成结构,包括数据帧头部、视频帧数据、校验、数据帧尾部,如表9所示,其中的数据帧头部数据中包含有视频数据帧的大小、视频数据帧的时间戳、视频数据帧的通道编号; [0055] 表9、视频数据帧的组成结构 [0056] [0057] 然后:视频数据帧组包线程(线程2),从视频数据帧队列获取视频数据帧,以秒为单位将视频数据帧打包成数据包,并将打包好的数据包压入到视频数据包队列。视频数据包的组成结构,包括数据包头部、1秒内的所有数据帧包、校验、数据包尾部,如表10所示,在该数据包头部中包含有数据包大小、数据包的时间戳、视频通道编号的信息。 [0058] 表10、视频数据包的组成结构 [0059] [0060] 本发明多路视频储存系统在视频流存储过程中,对索引数据文件及数据块文件的存储采用循环覆盖方式。其基本思路是:通过移动索引信息文件中写入数据指针的位置,或重置相关数据块信息文件,实现索引数据文件及数据块文件的循环覆盖。该视频流存储方式避免了文件的增删操作,解决了FAT32文件由于系统文件频繁增删导致的文件碎片及磁盘损坏问题;同时,为了实现多通道数据读取,在视频数据写入数据块文件的同时,需要更新每个视频通道对应的索引数据文件以及索引信息文件。 [0061] 参照图4,是本发明多路视频储存系统中的视频流入库模块的流程图,称为流程A,该流程A的具体执行过程为: [0062] 步骤A1:系统初始化; [0063] 打开系统配置文件以及系统运行文件,得到相关的参数; [0064] 步骤A2:读取视频数据包kk; [0065] 从视频数据包队列中读取数据包kk,获得每一个数据包的具体信息,包括每一个数据包的大小p1、数据包的时间戳t1、数据包的通道编号h1; [0066] 步骤A3:判断数据块文件是否写满; [0067] 根据系统运行文件中的“当前写入数据块文件编号”i,读取编号i的数据块信息文件中的“当前写入数据块的指针”DP,设DS为系统配置文件中的“数据块文件大小”,[0068] 如果DP+p1≥DS,表示当前数据块文件写入空间不足,说明当前数据块文件已满,执行步骤A4,更新需要写入数据的数据块文件编号i; [0069] 否则,说明当前数据块文件未满,“当前写入数据块文件编号”i不变,执行步骤A7; [0070] 步骤A4:更新数据块文件编号i; [0071] 如果i+1>n,n表示系统运行文件中数据块文件的总数,则更新“当前写入数据块文件编号”i=1,即n个数据块文件全部写完,需要从第一个数据块文件开始覆盖,且“当前写入数据块指针”DP=0; [0072] 如果i+1<n,则更新“当前写入数据块文件编号”i=i+1;且“当前写入数据块指针”DP=0; [0073] 步骤A5:更新起始数据块文件编号SD; [0074] 如果i=SD,SD表示系统运行文件中起始数据块文件编号,则更新SD=SD+1;否则,SD=SD; [0075] 如果SD>n,则SD=1; [0076] 步骤A6:编号i的数据块文件对应索引数据块结构体清零; [0077] 由于数据块文件中连续存储不同视频通道的数据,考虑各视频通道数据包长度不同,当需要覆盖编号i的数据块文件的时候,为了避免数据文件块中数据冲突,需要先对编号i的数据块文件的所有视频通道数据块对应的索引数据文件中的索引数据块清零。如图5所示,为编号i的数据块文件对应索引数据块结构体清零流程,下文再做详细说明。 [0078] 步骤A7:数据包写入数据块文件; [0079] 根据“当前写入数据块文件编号”i以及“当前写入数据块指针”DP,将数据包kk写入到编号i,指针DP指向的数据块文件的位置; [0080] 然后,更新“数据块大小”DPS=p1; [0081] 步骤A8:更新系统运行文件以及数据块信息文件; [0082] A8.1)将“当前写入数据块文件编号”i以及“起始数据块文件编号”Sn,写入系统运行文件; [0083] A8.2)将“上次写入数据块指针”PDP=DP,“当前写入数据块指针”DP=DP+p1;“数据块大小”DPS=p1,写入编号为i的数据块信息文件; [0084] A8.3)更新编号为i的数据块信息文件的“视频通道h1的终止时间”T1e=t1,t1为数据包kk的时间戳;如果PDP=0,则有“视频通道h1的起始时间”T1s=t1; [0085] 步骤A9:生成索引数据结构体; [0086] 数据包kk写入数据块文件后,参考表6,生成数据包kk对应的索引数据结构体,包括:数据块文件编号IS1=i,数据块写入指针IDWP1=PDP,数据包长度IDS1=p1,时间戳IDT2=“系统当前时间”; [0087] 步骤A10:写入索引数据文件; [0088] 先根据数据包kk对应通道编号h1,读取编号h1的索引信息文件,再根据“当前索引数据块写入指针”IP,将步骤A9生成的索引数据结构体写入通道h1的索引数据文件中指针IP的位置,更新“当前索引数据块写入指针”IP=IP+1; [0089] 步骤A11:判断索引数据文件是否写满; [0090] 根据通道h1的索引信息文件的“当前索引数据块写入指针”IP以及系统配置文件中“索引数据块结构个数”IPS, [0091] 如果IP≥IPS,说明通道h1的索引数据文件写满,需要对该索引数据文件进行覆盖写入,即IP=0;如果IP≥SIP,则“索引数据块起始指针”更新为SIP=SIP+1;如果SIP≥IPS,则SIP=0; [0092] 否则,通道h1的索引数据文件未写满,IP=IP+1; [0093] 步骤A12:更新索引信息文件; [0094] 根据表7索引信息文件的数据定义,将相关变量更新到通道h1的索引信息文件中;至此,完成视频数据包kk的存储。 [0095] 需要强调的是,对于前述流程A中的步骤A6,当编号i的数据块文件(以下简称数据块文件i)要被覆盖写入时,需要将编号i的数据块中所有数据包对应的索引数据块结构体清零。其基本思路为:循环检索k个视频通道(k为视频通道个数)的索引数据文件,如果索引数据结构体中的“时间戳”IDT2在编号i的数据块信息文件i的相应视频通道时间段内,则将该索引数据块清零。见图5,是覆盖数据块文件i的索引数据块清零流程,称为流程B,该流程B的执行过程如下: [0096] 步骤B1:初始化; [0097] 设需要覆盖的数据块为编号i,索引数据文件编号m=0;索引数据文件指针为p=0; [0098] 读取编号i的数据块信息文件(以下简称数据块信息文件i)中的参数:T1s,T1e,T2s,T2e,…,Tks以及Tke; [0099] 步骤B2:读取编号m的索引信息文件以及对应的索引数据块j; [0100] 读取编号m的索引信息文件(以下简称索引信息文件m)中的参数:PIP以及SIP;初始化:P=SIP; [0101] 根据编号m的索引数据文件(以下简称索引数据文件m)以及指针P,读取索引数据文件m中的索引数据块j; [0102] 步骤B3:判断索引数据块j是否清零; [0103] 根据索引数据块j中的“时间戳IDT2”,如果T1s<IDT2<T1e,则该索引数据块j清零;继续执行步骤B4索引数据文件m中的索引数据块j清零; [0104] 否则,不需要清零,转入步骤B5; [0105] 步骤B4:索引数据文件m中的索引数据块j清零; [0106] 向索引数据文件m中的指针p地址的索引数据块j写入0,并移动数据块指针,P=P+1; [0107] 步骤B5:判断索引数据文件m是否全部检索; [0108] 如果p>IP,IP表示当前索引数据块写入指针,则索引数据文件m检索完,更新索引数据文件编号m=m+1; [0109] 否则,返回步骤B2,继续判断索引数据文件m中索引数据块p是否需要清除; [0110] 步骤B6:判断所有索引数据文件是否全部检索; [0111] 如果更新后的索引数据文件编号m>k‑1,k为系统配置文件中“视频通道个数”,则索引数据文件全部检索清除完成,执行步骤B7; [0112] 否则,返回步骤B2,继续读取索引数据文件m中索引数据块; [0113] 步骤B7:编号i的数据块信息文件中所有视频通道时间及指针清零; [0114] 更新编号i的数据块信息文件中的“视频通道1的起始时间戳”T1s=0,“视频通道1的结束时间戳”T1e=0,“视频通道2的起始时间戳”T2s=0,“视频通道2的结束时间戳”T2e=0,…,“视频通道k的起始时间戳”Tks=0,“视频通道k的结束时间戳”Tke=0;“当前写入数据块指针”DP=0,“上次写入数据块指针”PDP=0,“数据块大小”PS=0; [0115] 至此,完成数据块文件i的所有索引数据块清零。 [0116] 参照图6,为本发明多路视频储存系统中的视频流读取模块中,预置有数据读取流程,数据读取流程,根据用户需要的视频通道号h1、开始日期时间Ts以及结束日期时间Te,读取系统中存储的视频数据包,称为流程C,该流程C的具体执行过程如下: [0117] 步骤C1:初始化; [0118] 设置视频通道号h1、开始时间Ts以及结束时间Te; [0119] 步骤C2:读取通道h1的索引信息文件以及索引数据文件; [0120] 读取视频通道h1的索引信息文件中的“索引数据块起始指针”SIP及“当前索引数据块写入指针”IP1; [0121] 根据指针SIP以及“IP1‑1”读取通道h1的索引数据文件中的两个索引结构体,指针SIP对应的索引结构体的“时间戳”IDT2为视频通道h1存储的起始时间SDT;指针“IP1‑1”对应的索引结构体的“时间戳”IDT2为视频通道h1存储的终止时间EDT; [0122] 步骤C3:判断输入的时间段是否在该通道的存储时间段内; [0123] 根据步骤C2得到的视频通道h1存储的起始时间SDT以及视频通道h1存储的终止时间EDT, [0124] 如果EDT≥Te≥SDT或者EDT≥Ts≥SDT,说明能够从系统存储的数据中检索出用户要求的全部或部分时间段数据; [0125] 否则,无法检索出户输入的时间段数据,退出读取流程; [0126] 步骤C4:读取数据包; [0127] 从通道h1的索引信息文件中“索引数据块起始指针”SIP到“当前索引数据块写入指针IP1‑1”,读取通道h1的索引数据文件中的索引数据结构体,查找上述索引数据结构体中满足条件“结束时间Te>时间戳IDT2>开始时间Ts”的所有索引数据结构体; [0128] 根据上述查找到的满足条件的索引数据结构体中的“索引数据文件编号IS1”、“数据块写入指针IDWP1”以及“数据块大小DS”,在相应索引数据文件中检索出所数据包,完成读取,退出读取流程。 [0129] 另外,正常情况下嵌入式系统在运行过程中,可能由于干扰出现异常关机或者掉电,然而,FAT32文件系统没有日志功能,系统异常关机可能造成部分数据丢失,导致数据文件之间的关联关系异常,为了解决系统异常导致的存储问题,本发明多路视频储存系统中的检查修复模块还具备有系统备份功能以及开机检查修复功能,分别说明如下:1)系统备份功能:根据系统配置文件中的“备份周期”对系统运行文件、索引信息文件以及数据块信息文件进行周期性备份。2)开机检查修复功能是系统开机时进行。 [0130] 参照图7,为本发明多路视频储存系统中开机检查修复功能的流程图,如果系统运行文件、索引信息文件以及数据块信息文件异常,则利用备份文件进行修复;如果数据块文件以及索引数据文件发生可读性异常,则采用重新分配文件的方法修复;如果数据块文件以及索引数据文件发生数据正确性异常,则采用回滚关联信息的方式进行修复。开机检查修复功能的流程简称为流程D,该流程D的具体执行过程如下: [0131] 步骤D1:预分配功能文件的可读性检查与修复; [0132] 在系统运行过程中,系统配置文件是不会反复写入的,所以,一般情况下系统配置文件不会异常错误。文件可读性检查是对系统运行文件、索引信息文件、索引数据文件及数据块信息文件进行检查与修复。 [0133] D1.1)检查与修复系统运行文件, [0134] 如果不能正常打开,说明系统运行文件异常;使用文件复制的方式,将表1系统配置文件信息中的“备份路径”下的文件,复制到“存储路径”下,完成系统运行文件的修复; [0135] D1.2)检查与修复索引信息文件和索引数据文件, [0136] 根据系统配置文件中的通道个数k,循环打开所有通道对应的索引信息文件和索引数据文件,如果某通道的索引信息文件不能正常打开,说明该索引信息文件异常;使用文件复制的方式,将表1系统配置文件信息中的“备份路径”下的对应索引信息文件,复制到“存储路径”下,完成索引信息文件的修复;如果某通道的索引数据文件不能正常打开,说明该索引数据文件异常,则重新预分配该通道的索引数据文件,并重置清零对应的索引信息文件; [0137] D1.3)检查与修复数据块文件及数据块信息文件, [0138] 读取系统运行文件中的“数据块文件总数n”,循环打开所有的数据块文件和数据块信息文件,如果某个文件编号的数据块信息文件不能正常打开,说明该数据块信息文件异常,将表1系统配置文件信息中的“备份路径”下的对应数据块信息文件,复制到“存储路径”下,完成数据块信息文件的修复;如果某文件编号的数据块文件不能正常打开,说明该数据块文件异常,则重新预分配该数据块文件,并重置清零对应的数据块信息文件; [0139] 步骤D2:信息文件的数据正确性检查与修复, [0140] 系统配置文件、系统运行文件、数据块信息文件以及索引数据信息文件数据正确性检查是通过对读取的数据进行CRC校验计算,如果计算出的校验结果和文件存储的CRC校验不相等,则判定数据正确性异常;如果系统运行文件、索引信息文件、数据块信息文件的数据正确性异常,则通过数据备份的方式进行修复; [0141] 步骤D3:数据块文件的数据包正确性检查与修复, [0142] 首先,根据系统运行文件中的“当前写入数据块编号”i,读取编号i的数据块信息文件中的“上次写入数据块指针”PDP,根据指针PDP以及编号i读取对应的数据块文件中的数据包;然后,检查数据包的正确性; [0143] D3‑1)判断数据包头部和数据包尾部是否正确,如果数据包头部和数据包尾部不正确,则判定数据包错误; [0144] D3‑2)计算数据包的校验,如果计算得到的校验和读取的数据包中的校验不相等,则判定数据包错误; [0145] D3‑3)如果数据包错误,则通过回滚关联信息的方式进行修复。 [0146] 回滚关联信息修复方法的基本思路是:抛去索引数据文件中不正确的数据包,将数据块信息文件、索引信息文件及系统运行信息文件中的相关参数回滚至数据块文件中不正确数据包的上一包数据的关联参数,从而修复数据关联关系; [0147] 在数据块文件的数据出现正确性检查错误时,采用的回滚关联信息修复的步骤如下: [0148] a:根据数据块信息文件中的“上次写入数据块指针”PDP,“当前数据块写入文件编号”i以及“当前写入数据块指针”DP,如果DP=0,则读取编号为i‑1的数据块文件中指针PDP指向的数据包;否则,读取编号为i的数据块文件中指针PDP指向的数据包;得到该数据包的信息,包括:数据包大小p1、数据包的时间戳t1、数据包的通道编号h1; [0149] b:根据步骤C3.1读取的数据包信息,读取数据包通道编号h1对应的索引信息文件,根据通道h1的索引信息文件的“当前索引数据块写入指针”IP,如果IP=0,则读取通道h1的索引数据文件中,指针IPS‑1指向的索引数据结构体;否则,读取通道h1的索引数据文件中,指针IP‑1指向的索引数据结构体,得到该索引数据结构体中的“数据包长度”IDS1以及“时间戳”IDT2; [0150] c:更新系统运行文件中的参数,如果DP=0,“当前写入数据块文件编号”i=i-1;否则,“当前写人数据块文件编号”i=i; [0151] d:更新通道h1的索引信息文件中的参数,如果IP=0,“当前索引数据块写入指针”IP=IPS-1;否则,“当前索引数据块写入指针”IP=IP-1; [0152] e:根据步骤C3.2以及步骤C3.1获得的信息对数据块信息文件中的相关参数进行更新,包括:“当前写入数据块指针”DP=PDP;“数据块大小”DPS=IDS1;“上次写入数据块指针”PDP=PDP-DPS;“视频通道h1的结束写入时间”Th1e=IDT2; [0153] f:根据步骤C3.2以及步骤C3.1获得的信息对系统运行文件中的相关参数进行更新,包括:“当前写入数据块文件编号”i=Pi; [0154] 至此,完成关联信息的修复。 [0155] 实施例1 [0157] 表11、系统配置文件信息 [0158] [0159] 实施例1的状态为:数据包存储,不覆盖的情况。 [0160] 根据本发明多路视频储存系统的前述设置及执行过程,从数据包队列中读取数据包kk,得到数据包kk的大小p1=1000,数据包的时间戳t1=1709453489,数据包的通道编号h1=1;数据包kk写入前,系统运行文件参数见表12。 [0161] 表12、系统运行文件参数 [0162] 参数名 索引数据文件总数(n) 当前数据块写入文件编号(i) 起始数据块编号(SD)数值 3 3 1 [0163] 此时,“当前数据写入文件编号”i=3;编号3的数据块信息文件的参数见表13; [0164] 表13、编号3的数据块信息文件参数 [0165] [0166] 根据系统预分配功能文件的参数信息,“当前数据块写入编号”i=3;编号3的数据块信息文件中的“当前写入数据块指针”DP=13000;数据块文件大小”DS=16000,根据本发明实施例1的DP(当前写入数据块指针)+p1(数据包kk的大小)=13000+1000=14000<DS(数据块文件大小16000),所以当前数据块文件未满,不执行循环覆盖,将数据包kk直接写入数据块文件3“当前写入数据块指针”DP指向的位置。数据包kk写入后,更新系统运行文件以及编号3的数据块信息文件,见表14以及表15。 [0167] 表14、系统运行文件信息 [0168] 参数名 索引数据文件总数(n) 当前数据块写入文件编号(i) 起始数据块编号(SD)数值 3 3 1 [0169] 表15、数据块3信息文件信息 [0170] [0171] 生成索引数据结构体:文件块编号IS1=3,数据写入指针IDPW1=13000,数据包长度IDS1=1000,时间戳IDT2=1709453489; [0172] 读取当前通道1的索引信息文件见表16。 [0173] 表16、当前通道1索引信息文件信息 [0174]参数名 当前索引数据块写入指针(IP) 索引数据块起始指针(SIP) 数值 13 0 [0175] 在通道1索引信息文件信息中,“当前索引数据块写入指针”IP=13,将生成的索引数据结构体写入通道1的索引数据文件指针IP的位置,写入完成后指针IP=IP+1=14;IP<IPS(索引数据块结构个数),索引数据文件未写满;更新后的通道1的索引信息文件见表17。 [0176] 表17、更新后的通道1索引信息文件参数 [0177]参数名 当前索引数据块写入指针(IP) 索引数据块起始指针(SIP) 数值 14 0 [0178] 实施例2 [0179] 实施例2的背景设置与实施例1一致,见表11。 [0180] 实施例2的状态为:数据包存储,循环覆盖的情况。 [0181] 根据本发明多路视频储存系统的前述设置及执行过程,从数据包队列中读取数据包kk,得到数据包kk的大小p1=4000,数据包的时间戳t1=1709453489,数据包的通道编号h1=1;数据包kk写入前,系统运行文件参数见表18。 [0182] 表18、系统运行文件参数 [0183] [0184] 此时,“当前数据写入文件编号”i=3;编号3的数据块信息文件的参数见表19。 [0185] 表19、编号3的数据块信息文件参数 [0186] [0187] 根据系统预分配功能文件的参数信息,“当前数据块写入编号”i=3,“当前写入数据块指针”DP=13000,“数据块文件大小”DS=16000,根据本发明实施例2的DP(当前写入数据块指针)+p1=13000+4000=17000,17000>DS(数据块文件大小16000),所以当前数据块文件写入空间不足,数据块文件已满,需要执行循环覆盖; [0188] “当前数据块写入编号”i=i+1,i=4,因为i≥n(系统运行文件中数据块文件总数为3),则3个数据文件全部写完,需要从编号为1的文件块开始覆盖,更新“当前数据块写入编号”i=1;数据块循环覆盖先对编号为1的数据块文件的所有视频通道数据块对应的索引数据文件中的索引数据块清零。索引数据块清零后,将数据包kk直接写入数据块文件1“当前写入数据块指针”DP指向的位置。更新系统运行文件以及编号1的数据块信息文件,见表20以及表21。 [0189] 表20、系统运行文件信息 [0190] 参数名 索引数据文件总数(n) 当前数据块写入文件编号(i) 起始数据块编号(SD)数值 3 1 1 [0191] 表21、编号1的数据块信息文件的信息 [0192] [0193] 根据数据包kk的通道编号h1=1,当前通道1的索引信息文件见表22。 [0194] 表22、当前通道1索引信息文件的信息 [0195] 参数名 当前索引数据块写入指针(IP) 索引数据块起始指针(SIP)数值 13 0 [0196] 生成索引数据结构体,包括:文件块编号IS1=1,数据写入指针IDPW1=13000,数据包长度IDS1=1000,IDT2时间戳=1709453489。根据表15中,通道1“当前索引数据块写入指针”IP=13,将生成的索引数据结构体通道1的索引数据文件,指针IP的位置,写入完成后更新IP指针,IP=IP+1=14;因为IP<IPS(索引数据块结构个数16),索引数据文件未写满;更新后的通道1的索引信息文件见表23。 [0197] 表23、更新后的通道1索引信息文件的参数 [0198]参数名 当前索引数据块写入指针(IP) 索引数据块起始指针(SIP) 数值 14 0 [0199] 实施例3 [0200] 实施例3的背景设置与实施例1一致,见表11。 [0201] 实施例3的状态为:索引数据文件正确性检查时,发现校验错误,回滚修复情况。 [0202] 根据本发明多路视频储存系统的前述设置及执行过程,根据“当前数据块写入编号”i=3,读取数据块3信息文件中“上次写入数据块指针”PDP=12000,读取PDP的位置的数据包信息,得到数据包的大小p1=1000,数据包的时间戳t1=1709453487,数据包的通道号h1=1; [0203] 读取通道1的索引信息,获取“当前索引数据块写入指针”IP=13,设定回滚的指针r=IP-1=12; [0204] 读取通道1,r=12位置的索引数据结构体,获取索引结构体信息中的“文件块编号”IS1=3,“数据包长度”IDS1=1000,“数据块写入指针”IDWP1=12000,“时间戳”IDT2=1709453487; [0205] 根据前述的回滚修复流程,更新“当前数据块文件编号”i=3;“当前索引数据写入指针”,IP=12;更新编号为3的数据块信息文件中的“当前写入数据指针”DP=PDP,DP=12000,“数据块大小”DSP=IDS1,DSP=1000,上次写入指针PDP=PDP-DPS=12000-1000=11000,“视频通道h1的结束写入时间戳T1e=1709453487;至此完成关联信息的回滚修复,修复后系统运行文件信息见表1;编号3的数据块信息文件信息见表25;通道1索引信息文件信息见表26。 [0206] 表24、系统运行文件的信息 [0207] 参数名 索引数据文件总数(n) 当前数据块写入文件编号(i) 起始数据块编号(SD)数值 3 3 1 [0208] 表25、编号3的数据块信息文件的信息 [0209] [0210] 表26、通道1索引信息文件的信息 [0211]参数名 当前索引数据块写入指针(IP) 索引数据块起始指针(SIP) 数值 12 0 [0212] 综上所述,本发明多路视频储存系统基于FAT32文件系统,采用了预分配功能文件的方法,实现了数据文件免删除,解决了长时间连续存储使用后,FAT32文件系统会导致磁盘产生大量文件碎片,或磁盘损坏,降低磁盘使用率,视频数据丢失,数据安全性不能得到保证的问题。本发明多路视频储存系统中数据的写入使用了双缓存双线程技术方式,解决了视频数据写入效率低的问题,实现了嵌入式Linux系统多路视频的存储;考虑系统可能的异常,设计了检查修复功能,针对不同的异常采用了不同的修复策略,保证了系统运行。本发明多路视频储存系统具有视频的写入、读取、检查修复及系统接口模块,满足视频存储的基本功能,系统通用性好,文件操作口规范,使用方便,适合嵌入式Linux系统中视频数据储存。 |