CN110781037B - 恢复存储介质中视频文件的方法、***及可读存储介质 - Google Patents
恢复存储介质中视频文件的方法、***及可读存储介质 Download PDFInfo
- Publication number
- CN110781037B CN110781037B CN202010000181.3A CN202010000181A CN110781037B CN 110781037 B CN110781037 B CN 110781037B CN 202010000181 A CN202010000181 A CN 202010000181A CN 110781037 B CN110781037 B CN 110781037B
- Authority
- CN
- China
- Prior art keywords
- cluster
- mdat
- data
- ftyp
- initial
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1458—Management of the backup or restore process
- G06F11/1469—Backup restoration techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1456—Hardware arrangements for backup
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Management Or Editing Of Information On Record Carriers (AREA)
- Signal Processing For Digital Recording And Reproducing (AREA)
Abstract
本发明涉及数据恢复技术领域,实施例具体公开一种恢复存储介质中视频文件的方法、***及可读存储介质。本申请通过获得MDAT box实际区域建立MDAT对象并放入MDAT队列,获得FTYP box实际区域建立FTYP对象并放入FTYP队列,排列组合FTYP对象和MDAT对象重组视频文件获得有效的视频文件,解决删除了存储介质中的视频文件后不能成功恢复的问题。
Description
技术领域
本发明涉及数据恢复技术领域,具体涉及一种恢复存储介质中视频文件的方法、***及可读存储介质。
背景技术
数码相机、手机等具有拍摄功能的设备拍摄的视频,一般为MP4、MOV格式,而MP4、MOV视频文件封装格式是基于QuickTime容器格式定义的,该格式中的媒体描述(MOOV)与媒体数据(MDAT)是分开的,并且媒体数据的组织也很自由,不一定要按照时间顺序排列,甚至媒体数据可以直接引用其他文件。所以,其发生碎片的概率很大。
mp4或称MPEG-4 Part 14是一种多媒体容器格式,扩展名为.mp4。MP4文件由许多box组成,每个box包含不同的信息,这些box以树形结构的方式组织。MOV即QuickTime影片格式,它是Apple公司开发的一种音频、视频文件格式,用于存储常用数字媒体类型。当选择QuickTime(*.mov)作为“保存类型”时,动画将保存为.mov文件。QuickTime是Apple公司开发的一套完整的多媒体平台架构,可以用来进行多种媒体的创建,生产和分发,并为这一过程提供端到端的支持:包括媒体的实时捕捉,以编程的方式合成媒体,导入和导出现有的媒体,还有编辑和制作,压缩,分发,以及用户回放等多个环节。
QuickTime文件把媒体描述和媒体数据分开存储。媒体描述(MOOV)被称为影片资源,影片atom,或简单的影片,包含的信息包括:轨道的数量、视频压缩格式和定时信息等。影片资源还包含一个索引,该索引描述了存储所有的媒体数据的位置。媒体数据(MDAT)是真实的采样点数据,如视频帧和音频样本,在影片中使用的。媒体数据可以存储在同一文件中作为QuickTime影片、或一个单独的文件中、或多个文件中、或替代资源,如数据库或实时流,或这些东西的某种组合。
Box由唯一类型标识符和长度定义的面向对象的构件,box的构成,主要就是header和body构成;其中header部分,包括该box的大小和该box的类型;body部分就是数据部分,其也可以存放其它box,这样的嵌套存放,就组成了一个.MP4、.MOV文件。ContainerBox用来容纳一组相关box的box。File Type Box (FTYP) 表示文件类型,该box有且只有1个,并且只能被包含在文件层,而不能被其他box包含,该box应该被放在文件的最开始,指示该MP4文件应用的相关信息,如描述该文件遵从的规范的版本。
MOOV存放的是该媒体文件的metadata信息,其存放的是该文件媒体数据的结构,“MOOV”是一个container box,具体内容信息由子box诠释。同File Type Box一样,该box有且只有一个,且只被包含在文件层。一般情况下,“MOOV”会紧随“FTYP”出现。
MDAT是具体的媒体数据。MP4文件、MOV文件的媒体数据包含在“MDAT”类型的box(Media Data Container)中,该类型的box也是container box,可以有多个,也可以没有(当媒体数据全部引用其他文件时),媒体数据的结构由metadata(MOOV)进行描述。
播放器在播放这种QuickTime容器格式文件的时候,一般都是顺序读取其视频信息的:先媒体描述(MOOV),然后根据媒体数据(MDAT)中的索引来播放文件。而部分相机、手机存储拍摄的mp4、mov文件时的顺序为:1)先存储拍摄文件的媒体数据(MDAT)(其间可能会***缩略图、CR2图片文件、日志文件、文件目录等信息),再紧接着存储媒体描述(MOOV),媒体描述和媒体数据是颠倒的;2)还有些相机、手机存储拍摄的mp4、mov视频时是先把拍摄过程中的所有媒体数据(MDAT)存储了(其间可能会***缩略图、CR2图片文件、日志文件、文件目录等信息)再来存储这些媒体数据的相应媒体描述(MOOV)信息。这些信息的存放记录,全部通过文件簇链(类似于FAT文件***中的FAT表)来记录,这样,正常的mp4、mov文件,在没有删除前,***可以通过文件簇链来建立索引,把数据读出来,从而正常播放;但是当这些文件的数据链在记录他们的地方(比如FAT32文件***中会删除被删除文件的簇链在FAT表中的记录)被清空后,我们在恢复该删除文件时,再按照其文件格式扫描或者文件***扫描找出来的数据都是错误的,这时候就需要我们对这种情况进行碎片重组,恢复其视频播放的正确顺序:媒体描述(MOOV)-> 媒体数据(MDAT)。
发明内容
有鉴于此,为了解决部分存储介质中的视频文件存储为碎片且颠倒了媒体描述(MOOV)和媒体数据(MDAT)顺序情况下视频文件被删除后,正常的文件***扫描和文件格式扫描都无法正确恢复其数据的正确顺序的问题,本申请提供了一种恢复存储介质中视频文件的方法、***及可读存储介质。
为解决以上技术问题,本发明提供的技术方案是一种恢复存储介质中视频文件的方法,包括:
S11:逐簇扫描磁盘数据查找MDAT box和FTYP box;
S12:响应于查找到MDAT box,根据MDAT box获得MDAT box初始区域,逐簇检查MDAT box初始区域获得MDAT box实际区域,根据MDAT box实际区域建立MDAT对象并放入MDAT队列,返回S11;
S13:响应于查找到FTYP box,根据FTYP box获得FTYP box初始区域,检查FTYPbox初始区域获得FTYP box实际区域,根据FTYP box实际区域建立FTYP对象并放入FTYP队列,返回S11;
S14:响应于磁盘数据扫描完成,分别提取FTYP队列中的每一个FTYP对象与MDAT队列中的每一个MDAT对象重组视频文件,若重组的视频文件有效则视频文件恢复成功。
优选的,所述步骤S11的方法包括:
S111:读取当前簇的磁盘数据;
S112:查找当前簇的起始N个字节内是否出现MDAT box的特征码,若是,则进入S12,若否,进入S113;
S113:查找当前簇的起始N个字节内是否出现FTYP box的特征码,若是,则进入S13,若否,进入S114;
S114:判断当前簇是否为最后一个待扫描簇,若是,进入S14,若否,则跳转到下一个簇,返回S111;N为正整数。
优选的,所述步骤S12的方法包括:
S121:记录MDAT box所占的簇号为当前MDAT数据的起始簇号,根据MDAT box中的box大小计算MDAT box初始区域的占簇个数,进入S122;
S122:检查当前簇是否有以扇区对齐方式存放的预设类型数据,若否,则进入S124,若是,则根据当前簇的簇号和当前记录的MDAT数据的起始簇号计算当前MDAT数据的占簇个数并记录,当前簇不作为MDAT box初始区域的簇,进入S123;
S123:根据预设类型数据的大小,跳转到预设类型数据结束后的下一个簇作为MDAT box初始区域的簇,记录当前簇的簇号为当前MDAT数据的起始簇号,返回S122;
S124:检查当前簇是否为MDAT box初始区域的最后一个簇,若否,则跳转到MDATbox初始区域的下一个簇,返回S122;若是,则检查当前簇是否有FREE box,若是,则根据FREE box中的box大小计算FREE box的占簇个数,根据FREE box的占簇个数、当前簇的簇号和当前记录的MDAT数据的起始簇号计算当前MDAT数据的占簇个数并记录,进入S125,若否,则根据当前簇的簇号和当前记录的MDAT数据的起始簇号计算当前MDAT数据的占簇个数并记录,进入S125;
S125:将每一个MDAT数据的起始簇号和占簇个数作为一个MDAT对象放入MDAT队列中。
优选的,所述步骤S13的方法包括:
S131:记录FTYP box所占的簇号为当前FTYP数据的起始簇号,根据FTYP box中的box大小计算FTYP box初始区域的占簇个数,进入S132;
S132:跳转到FTYP box初始区域的最后一个簇,检查当前簇是否有FREE box,若是,则根据FREE box大小计算FREE box的占簇个数,根据FREE box的占簇个数、当前簇的簇号和当前记录的FTYP数据的起始簇号计算当前FTYP数据的占簇个数并记录,进入S133,若否,则根据当前簇的簇号和当前记录的FTYP数据的起始簇号计算当前FTYP数据的占簇个数并记录,进入S133;
S133:将每一个FTYP数据的起始簇号和占簇个数作为一个FTYP对象放入FTYP队列。
优选的,所述步骤S14的方法包括:
S141:提取FTYP队列中的一个FTYP对象与MDAT队列中的一个MDAT对象重组视频文件;
S142:判断重组的视频文件是否有效,若否,则进入S143,若是,则进入S144;
S143:提取MDAT队列中的下一个MDAT对象与当前FTYP对象重组视频文件,进入S142;
S144:从FTYP队列中删除重组成功的视频文件对应的FTYP对象,从MDAT队列中删除重组成功的视频文件对应的MDAT对象,进入S145:
S145:检查FTYP队列或MDAT队列是否为空,若是,则重组结束,若否,则返回S141。
本发明还提供一种恢复存储介质中视频文件的***,包括:
磁盘数据扫描模块,用于逐簇扫描磁盘数据查找MDAT box和FTYP box;
MDAT处理模块,响应于查找到MDAT box,用于根据MDAT box获得MDAT box初始区域,逐簇检查MDAT box初始区域获得MDAT box实际区域,根据MDAT box实际区域建立MDAT对象并放入MDAT队列,返回磁盘数据扫描模块;
FTYP处理模块,响应于查找到FTYP box,用于根据FTYP box获得FTYP box初始区域,检查FTYP box初始区域获得FTYP box实际区域,根据FTYP box实际区域建立FTYP对象并放入FTYP队列,返回磁盘数据扫描模块;
视频文件重组模块,响应于磁盘数据扫描完成,用于分别提取FTYP队列中的每一个FTYP对象与MDAT队列中的每一个MDAT对象重组视频文件,若重组的视频文件有效则视频文件恢复成功。
优选的,所述磁盘数据扫描模块包括:
磁盘数据读取单元,用于读取当前簇的磁盘数据;
MDAT数据查找单元,用于查找当前簇的起始N个字节内是否出现MDAT box的特征码,若是,则进入MDAT处理模块,若否,进入FTYP数据查找单元;
FTYP数据查找单元,用于查找当前簇的起始N个字节内是否出现FTYP box的特征码,若是,则进入FTYP处理模块,若否,进入数据扫描监控单元;
数据扫描监控单元,用于判断当前簇是否为最后一个待扫描簇,若是,进入视频文件重组模块,若否,则跳转到下一个簇,返回MDAT数据查找单元;N为正整数。
优选的,所述MDAT处理模块包括:
MDAT数据起始单元,用于记录MDAT box所占的簇号为当前MDAT数据的起始簇号,根据MDAT box中的box大小计算MDAT box初始区域的占簇个数,进入预设类型数据查找单元;
预设类型数据查找单元,用于检查当前簇是否有以扇区对齐方式存放的预设类型数据,若否,则进入FREE数据查找单元,若是,则根据当前簇的簇号和当前记录的MDAT数据的起始簇号计算当前MDAT数据的占簇个数并记录,当前簇不作为MDAT box初始区域的簇,进入MDAT box初始区域跳转单元;
MDAT box初始区域跳转单元,用于根据预设类型数据的大小,跳转到预设类型数据结束后的下一个簇作为MDAT box初始区域的簇,记录当前簇的簇号为当前MDAT数据的起始簇号,返回预设类型数据查找单元;
FREE数据查找单元,用于检查当前簇是否为MDAT box初始区域的最后一个簇,若否,则跳转到MDAT box初始区域的下一个簇,返回预设类型数据查找单元;若是,则检查当前簇是否有FREE box,若是,则根据FREE box中的box大小计算FREE box的占簇个数,根据FREE box的占簇个数、当前簇的簇号和当前记录的MDAT数据的起始簇号计算当前MDAT数据的占簇个数并记录,进入MDAT对象建立单元,若否,则根据当前簇的簇号和当前记录的MDAT数据的起始簇号计算当前MDAT数据的占簇个数并记录,进入MDAT对象建立单元;
MDAT对象建立单元,用于将每一个MDAT数据的起始簇号和占簇个数作为一个MDAT对象放入MDAT队列中。
本发明还提供一种恢复存储介质中视频文件的***,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序以实现如上述恢复存储介质中视频文件的方法的步骤。
本发明还提供一种可读存储介质,所述可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如上述恢复存储介质中视频文件的方法的步骤。
本申请与现有技术相比,其有益效果详细说明如下:本申请通过获得MDAT box实际区域建立MDAT对象并放入MDAT队列,获得FTYP box实际区域建立FTYP对象并放入FTYP队列,排列组合FTYP对象和MDAT对象重组视频文件获得有效的视频文件,解决删除了存储介质中的视频文件后不能成功恢复的问题。
附图说明
为了更清楚地说明本发明实施例,下面将对实施例中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种恢复存储介质中视频文件的方法流程示意图;
图2为本发明实施例提供的一种逐簇扫描磁盘数据查找MDAT box和FTYP box的方法流程示意图;
图3为本发明实施例提供的一种获得MDAT box实际区域的方法流程示意图;
图4为本发明实施例提供的一种获得FTYP box实际区域的方法流程示意图;
图5为本发明实施例提供的一种恢复存储介质中视频文件的***结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下,所获得的所有其他实施例,都属于本发明保护范围。
为了使本领域的技术人员更好地理解本发明的技术方案,下面结合附图和具体实施例对本发明作进一步的详细说明。
如图1所示,本发明实施例提供一种恢复存储介质中视频文件的方法,包括:
S11:逐簇扫描磁盘数据查找MDAT box和FTYP box;
S12:响应于查找到MDAT box,根据MDAT box获得MDAT box初始区域,逐簇检查MDAT box初始区域获得MDAT box实际区域,根据MDAT box实际区域建立MDAT对象并放入MDAT队列,返回S11;
S13:响应于查找到FTYP box,根据FTYP box获得FTYP box初始区域,检查FTYPbox初始区域获得FTYP box实际区域,根据FTYP box实际区域建立FTYP对象并放入FTYP队列,返回S11;
S14:响应于磁盘数据扫描完成,分别提取FTYP队列中的每一个FTYP对象与MDAT队列中的每一个MDAT对象重组视频文件,若重组的视频文件有效则视频文件恢复成功。
如图2所示,需要说明的是,步骤S11的方法包括:
S111:读取当前簇的磁盘数据;
S112:查找当前簇的起始N个字节内是否出现MDAT box的特征码,若是,则进入S12,若否,进入S113;
S113:查找当前簇的起始N个字节内是否出现FTYP box的特征码,若是,则进入S13,若否,进入S114;
S114:判断当前簇是否为最后一个待扫描簇,若是,进入S14,若否,则跳转到下一个簇,返回S111;N为正整数。
具体的,逐簇扫描用户磁盘数据,查找以扇区对齐的方式存放的媒体数据的起始box(MDAT)和以扇区对齐的方式存放的媒体描述的起始box(FTYP)。扇区对齐的方式是指在每个簇的起始扇区的开始几个字节,或者是距离该起始扇区起始位置一定长度的位置有该特征码。例如,以扇区对齐的方式存放的媒体数据,指的是在进行逐个簇扫描时,只要发现有距离起始扇区起始4个字节是“MDAT”标识的,则表明这个簇开始的数据就是媒体数据(MDAT)的box。因为FTYP box是我们MP4、MOV唯一的一个标识box,所以,如果在扫描一个簇的起始扇区时,发现在该扇区起始位置偏移4字节的地方,为“FTYP”标识的16进制(0x660x74 0x79 0x70),则表明该簇为FTYP box的起始簇。
如图3所示,需要说明的是,步骤S12的方法包括:
S121:记录MDAT box所占的簇号为当前MDAT数据的起始簇号,根据MDAT box中的box大小计算MDAT box初始区域的占簇个数,进入S122;
S122:检查当前簇是否有以扇区对齐方式存放的预设类型数据,若否,则进入S124,若是,则根据当前簇的簇号和当前记录的MDAT数据的起始簇号计算当前MDAT数据的占簇个数并记录,当前簇不作为MDAT box初始区域的簇,进入S123;
S123:根据预设类型数据的大小,跳转到预设类型数据结束后的下一个簇作为MDAT box初始区域的簇,记录当前簇的簇号为当前MDAT数据的起始簇号,返回S122;
S124:检查当前簇是否为MDAT box初始区域的最后一个簇,若否,则跳转到MDATbox初始区域的下一个簇,返回S122;若是,则检查当前簇是否有FREE box,若是,则根据FREE box中的box大小计算FREE box的占簇个数,根据FREE box的占簇个数、当前簇的簇号和当前记录的MDAT数据的起始簇号计算当前MDAT数据的占簇个数并记录,进入S125,若否,则根据当前簇的簇号和当前记录的MDAT数据的起始簇号计算当前MDAT数据的占簇个数并记录,进入S125;
S125:将每一个MDAT数据的起始簇号和占簇个数作为一个MDAT对象放入MDAT队列中。
这里,最终获得的MDAT队列即为MDAT box实际区域,其中包含了组成MDAT box的各个MDAT数据的起始簇号和占簇个数。
具体的,根据得到的MDAT数据起始box中表明的该box的大小,计算MDAT box初始区域的大小,即占簇个数。逐簇扫描MDAT box初始区域确定MDAT box实际区域,因为MDATbox初始区域内可能***有其他文件数据,而不是连续的整块的MDAT数据,通过逐簇扫描MDAT box初始区域才能获得MDAT box实际区域,在MDAT box初始区域的最后一个簇,如果接着存放有FREE填充数据,我们要将FREE填充数据作为MDAT box初始区域,因为不保留FREE填充数据,会导致重组的视频文件无法播放。例如计算出MDAT box初始区域的大小为5个簇,开始逐簇扫描,首先记录第一个MDAT数据的起始簇号,然后发现了其他文件数据区域,则记录第一个MDAT数据占了2个簇,发现其他文件数据区域占了2个簇,跳转到其他文件数据结束后的第一个簇,记录为第二个MDAT数据的起始簇号,因为MDAT box初始区域一共是5个簇,那就知道第二个MDAT数据占了3个簇,在第二个MDAT数据的最后一个簇的时候扫描发现有FREE box,则计算FREE数据的占簇个数,发现是1个簇,则需要将FREE数据的占簇个数加在第二个MDAT数据的占簇个数上,一共4个簇作为第二个MDAT数据的占簇个数并记录。我们记录每一个MDAT数据的起始簇号和占簇个数,建立MDAT对象,MDAT对象形成MDAT队列用于重组视频文件。上述6个簇的MDAT box初始区域扫描完成后,就跳转到下一个簇,继续逐簇扫描磁盘数据查找MDAT box和FTYP box。
预设类型数据是指预设多个可能出现的其他文件数据的格式方式,可以包括jpg文件、日志文件、cr2文件、FDT项数据等熟悉文件格式,如果找到有以扇区对齐方式存放的预设类型数据,则根据该预设类型数据的起始位置簇号,和当前记录的MDAT数据的起始簇号,计算当前MDAT数据的占簇个数,例如当前记录的MDAT数据的起始簇号1001,该预设类型数据的起始位置簇号为1003,则计算当前MDAT数据的占簇个数为1003-1001=2,即当前MDAT数据的占簇个数为2。然后通过分析该预设类型数据的方式,求出其所占空间的大小,即占簇个数,从当前簇跳过预设类型数据所占的簇,到达下一个簇作为MDAT box初始区域的下一个簇,再逐簇扫描。若没找到以扇区对齐方式存放的预设类型数据,可省略该步骤。查找预设类型数据的方式就是看预设类型文件的特征码是否存放在每个簇的起始扇区的开始几个字节,或者是距离该起始扇区起始位置一定长度的位置上。比如.png文件,其文件起始位置有表明该文件是png的“PNG”;比如.exe文件,其文件起始位置有表明是PE格式的标识“MZ”;比如.jpg文件,其文件起始位置有表明是jpg格式的标识“JFIF”、“FFD8FFE0”等表明是JPG格式的标识;综上可知,以扇区对齐方式存放的其它文件数据,也就是识别我们熟悉的文件的特征码,是否在簇的起始扇区起始的几个字节,如果发现当前簇预设类型数据,则按照程序跳过这个预设类型数据。
如图4所示,需要说明的是,步骤S13的方法包括:
S131:记录FTYP box所占的簇号为当前FTYP数据的起始簇号,根据FTYP box中的box大小计算FTYP box初始区域的占簇个数,进入S132;
S132:跳转到FTYP box初始区域的最后一个簇,检查当前簇是否有FREE box,若是,则根据FREE box大小计算FREE box的占簇个数,根据FREE box的占簇个数、当前簇的簇号和当前记录的FTYP数据的起始簇号计算当前FTYP数据的占簇个数并记录,进入S133,若否,则根据当前簇的簇号和当前记录的FTYP数据的起始簇号计算当前FTYP数据的占簇个数并记录,进入S133;
S133:将每一个FTYP数据的起始簇号和占簇个数作为一个FTYP对象放入FTYP队列。
具体的,这里,最终获得的FTYP队列即为FTYP box实际区域,其中包含了组成FTYPbox的各个FTYP数据的起始簇号和占簇个数。
具体的,根据得到的FTYP起始box中表明的该box的大小,计算FTYP box初始区域的大小,即占簇个数。扫描FTYP box初始区域确定FTYP box实际区域,因为FTYP box初始区域内不会***其他文件数据,而是连续的整块的FTYP box初始区域,就不需要逐簇扫描FTYP box初始区域,只需要检查FTYP box初始区域的最后一个簇,如果最后一个簇内存放有FREE填充数据,我们要将FREE填充数据作为FTYP box初始区域,因为不保留FREE填充数据,会导致重组的视频文件无法播放。例如计算出FTYP box初始区域的大小为2个簇,在最后一个簇扫描的时候发现有FREE box,则计算FREE数据的占簇个数,发现是1个簇,则需要加在FTYP数据的占簇个数上,将3个簇作为FTYP数据的占簇个数。我们记录每一个FTYP数据的起始簇号和占簇个数,建立FTYP对象,FTYP对象形成FTYP队列用于重组视频文件。3个簇的FTYP box初始区域扫描完成后,就跳转到下一个簇,继续逐簇扫描磁盘数据查找MDATbox和FTYP box。
需要说明的是,步骤S14的方法包括:
S141:提取FTYP队列中的一个FTYP对象与MDAT队列中的一个MDAT对象重组视频文件;
S142:判断重组的视频文件是否有效,若否,则进入S143,若是,则进入S144;
S143:提取MDAT队列中的下一个MDAT对象与当前FTYP对象重组视频文件,进入S142;
S144:从FTYP队列中删除重组成功的视频文件对应的FTYP对象,从MDAT队列中删除重组成功的视频文件对应的MDAT对象,进入S145:
S145:检查FTYP队列或MDAT队列是否为空,若是,则重组结束,若否,则返回S141。
具体的,把磁盘数据全部扫描分析完后,通过重组视频文件,判断重组的视频文件的有效性,可以找出其真实有效的FTYP和MDAT的组合。比如我们发现一个1.MOV文件的媒体数据(MDAT),其由3部分簇号组成,1000-1010、1030-1040、1060-1070,那么,我们的媒体数据对象的存储队列list里面就有这样的存储方式: 1000:11,1030:11,1060:11。还发现1.MOV文件的媒体描述(FTYP),其由一部分簇号组成,1071-1072,那么我们的媒体描述的队列list里面就有这样的存储方式:1071:2。排列组合的时候,将FTYP对象的磁盘数据+1号MDAT、2号MDAT、3号MDAT对象的磁盘数据,分别组成一个新的MOV文件,通过判断这个MOV是否有效,来判定哪个组合有效。
假设有4个FTYP对象,4个MDAT对象,排列组合的方法是:1号FTYP,分别和 1号MDAT、2号MDAT、3号MDAT、4号MDAT进行组合,即根据1号FTYP对象中的起始簇号和占用大小,读取其在磁盘上的数据,然后再分别读取1号 MDAT、2号MDAT、3号MDAT、4号MDAT 对象所在磁盘中的数据,通过把1号FTYP对象的磁盘数据+1号 MDAT、2号MDAT、3号MDAT、4号MDAT 对象的磁盘数据,分别组成一个新的MP4或者MOV文件,通过判断这个MP4或者MOV是否有效,来判定该组合是否有效。2号FTYP、3号FTYP、4号FTYP的组合和1号FTYP的组合方法一样,可以获得4个有效的视频文件。
判断组合的视频文件是否有效,首先我们判断重组的FTYP和MDAT所对应的MOV或者MP4文件的视频首帧是否能提取出图片,如果能,我们再通过分析该MOV或者MP4文件末尾定义的chunk offset表所定义的每个chunk相对于文件起始位置是否正确。如果chunkoffset表中定义的每个chunk都能从重组的MP4或者MOV文件中定位到,则认为重组的FTYP和MDAT是一个有效的组合。然后我们程序自动从我们的FTYP和MDAT队列中移除掉该FTYP对象和MDAT对象,如果有多个FTYP和MDAT对象,则继续进行重组和判断。
如图5所示,本发明实施例还提供一种恢复存储介质中视频文件的***,包括:
磁盘数据扫描模块21,用于逐簇扫描磁盘数据查找MDAT box和FTYP box;
MDAT处理模块22,响应于查找到MDAT box,用于根据MDAT box获得MDAT box初始区域,逐簇检查MDAT box初始区域获得MDAT box实际区域,根据MDAT box实际区域建立MDAT对象并放入MDAT队列,返回磁盘数据扫描模块;
FTYP处理模块23,响应于查找到FTYP box,用于根据FTYP box获得FTYP box初始区域,检查FTYP box初始区域获得FTYP box实际区域,根据FTYP box实际区域建立FTYP对象并放入FTYP队列,返回磁盘数据扫描模块;
视频文件重组模块24,响应于磁盘数据扫描完成,用于分别提取FTYP队列中的每一个FTYP对象与MDAT队列中的每一个MDAT对象重组视频文件,若重组的视频文件有效则视频文件恢复成功。
需要说明的是,磁盘数据扫描模块21包括:
磁盘数据读取单元,用于读取当前簇的磁盘数据;
MDAT数据查找单元,用于查找当前簇的起始N个字节内是否出现MDAT box的特征码,若是,则进入MDAT处理模块,若否,进入FTYP数据查找单元;
FTYP数据查找单元,用于查找当前簇的起始N个字节内是否出现FTYP box的特征码,若是,则进入FTYP处理模块,若否,进入数据扫描监控单元;
数据扫描监控单元,用于判断当前簇是否为最后一个待扫描簇,若是,进入视频文件重组模块,若否,则跳转到下一个簇,返回MDAT数据查找单元;N为正整数。
需要说明的是,MDAT处理模块22包括:
MDAT数据起始单元,用于记录MDAT box所占的簇号为当前MDAT数据的起始簇号,根据MDAT box中的box大小计算MDAT box初始区域的占簇个数,进入预设类型数据查找单元;
预设类型数据查找单元,用于检查当前簇是否有以扇区对齐方式存放的预设类型数据,若否,则进入FREE数据查找单元,若是,则根据当前簇的簇号和当前记录的MDAT数据的起始簇号计算当前MDAT数据的占簇个数并记录,当前簇不作为MDAT box初始区域的簇,进入MDAT box初始区域跳转单元;
MDAT box初始区域跳转单元,用于根据预设类型数据的大小,跳转到预设类型数据结束后的下一个簇作为MDAT box初始区域的簇,记录当前簇的簇号为当前MDAT数据的起始簇号,返回预设类型数据查找单元;
FREE数据查找单元,用于检查当前簇是否为MDAT box初始区域的最后一个簇,若否,则跳转到MDAT box初始区域的下一个簇,返回预设类型数据查找单元;若是,则检查当前簇是否有FREE box,若是,则根据FREE box中的box大小计算FREE box的占簇个数,根据FREE box的占簇个数、当前簇的簇号和当前记录的MDAT数据的起始簇号计算当前MDAT数据的占簇个数并记录,进入MDAT对象建立单元,若否,则根据当前簇的簇号和当前记录的MDAT数据的起始簇号计算当前MDAT数据的占簇个数并记录,进入MDAT对象建立单元;
MDAT对象建立单元,用于将每一个MDAT数据的起始簇号和占簇个数作为一个MDAT对象放入MDAT队列中。
需要说明的是,FTYP处理模块23包括:
FTYP数据起始单元,用于记录FTYP box所占的簇号为当前FTYP数据的起始簇号,根据FTYP box中的box大小计算FTYP box初始区域的占簇个数,进入FREE数据查找单元;
FREE数据查找单元,用于跳转到FTYP box初始区域的最后一个簇,检查当前簇是否有FREE box,若是,则根据FREE box大小计算FREE box的占簇个数,根据FREE box的占簇个数、当前簇的簇号和当前记录的FTYP数据的起始簇号计算当前FTYP数据的占簇个数并记录,进入FTYP对象建立单元,若否,则根据当前簇的簇号和当前记录的FTYP数据的起始簇号计算当前FTYP数据的占簇个数并记录,进入FTYP对象建立单元;
FTYP对象建立单元,用于将每一个FTYP数据的起始簇号和占簇个数作为一个FTYP对象放入FTYP队列。
本发明实施例还提供一种恢复存储介质中视频文件的***,包括:存储器,用于存储计算机程序;处理器,用于执行计算机程序以实现上述恢复存储介质中视频文件的方法的步骤。
本发明实施例还提供一种可读存储介质,可读存储介质存储有计算机程序,计算机程序被处理器执行时实现上述恢复存储介质中视频文件的方法的步骤。
图5所对应实施例中特征的说明可以参见图1-图4所对应实施例的相关说明,这里不再一一赘述。
以上对本发明实施例所提供的一种恢复存储介质中视频文件的方法、***和可读存储介质进行了详细介绍。说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
Claims (8)
1.一种恢复存储介质中视频文件的方法,其特征在于,包括:
S11:逐簇扫描磁盘数据查找MDATbox和FTYPbox;
S12:响应于查找到MDATbox,根据MDATbox获得MDATbox初始区域,逐簇检查MDATbox初始区域获得MDATbox实际区域,根据MDATbox实际区域建立MDAT对象并放入MDAT队列,返回S11;
S13:响应于查找到FTYPbox,根据FTYPbox获得FTYPbox初始区域,检查FTYPbox初始区域获得FTYPbox实际区域,根据FTYPbox实际区域建立FTYP对象并放入FTYP队列,返回S11;
S14:响应于磁盘数据扫描完成,分别提取FTYP队列中的每一个FTYP对象与MDAT队列中的每一个MDAT对象重组视频文件,若重组的视频文件有效则视频文件恢复成功;
所述步骤S12的方法包括:
S121:记录MDATbox所占的簇号为当前MDAT数据的起始簇号,根据MDAT box中的box大小计算MDATbox初始区域的占簇个数,进入S122;
S122:检查当前簇是否有以扇区对齐方式存放的预设类型数据,若否,则进入S124,若是,则根据当前簇的簇号和当前记录的MDAT数据的起始簇号计算当前MDAT数据的占簇个数并记录,当前簇不作为MDATbox初始区域的簇,进入S123;
S123:根据预设类型数据的大小,跳转到预设类型数据结束后的下一个簇作为MDATbox初始区域的簇,记录当前簇的簇号为当前MDAT数据的起始簇号,返回S122;
S124:检查当前簇是否为MDATbox初始区域的最后一个簇,若否,则跳转到MDATbox初始区域的下一个簇,返回S122;若是,则检查当前簇是否有FREEbox,若是,则根据FREEbox中的box大小计算FREEbox的占簇个数,根据FREEbox的占簇个数、当前簇的簇号和当前记录的MDAT数据的起始簇号计算当前MDAT数据的占簇个数并记录,进入S125,若否,则根据当前簇的簇号和当前记录的MDAT数据的起始簇号计算当前MDAT数据的占簇个数并记录,进入S125;
S125:将每一个MDAT数据的起始簇号和占簇个数作为一个MDAT对象放入MDAT队列中。
2.根据权利要求1所述的恢复存储介质中视频文件的方法,其特征在于,所述步骤S11的方法包括:
S111:读取当前簇的磁盘数据;
S112:查找当前簇的起始N个字节内是否出现MDATbox的特征码,若是,则进入S12,若否,进入S113;
S113:查找当前簇的起始N个字节内是否出现FTYPbox的特征码,若是,则进入S13,若否,进入S114;
S114:判断当前簇是否为最后一个待扫描簇,若是,进入S14,若否,则跳转到下一个簇,返回S111;N为正整数。
3.根据权利要求1所述的恢复存储介质中视频文件的方法,其特征在于,所述步骤S13的方法包括:
S131:记录FTYPbox所占的簇号为当前FTYP数据的起始簇号,根据FTYPbox中的box大小计算FTYPbox初始区域的占簇个数,进入S132;
S132:跳转到FTYPbox初始区域的最后一个簇,检查当前簇是否有FREEbox,若是,则根据FREEbox大小计算FREEbox的占簇个数,根据FREEbox的占簇个数、当前簇的簇号和当前记录的FTYP数据的起始簇号计算当前FTYP数据的占簇个数并记录,进入S133,若否,则根据当前簇的簇号和当前记录的FTYP数据的起始簇号计算当前FTYP数据的占簇个数并记录,进入S133;
S133:将每一个FTYP数据的起始簇号和占簇个数作为一个FTYP对象放入FTYP队列。
4.根据权利要求1所述的恢复存储介质中视频文件的方法,其特征在于,所述步骤S14的方法包括:
S141:提取FTYP队列中的一个FTYP对象与MDAT队列中的一个MDAT对象重组视频文件;
S142:判断重组的视频文件是否有效,若否,则进入S143,若是,则进入S144;
S143:提取MDAT队列中的下一个MDAT对象与当前FTYP对象重组视频文件,进入S142;
S144:从FTYP队列中删除重组成功的视频文件对应的FTYP对象,从MDAT队列中删除重组成功的视频文件对应的MDAT对象,进入S145:
S145:检查FTYP队列或MDAT队列是否为空,若是,则重组结束,若否,则返回S141。
5.一种恢复存储介质中视频文件的***,其特征在于,包括:
磁盘数据扫描模块,用于逐簇扫描磁盘数据查找MDATbox和FTYPbox;
MDAT处理模块,响应于查找到MDATbox,用于根据MDATbox获得MDAT box初始区域,逐簇检查MDATbox初始区域获得MDATbox实际区域,根据MDAT box实际区域建立MDAT对象并放入MDAT队列,返回磁盘数据扫描模块;
FTYP处理模块,响应于查找到FTYPbox,用于根据FTYPbox获得FTYPbox初始区域,检查FTYPbox初始区域获得FTYPbox实际区域,根据FTYPbox实际区域建立FTYP对象并放入FTYP队列,返回磁盘数据扫描模块;
视频文件重组模块,响应于磁盘数据扫描完成,用于分别提取FTYP队列中的每一个FTYP对象与MDAT队列中的每一个MDAT对象重组视频文件,若重组的视频文件有效则视频文件恢复成功;
所述MDAT处理模块包括:
MDAT数据起始单元,用于记录MDATbox所占的簇号为当前MDAT数据的起始簇号,根据MDATbox中的box大小计算MDATbox初始区域的占簇个数,进入预设类型数据查找单元;
预设类型数据查找单元,用于检查当前簇是否有以扇区对齐方式存放的预设类型数据,若否,则进入FREE数据查找单元,若是,则根据当前簇的簇号和当前记录的MDAT数据的起始簇号计算当前MDAT数据的占簇个数并记录,当前簇不作为MDATbox初始区域的簇,进入MDATbox初始区域跳转单元;
MDATbox初始区域跳转单元,用于根据预设类型数据的大小,跳转到预设类型数据结束后的下一个簇作为MDATbox初始区域的簇,记录当前簇的簇号为当前MDAT数据的起始簇号,返回预设类型数据查找单元;
FREE数据查找单元,用于检查当前簇是否为MDATbox初始区域的最后一个簇,若否,则跳转到MDATbox初始区域的下一个簇,返回预设类型数据查找单元;若是,则检查当前簇是否有FREEbox,若是,则根据FREEbox中的box大小计算FREEbox的占簇个数,根据FREEbox的占簇个数、当前簇的簇号和当前记录的MDAT数据的起始簇号计算当前MDAT数据的占簇个数并记录,进入MDAT对象建立单元,若否,则根据当前簇的簇号和当前记录的MDAT数据的起始簇号计算当前MDAT数据的占簇个数并记录,进入MDAT对象建立单元;
MDAT对象建立单元,用于将每一个MDAT数据的起始簇号和占簇个数作为一个MDAT对象放入MDAT队列中。
6.根据权利要求5所述的恢复存储介质中视频文件的***,其特征在于,所述磁盘数据扫描模块包括:
磁盘数据读取单元,用于读取当前簇的磁盘数据;
MDAT数据查找单元,用于查找当前簇的起始N个字节内是否出现MDATbox的特征码,若是,则进入MDAT处理模块,若否,进入FTYP数据查找单元;
FTYP数据查找单元,用于查找当前簇的起始N个字节内是否出现FTYPbox的特征码,若是,则进入FTYP处理模块,若否,进入数据扫描监控单元;
数据扫描监控单元,用于判断当前簇是否为最后一个待扫描簇,若是,进入视频文件重组模块,若否,则跳转到下一个簇,返回MDAT数据查找单元;N为正整数。
7.一种恢复存储介质中视频文件的***,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序以实现如权利要求1至4中任一项所述恢复存储介质中视频文件的方法的步骤。
8.一种可读存储介质,其特征在于,所述可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至4中任一项所述恢复存储介质中视频文件的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010000181.3A CN110781037B (zh) | 2020-01-02 | 2020-01-02 | 恢复存储介质中视频文件的方法、***及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010000181.3A CN110781037B (zh) | 2020-01-02 | 2020-01-02 | 恢复存储介质中视频文件的方法、***及可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110781037A CN110781037A (zh) | 2020-02-11 |
CN110781037B true CN110781037B (zh) | 2020-04-17 |
Family
ID=69394770
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010000181.3A Active CN110781037B (zh) | 2020-01-02 | 2020-01-02 | 恢复存储介质中视频文件的方法、***及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110781037B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112416873B (zh) * | 2020-11-18 | 2024-05-28 | 万兴科技集团股份有限公司 | 视频碎片文件的恢复方法、装置、计算机设备及存储介质 |
CN112732180B (zh) * | 2020-12-29 | 2023-04-14 | 哈尔滨海能达科技有限公司 | 一种信息处理方法、处理装置、电子设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103678026A (zh) * | 2012-09-18 | 2014-03-26 | 杭州海康威视***技术有限公司 | 可修复的视频监控数据存储和修复方法及其装置 |
CN109656929A (zh) * | 2018-12-25 | 2019-04-19 | 四川效率源信息安全技术股份有限公司 | 一种雕复关系型数据库文件的方法及装置 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011142585A (ja) * | 2010-01-08 | 2011-07-21 | Sony Corp | 画像処理装置、情報記録媒体、および画像処理方法、並びにプログラム |
CN104063447B (zh) * | 2014-06-17 | 2018-04-17 | 惠州华阳通用电子有限公司 | 一种监控视频文件修复方法 |
CN105447168B (zh) * | 2015-12-04 | 2019-03-22 | 四川效率源信息安全技术股份有限公司 | Mp4格式的碎片文件恢复与重组的方法 |
CN109936715B (zh) * | 2017-12-19 | 2021-09-03 | 华为技术有限公司 | 一种mp4文件的处理方法及其相关设备 |
CN108093299B (zh) * | 2017-12-22 | 2020-08-04 | 厦门市美亚柏科信息股份有限公司 | Mp4损坏文件的修复方法及存储介质 |
-
2020
- 2020-01-02 CN CN202010000181.3A patent/CN110781037B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103678026A (zh) * | 2012-09-18 | 2014-03-26 | 杭州海康威视***技术有限公司 | 可修复的视频监控数据存储和修复方法及其装置 |
CN109656929A (zh) * | 2018-12-25 | 2019-04-19 | 四川效率源信息安全技术股份有限公司 | 一种雕复关系型数据库文件的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN110781037A (zh) | 2020-02-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20090024644A1 (en) | Extended Multimedia File Structure and Multimedia File Producting Method and Multimedia File Executing Method | |
CN100391260C (zh) | 处理mpeg流以***文件索引的***和方法 | |
CN110781037B (zh) | 恢复存储介质中视频文件的方法、***及可读存储介质 | |
US20090271398A1 (en) | Method and system for recognition of video content | |
US20180316977A1 (en) | Apparatus and method for delivering and receiving multimedia data in hybrid network | |
KR100643050B1 (ko) | 영상 기록 재생 장치 및 방법, 디스크, 및 영상 재생 장치 | |
US20150186388A1 (en) | Subtitle processing method, device and system and storage medium | |
CN114007112B (zh) | 一种针对MP4视频文件中mdat box数据错误的修复方法 | |
US20120027380A1 (en) | Automatically bookmarking digital content | |
CN101188764A (zh) | 对运动进行智能搜索的图像重放装置及其使用方法 | |
US20080013829A1 (en) | System and method for the identification of motional media in players and recorders without Internet access | |
KR101163774B1 (ko) | 비디오 압축용 장치 및 프로세스 | |
US20210099772A1 (en) | System and method for verification of video integrity based on blockchain | |
CN110839135B (zh) | 一种用于dv或hdv视频文件的恢复方法和*** | |
CN1791174A (zh) | 用于在移动通信终端管理图像文件的方法 | |
Casey et al. | Design tradeoffs for developing fragmented video carving tools | |
KR101632689B1 (ko) | 멀티미디어 조각파일의 복구방법 | |
CN113569719B (zh) | 视频侵权判定方法、装置、存储介质及电子设备 | |
CN114257840B (zh) | 一种用于Matroska格式视频的修复方法和*** | |
CN113852857B (zh) | 一种基于html5视频帧步进时的声音播放方法及*** | |
CN112929686B (zh) | 线上实时回放录制视频的方法及装置 | |
Alghafli et al. | Techniques for measuring the probability of adjacency between carved video fragments: The VidCarve approach | |
CN111028135B (zh) | 一种图像文件修复方法 | |
CN114328392A (zh) | 一种广告媒体素材管理***、方法、设备和介质 | |
CN112416873B (zh) | 视频碎片文件的恢复方法、装置、计算机设备及存储介质 |
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 |