会员体验
专利管家(专利管理)
工作空间(专利管理)
风险监控(情报监控)
数据分析(专利分析)
侵权分析(诉讼无效)
联系我们
交流群
官方交流:
QQ群: 891211   
微信请扫码    >>>
现在联系顾问~

一种修复MP4文件的方法、装置以及存储介质

申请号 CN202111651676.3 申请日 2021-12-30 公开(公告)号 CN114446330B 公开(公告)日 2024-04-16
申请人 厦门市美亚柏科信息股份有限公司; 发明人 梁德荣; 黄志炜; 沈长达; 张洪彬;
摘要 本 发明 公开了一种修复MP4文件的方法、装置以及存储介质,所述方法包括:获取参照文件;获取与待修复MP4文件对应的文件系统中的所有未分配簇作为未分配簇集合;根据参照文件的 视频编码 格式的结构特征扫描未分配簇集合,得到MP4格式的 视频 帧 列表,视频帧列表包含一个或多个视频帧;遍历视频帧列表,判断视频帧列表中的不同视频帧是否连续,将连续的视频帧归为同一个目标视频,不连续的视频帧归为不同的目标视频,得到目标视频集合,目标视频集合包含一个或多个目标视频,目标视频包含一个或多个占用簇;使用参照文件分别修复目标视频集合中的每一个目标视频的所有占用簇,得到一个或多个修复后的MP4文件。
权利要求

1.一种修复MP4文件的方法,其特征在于,包括步骤:
S1,获取参照文件,所述参照文件为与待修复MP4文件同源或参数相同的MP4文件;
S2,获取与待修复MP4文件对应的文件系统中的所有未分配簇作为未分配簇集合,视频包括以下参数:起始地址FrameOffset、帧长度FrameLength、帧类型FrameType和帧序号FrameNum;
S3,根据所述参照文件的视频编码格式的结构特征扫描所述未分配簇集合,得到MP4格式的视频帧列表,对所述视频帧列表包含的一个或多个视频帧,按所述视频帧的所述起始地址从小到大进行排序;
S4,遍历所述视频帧列表,根据所述视频帧列表中不同视频帧的帧序号FrameNum、起始地址的簇号ClusterNum、簇内的偏移地址ClusterOffset和/或下一视频帧在簇内的偏移地址ClusterOffset2,判断不同的所述视频帧是否连续;将不连续的视频帧归为不同的目标视频,在确定两个视频帧连续的情况下,判断两个视频帧之间的间隔数据是否为帧头用户定义数据或音频帧数据,若是,则将连续的两个视频帧归为同一个目标视频,得到目标视频集合,所述目标视频集合包含一个或多个目标视频,所述目标视频包含一个或多个占用簇,每个所述目标视频的簇号列表在遍历所述视频帧列表的过程中确定;
S5,解析所述参照文件,使用所述参照文件分别修复所述目标视频集合中的每一个目标视频的簇号列表中的所有簇,得到一个或多个修复后的MP4文件。
2.根据权利要求1所述的方法,其特征在于,在所述MP4文件的同一组视频帧序列中,所述视频帧的帧序号FrameNum从0开始计数,连续两个所述视频帧的后一个视频帧的帧序号FrameNum是前一个视频帧的帧序号FrameNum加1。
3.根据权利要求1所述的方法,其特征在于,所述步骤S4还包括计算所述视频帧的起始地址的簇号ClusterNum=FrameOffset/ClusterSize,其中ClusterSize表示所述文件系统的簇大小,所述视频帧占用的簇数量ClusterCnt=(FrameOffset+FrameLength)/ClusterSize‑ClusterNum+1,所述视频帧在簇内的偏移地址ClusterOffset=FrameOffset%ClusterSize,所述视频帧的下一视频帧在簇内的偏移地址ClusterOffset2=(FrameOffset+FrameLength)%ClusterSize。
4.根据权利要求1所述的方法,其特征在于,通过计算所述视频帧的起始地址的簇号ClusterNum和所述视频帧占用的簇数量ClusterCnt,得到所述目标视频的占用簇。
5.根据权利要求1所述的方法,其特征在于,所述参照文件的视频编码格式为H264编码格式。
6.一种修复MP4文件的装置,其特征在于,包括存储器和处理器,所述存储器存储有至少一段程序,所述至少一段程序由所述处理器执行以实现如权利要求1至5任一所述的修复MP4文件的方法。
7.一种计算机可读存储介质,其特征在于,所述存储介质中存储有至少一段程序,所述至少一段程序由处理器执行以实现如权利要求1至5任一所述的修复MP4文件的方法。

说明书全文

一种修复MP4文件的方法、装置以及存储介质

技术领域

[0001] 本发明涉及数据恢复技术领域,尤其涉及一种修复MP4文件的方法、装置以及存储介质。

背景技术

[0002] 目前文件恢复方法通常有基于文件系统索引的快速恢复方法和基于文件签名的签名恢复方法。很多文件系统在文件删除后索引被清空,如FAT32文件系统或者索引被覆盖、丢失,导致快速恢复方法无法恢复被删除的文件。基于文件签名的签名恢复方法需要文件在存储介质中的存储具有连续性,而视频文件因为文件较大,很难保证文件的连续性,或者多个通道同时录制视频的行车记录,执法记录仪,监控视频等在存储设备上是交错存储的。因此针对索引丢失或者存储不连续的视频文件的恢复通过传统的恢复方法基本无法恢复。
[0003] MP4格式是当前使用最广泛的一种视频格式,针对MP4视频文件还有一种传统的参照文件恢复方法,通过参照文件修复整个磁盘的未分配空间的恢复方法,但是当视频文件在存储介质中存在较多碎片时,因视频被碎片分割导致播放花屏,特别是关键帧被破坏导致整个修复后的视频帧序列播放花屏,且若两个视频文件交错存储,无法分离两个视频文件,导致修复后的视频播放错乱。

发明内容

[0004] 为了克服如上所述的技术问题,本发明提出一种修复MP4文件的方法,所述方法的技术方案如下:
[0005] S1,获取参照文件,所述参照文件为与待修复MP4文件同源或参数相同的MP4文件;
[0006] S2,获取与待修复MP4文件对应的文件系统中的所有未分配簇作为未分配簇集合;
[0007] S3,根据所述参照文件的视频编码格式的结构特征扫描所述未分配簇集合,得到MP4格式的视频帧列表,所述视频帧列表包含一个或多个视频帧;
[0008] S4,遍历所述视频帧列表,判断所述视频帧列表中的不同视频帧是否连续,将连续的视频帧归为同一个目标视频,不连续的视频帧归为不同的目标视频,得到目标视频集合,所述目标视频集合包含一个或多个目标视频,所述目标视频包含一个或多个占用簇;
[0009] S5,使用所述参照文件分别修复所述目标视频集合中的每一个目标视频的所有占用簇,得到一个或多个修复后的MP4文件。
[0010] 进一步的,所述视频帧包括以下参数:起始地址FrameOffset、帧长度FrameLength、帧类型FrameType和帧序号FrameNum。
[0011] 进一步的,所述步骤S3还包括对所述视频帧集合按所述视频帧的所述起始地址从小到大进行排序。
[0012] 进一步的,在所述MP4文件的同一组视频帧序列中,所述视频帧的帧序号FrameNum从0开始计数,连续两个所述视频帧的后一个视频帧的帧序号FrameNum是前一个视频帧的帧序号FrameNum加1。
[0013] 进一步的,所述步骤S4还包括计算所述视频帧的起始地址的簇号ClusterNum=FrameOffset/ClusterSize,其中ClusterSize表示所述文件系统的簇大小,所述视频帧占用的簇数量ClusterCnt=(FrameOffset+FrameLength)/ClusterSize‑ClusterNum+1,所述视频帧在簇内的偏移地址ClusterOffset=FrameOffset%ClusterSize,所述视频帧的下一视频帧在簇内的偏移地址ClusterOffset2=(FrameOffset+FrameLength)%ClusterSize。
[0014] 进一步的,根据所述视频帧的帧序号FrameNum、起始地址的簇号ClusterNum、簇内的偏移地址ClusterOffset和/或下一视频帧在簇内的偏移地址ClusterOffset2,判断不同的所述视频帧是否连续,如果连续,则不同的所述视频帧属于同一个目标视频,否则不同的所述视频帧属于不同的目标视频。
[0015] 进一步的,通过计算所述视频帧的起始地址的簇号ClusterNum和所述视频帧占用的簇数量ClusterCnt,得到所述目标视频的占用簇。
[0016] 进一步的,所述参照文件的视频编码格式为H264编码格式。
[0017] 本发明还提出一种修复MP4文件的装置,所述修复MP4文件的装置存储计算机指令;所述计算机指令在修复MP4文件的装置执行如上述任一项所述的修复MP4文件的方法。
[0018] 本发明还提出了一种计算机可读存储介质,所述计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如上述任一项所述的修复MP4文件的方法。
[0019] 本发明提供的技术方案带来的有益效果是:
[0020] 本发明的一种修复MP4文件的方法和装置,能够尽可能地对属于同一个视频文件的视频碎片进行重组,经过重组后再修复视频碎片,达到修复后的视频播放不花屏,不串通道的效果。附图说明
[0021] 图1为本发明实施例的一种修复MP4文件的流程图
[0022] 图2为本发明实施例的使用参照文件修复MP4文件的流程图;
[0023] 图3为本发明实施例的文件在磁盘中分布的示意图;
[0024] 图4为本发明实施例的文件删除后在磁盘的未分配空间形成碎片的示意图;
[0025] 图5为本发明实施例的MP4文件格式的逻辑结构示意图;
[0026] 图6为本发明实施例的H264/H265视频帧格式的示意图;
[0027] 图7为本发明实施例的视频帧和音频帧在同一个簇内的结构示意图;
[0028] 图8为本发明实施例的视频帧跨连续簇的结构示意图;
[0029] 图9为本发明实施例的视频帧跨多个连续簇的结构示意图;
[0030] 图10为本发明实施例的视频帧跨不连续簇的结构示意图;
[0031] 图11为本发明实施例的音频帧跨连续簇的结构示意图;
[0032] 图12为本发明实施例的音频帧跨不连续簇的结构示意图;
[0033] 图13为本发明实施例所涉及的一种修复MP4文件的装置结构示意图。

具体实施方式

[0034] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
[0035] 实施例一:
[0036] 如图1所示为本发明实施例的一种修复MP4文件的流程图,示出了该方法的具体实施步骤,包括:
[0037] S1,获取作为参照文件,所述参照文件为与待修复MP4文件同源或参数相同的MP4文件;
[0038] S2,获取与待修复MP4文件对应的文件系统中的所有未分配簇作为未分配簇集合;
[0039] S3,根据所述参照文件的视频编码格式的结构特征扫描所述未分配簇集合,得到MP4格式的视频帧列表,所述视频帧列表包含一个或多个视频帧;
[0040] S4,遍历所述视频帧列表,判断所述视频帧列表中的不同视频帧是否连续,将连续的视频帧归为同一个目标视频,不连续的视频帧归为不同的目标视频,得到目标视频集合,所述目标视频集合包含一个或多个目标视频,所述目标视频包含一个或多个占用簇;
[0041] S5,使用所述参照文件分别修复所述目标视频集合中的每一个目标视频的所有占用簇,得到一个或多个修复后的MP4文件。
[0042] 具体的,所述视频帧包括以下参数:起始地址FrameOffset、帧长度FrameLength、帧类型FrameType和帧序号FrameNum。
[0043] 具体的,所述步骤S3还包括对所述视频帧集合按所述视频帧的所述起始地址从小到大进行排序。
[0044] 具体的,在所述MP4文件的同一组视频帧序列中,所述视频帧的帧序号FrameNum从0开始计数,连续两个所述视频帧的后一个视频帧的帧序号FrameNum是前一个视频帧的帧序号FrameNum加1。
[0045] 具体的,所述步骤S4还包括计算所述视频帧的起始地址的簇号ClusterNum=FrameOffset/ClusterSize,其中ClusterSize表示所述文件系统的簇大小,所述视频帧占用的簇数量ClusterCnt=(FrameOffset+FrameLength)/ClusterSize‑ClusterNum+1,所述视频帧在簇内的偏移地址ClusterOffset=FrameOffset%ClusterSize,所述视频帧的下一视频帧在簇内的偏移地址ClusterOffset2=(FrameOffset+FrameLength)%ClusterSize。
[0046] 具体的,根据所述视频帧的帧序号FrameNum、起始地址的簇号ClusterNum、簇内的偏移地址ClusterOffset和/或下一视频帧在簇内的偏移地址ClusterOffset2,判断不同的所述视频帧是否连续,如果连续,则不同的所述视频帧属于同一个目标视频,否则不同的所述视频帧属于不同的目标视频。
[0047] 具体的,通过计算所述视频帧的起始地址的簇号ClusterNum和所述视频帧占用的簇数量ClusterCnt,得到所述目标视频的占用簇。
[0048] 具体的,所述参照文件的视频编码格式为H264编码格式。
[0049] 实施例二:
[0050] 如图2所示为本发明实施例的一种使用参照文件修复MP4文件的流程图,MP4文件即MP4格式的视频文件,示出了该方法的具体实施步骤,包括:
[0051] 步骤S201,从未分配簇提取视频帧列表FS。
[0052] A1)获取存储介质文件系统的未分配簇集合;
[0053] A2)解析参照文件,获取参照文件的视频编码格式;
[0054] A3)根据视频编码格式的结构特征扫描未分配簇集合,得到视频帧列表FS={F0,F1,...,Fm‑1},视频帧列表FS的元素Fi包括起始地址FrameOffset、帧长度FrameLength、帧类型FrameType和帧序号FrameNum,其中,m为自然数,i为自然数,当m=0时,FS=Φ;
[0055] A4)按起始地址从小到大对视频帧列表FS进行排序。
[0056] 步骤S202,重组视频帧所在簇,获取目标视频列表VS。
[0057] 首先根据文件系统的簇大小ClusterSize,计算出视频帧起始地址的簇号ClusterNum=FrameOffset/ClusterSize,视频帧占用的簇数量ClusterCnt=(FrameOffset+FrameLength)/ClusterSize‑ClusterNum+1,视频帧在簇内的偏移地址ClusterOffset=FrameOffset%ClusterSize;然后遍历视频帧列表FS,生成目标视频列表VS={V0,V1,...,Vn‑1},目标视频列表VS的元素Vj包括簇号列表和最新视频帧F,其中,n为自然数,当n=0时,VS=Φ。遍历视频帧列表FS生成目标视频列表VS={V0,V1,...,Vn‑1}的过程,包括步骤:
[0058] B1)设i=0,i为自然数;
[0059] B2)若i的数值等于视频帧列表FS的元素个数m则结束,否则获取第i个视频帧Fi的起始地址FrameOffset、帧长度FrameLegth、帧类型FrameType和帧序号FrameNum,计算视频帧Fi的起始地址的簇号ClusterNum1,簇内的偏移地址ClusterOffset1,占用的簇数量ClusterCnt1;
[0060] B3)若目标视频列表VS为空,则新建目标视频V,设置目标视频V的最新视频帧F=Fi,若视频帧Fi的占用的簇数量ClusterCnt1等于1,则目标视频V的簇号列表添加1个元素ClusterNum1,若视频帧Fi的占用的簇数量ClusterCnt1大于1,则目标视频V的簇号列表依次添加ClusterCnt1‑1个元素,从ClusterNum1到ClusterNum1+ClusterCnt1‑1;目标视频列表VS添加元素V,i加1,继续执行步骤B2;否则执行步骤B4;
[0061] B4)依次遍历目标视频列表VS,获取每个元素Vj的最新视频帧Fj,通过该视频帧Fj的起始地址FrameOffset和帧长度FrameLegth计算视频帧Fj的起始地址的簇号ClusterNum2及下一视频帧的起始地址在簇内的偏移地址ClusterOffset2,其中,ClusterOffset2=(FrameOffset+FrameLegth)%ClusterSize,j为自然数;
[0062] B5)若视频帧Fi的起始地址的簇号ClusterNum1等于视频帧Fj的起始地址的簇号ClusterNum2,即视频帧Fi与视频帧Fj的起始地址在同个簇内,则设置Vj的最新视频帧Fj=Fi,若视频帧Fi的占用的簇数量ClusterCnt1等于1,则目标视频Vj的簇号列表添加1个元素ClusterNum1,若视频帧Fi的占用的簇数量ClusterCnt1大于1,则目标视频Vj的簇号列表依次添加ClusterCnt1‑1个元素,从ClusterNum1到ClusterNum1+ClusterCnt1‑1,i加1,继续执行步骤B2;否则执行步骤B6;
[0063] B6)若视频帧Fi的起始地址的簇号ClusterNum1不等于视频帧Fj的起始地址的簇号ClusterNum2,判断视频帧Fi的帧序号FrameNum,若不等于0且不等于视频帧Fj的帧序号加1,表示两个视频帧不连续,则新建目标视频V,设置目标视频V的最新视频帧F=Fi,若视频帧Fi的占用的簇数量ClusterCnt1等于1,则目标视频V的簇号列表添加1个元素ClusterNum1;若视频帧Fi的占用的簇数量ClusterCnt1大于1,则目标视频V的簇号列表依次添加ClusterCnt1‑1个元素,从ClusterNum1到ClusterNum1+ClusterCnt1‑1;目标视频列表VS添加元素V,i加1,继续执行步骤B2;否则执行步骤B7;
[0064] B7)若视频帧Fi的帧序号FrameNum等于0或者等于视频帧Fj的帧序号加1,判断视频帧Fi的起始地址在簇内的偏移地址ClusterOffset1是否等于视频帧Fj下一视频帧的起始地址在簇内的偏移地址ClusterOffset2,若ClusterOffset1等于ClusterOffset2,表示两个视频帧连续且属于同一目标视频,则设置Vj的最新视频帧Fj=Fi,若视频帧Fi的占用的簇数量ClusterCnt1等于1,则目标视频Vj的簇号列表添加1个元素ClusterNum1,若视频帧Fi的占用的簇数量ClusterCnt1大于1,则目标视频Vj的簇号列表依次添加ClusterCnt1‑1个元素,从ClusterNum1到ClusterNum1+ClusterCnt1‑1,i加1,继续执行步骤B2;否则执行步骤B8;
[0065] B8)若ClusterOffset1小于ClusterOffset2,判断两个视频帧之间的间隔数据是否为帧头用户定义数据或音频帧数据,若是,表示两个视频帧连续且属于同一目标视频,则设置Vj的最新视频帧Fj=Fi,若视频帧Fi的占用的簇数量ClusterCnt1等于1,则目标视频Vj的簇号列表添加1个元素ClusterNum1,若视频帧Fi的占用的簇数量ClusterCnt1大于1,则目标视频Vj的簇号列表依次添加ClusterCnt1‑1个元素,从ClusterNum1到ClusterNum1+ClusterCnt1‑1,i加1,继续执行步骤B2;否则执行步骤B9;
[0066] B9)新建目标视频V,设置目标视频V的最新视频帧F=Fi,若视频帧Fi的占用的簇数量ClusterCnt1等于1,则目标视频V的簇号列表添加1个元素ClusterNum1;若视频帧Fi的占用的簇数量ClusterCnt1大于1,则目标视频V的簇号列表依次添加ClusterCnt1‑1个元素,从ClusterNum1到ClusterNum1+ClusterCnt1‑1;目标视频列表VS添加元素V,i加1,继续执行步骤B2。
[0067] 步骤S203,使用参照文件修复重组后的目标视频的簇集合。
[0068] 解析参照文件,使用参照文件分别修复目标视频列表VS中的每一个目标视频的簇号列表中的所有簇,获得一个或者多个修复的MP4文件,即MP4格式的视频文件。
[0069] 本发明使用以下方式进行测试:
[0070] 1)准备一个具有双摄像头的行车记录仪,开启录像;其中,该行车记录仪保存的视频文件的格式为MP4格式,视频编码格式为H264,音频编码格式为aac,视频文件保存在SD卡中;
[0071] 2)使用winhex查看视频文件的簇列表,该簇列表含有多个不连续的簇号碎片;
[0072] 3)删除SD卡中的所有文件。
[0073] 因SD卡的文件系统为fat32,使用传统的基于文件系统索引的快速恢复方法和基于文件签名的签名恢复方法进行恢复,恢复效果差或者恢复后的视频文件无法播放。
[0074] 使用传统的参照文件恢复方法修复未分配空间数据,修复后的视频文件出现丢帧、花屏和/或通道混乱的问题。
[0075] 使用本发明的技术方案修复视频文件,修复后的视频文件播放不串通道,画面连续,音频无杂音。
[0076] 修复效果优于快速恢复方法、签名恢复方法、传统的参照文件恢复方法。
[0077] MP4格式是目前使用最广泛的视频格式,行车记录仪、无人机、执法记录仪和录像机等设备普遍支持MP4格式视频。本发明提出的一种针对存储不连续的MP4视频文件特别是多通道存储设备的MP4视频文件被删除后的重组与修复方法。该方法结合了文件系统存储特性、音视频帧结构特征、MP4封装格式,通过重组文件碎片通道分离再重新封装的方式从而恢复MP4视频文件,且恢复效果较好,对MP4视频恢复的研究具有重要的意义。
[0078] 如图3所示为本发明实施例的文件在磁盘中分布的示意图,如图4所示为本发明实施例的文件删除后在磁盘的未分配空间形成碎片的示意图,图3和图4示出了MP4文件在文件系统中的存储方式。
[0079] 扇区是磁盘最小的物理存储单元,但是文件系统通常不直接管理每一个扇区,而是通过若干个扇区组织成一个更大的存储单元来进行管理,即簇(或叫)。簇是文件系统的最小的逻辑存储单元。一个文件通常由一个或多个簇组成,这些簇由文件系统的机制进行分配,在物理上不一定连续。所有被正常文件占用的簇的集合即为文件系统已使用空间,未被占用的簇的集合即为未分配空间。当由多个不连续的簇组成的视频文件被删除后,在未分配空间形成了视频碎片。
[0080] 如图5所示为本发明实施例的MP4文件格式的逻辑结构示意图,示出了MP4文件的逻辑结构。
[0081] MP4全称MPEG‑4Part 14,是一种常见的多媒体容器格式。MP4数据封装以box为单位,其中trakbox包含了文件的多媒体数据引用和描述,一个MP4文件至少包含一个trakbox。通常会包含一个视频track和一个音频track。而当前视频编码格式以H264和H265为主,音频编码大多是aac和adpcm编码格式。
[0082] 如图6所示为本发明实施例的H264/H265视频帧格式的示意图,示出了视频帧的逻辑结构。
[0083] H264/H265视频帧由起始码和Nal Unit组成。在MP4封装的视频帧一般不包含起始码,封装格式为4字节帧长加Nal Unit,视频帧前也可加入1个或多个用户数据,格式是4字节数据长度加数据。NALU Header记录帧类型,Slice Header记录SliceType,H264编码格式的Slice Header记录了该视频帧在一组帧序列内的帧序号(FrameNum)等信息。
[0084] 基于文件系统的存储方式和MP4的文件结构,本发明的一种修复MP4文件的恢复原理,包括:
[0085] 1)在文件系统中文件数据以簇/块为单位存储,获取磁盘未使用空间中所有被MP4音视频帧占用的簇,把属于同一文件的所有簇归类到同一集合,再使用基于参照文件的修复方法修复该簇集合,从而恢复该文件;
[0086] 2)H264/H265视频编码格式具有一定的结构特征,通过帧结构特征扫描未使用空间即可获取每个视频帧的起始地址;
[0087] 3)在MP4文件中音视频帧通常是连续交错存储在文件中,且视频帧头包含帧长,通过该帧长可计算下一个视频帧或者音频帧的起始地址是否在簇内或下一个簇内偏移地址,若前一个视频帧的结束地址在簇内偏移与下一个视频帧起始地址在簇内偏移连续则这两个视频帧所在簇即属于同个文件,或者前一个视频帧的结束地址在簇内偏移与下一个视频帧起始地址在簇内偏移不连续但中间间隔数据是合法用户数据或音频帧数据则这两个视频帧以及中间间隔数据所在簇即属于同个文件,对于通常aac及adpcm编码音频数据或视频帧头用户数据大小小于簇大小;
[0088] 如图7所示为本发明实施例的视频帧和音频帧在同一个簇内的结构示意图,示出了视频帧1、视频帧2以及音频帧1或用户数据分布在簇1内的情况,且视频帧1的下一视频帧的起始地址与视频2的起始地址相同,因此判定视频帧1和视频帧2属于同一个视频文件。
[0089] 如图8所示为本发明实施例的视频帧跨连续簇的结构示意图,示出了视频帧1、视频帧2以及音频帧1或用户数据分布在簇1内,视频帧3分布在连续的簇1和簇2,视频帧4分布在簇2内的情况,虽然视频帧3和视频帧4不在相同的簇内,但视频帧3的下一视频帧的起始地址与视频4的起始地址相同,因此判定视频帧3和视频帧4属于同一个视频文件。
[0090] 如图9所示为本发明实施例的视频帧跨多个连续簇的结构示意图,示出了视频帧1、视频帧2以及音频帧1或用户数据分布在簇1内,视频帧3分布在连续的簇1、簇2和簇3,视频帧4分布在簇3内的情况,虽然视频帧3和视频帧4不在相同的簇内,并且视频3跨多个连续的簇,但视频帧3的下一视频帧的起始地址与视频4的起始地址相同,因此判定视频帧3和视频帧4属于同一个视频文件。
[0091] 如图10所示为本发明实施例的视频帧跨不连续簇的结构示意图,示出了视频帧1、视频帧2以及音频帧1或用户数据分布在簇1内,视频帧3分布在不连续的簇1和簇3,视频帧4分布在簇3内的情况,因为视频帧3跨多个不连续的簇,导致视频帧3的下一视频帧的起始地址与视频4的起始地址不同,因此判定视频帧3和视频帧4属于不同的视频文件。
[0092] 如图11所示为本发明实施例的音频帧跨连续簇的结构示意图,示出了视频帧1和视频帧2分布在簇1内,音频帧1或用户数据分布在连续的簇1和簇2,视频帧3分布在簇2内的情况,虽然视频帧2的下一视频帧的起始地址与视频3的起始地址不同,但中间间隔数据是合法的音频帧1或用户数据,因此判定视频帧3和视频帧4属于同一个视频文件。
[0093] 如图12所示为本发明实施例的音频帧跨不连续簇的结构示意图,示出了视频帧1和视频帧2分布在簇1内,音频帧1或用户数据分布在不连续的簇1和簇3,视频帧3分布在簇3内的情况,因为视频帧2的下一视频帧的起始地址与视频3的起始地址不同,并且中间间隔数据不是合法的音频帧1或用户数据,因此判定视频帧3和视频帧4属于不同的视频文件。
[0094] 4)对于H264视频帧序号在同一组帧序列内依次递增,因此当当前视频帧FrameNum不等于0时,当前视频帧FrameNum需等于前一视频帧的FrameNum加1。
[0095] 实施例三:
[0096] 本发明还提供所述一种修复MP4文件的装置,如图13所示,该装置包括处理器1301、存储器1302、总线1303、以及存储在所述存储器1302中并可在所述处理器1301上运行的计算机程序,处理器1301包括一个或一个以上处理核心,存储器1302通过总线1303与处理器1301相连,存储器1302用于存储程序指令,所述处理器执行所述计算机程序时实现本发明的上述方法实施例中的步骤。
[0097] 进一步地,作为一个可执行方案,所述修复MP4文件的装置可以是桌上型计算机、笔记本、掌上电脑及服务器等计算设备。所述系统/电子设备可包括,但不仅限于,处理器、存储器。本领域技术人员可以理解,上述系统/电子设备的组成结构仅仅是系统/电子设备的示例,并不构成对系统/电子设备的限定,可以包括比上述更多或更少的部件,或者组合某些部件,或者不同的部件。例如所述系统/电子设备还可以包括输入输出设备、网络接入设备、总线等,本发明实施例对此不做限定。
[0098] 进一步地,作为一个可执行方案,所称处理器可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程阵列(Field‑Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述系统/电子设备的控制中心,利用各种接口和线路连接整个系统/电子设备的各个部分。
[0099] 所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述系统/电子设备的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据手机的使用所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
[0100] 实施例四:
[0101] 本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现本发明实施例上述方法的步骤。
[0102] 所述系统/电子设备集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read‑Only Memory)、随机存取存储器(RAM,RandomAccess Memory)以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减。
[0103] 尽管结合优选实施方案具体展示和介绍了本发明,但所属领域的技术人员应该明白,在不脱离所附权利要求书所限定的本发明的精神和范围内,在形式上和细节上可以对本发明做出各种变化,均为本发明的保护范围。