CN110740391B - 一种修复mp4损坏文件的方法 - Google Patents

一种修复mp4损坏文件的方法 Download PDF

Info

Publication number
CN110740391B
CN110740391B CN201911050367.3A CN201911050367A CN110740391B CN 110740391 B CN110740391 B CN 110740391B CN 201911050367 A CN201911050367 A CN 201911050367A CN 110740391 B CN110740391 B CN 110740391B
Authority
CN
China
Prior art keywords
sample
audio
file
bytes
offset
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
Application number
CN201911050367.3A
Other languages
English (en)
Other versions
CN110740391A (zh
Inventor
许超明
梁效宁
韩勇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xly Salvationdata Technology Inc
Original Assignee
Xly Salvationdata Technology Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Xly Salvationdata Technology Inc filed Critical Xly Salvationdata Technology Inc
Priority to CN201911050367.3A priority Critical patent/CN110740391B/zh
Publication of CN110740391A publication Critical patent/CN110740391A/zh
Application granted granted Critical
Publication of CN110740391B publication Critical patent/CN110740391B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/80Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
    • H04N21/85Assembly of content; Generation of multimedia applications
    • H04N21/854Content authoring
    • H04N21/85406Content authoring involving a specific file format, e.g. MP4 format

Abstract

本发明公开了一种修复MP4损坏文件的方法,其特征在于包括以下步骤:S100:获取任一MP4正常文件,解析所述MP4正常文件以获取数据流的编码方式、sample数据的封装模式及时间流的交错模式;S200:根据所述编码方式及所述交错模式,扫描所述MP4损坏文件的媒体数据区域并获取所述媒体数据区域中的sample大小及sample的偏移量并记录在音/视频序列容器中;S300:根据所述音/视频序列容器中sample大小及sample的偏移位置,修改所述MP4正常文件中moov的区块偏移表的偏移量,用以重新构建所述MP4正常文件的moov;S400:采用所述MP4损坏文件的媒体数据区域替换步骤S300中所重新构建的所述MP4正常文件的媒体数据区域,生成正常播放的MP4文件,完成所述MP4损坏文件的修复。

Description

一种修复MP4损坏文件的方法
技术领域
本发明属于电子数据恢复与取证领域,涉及一种音/视频文件的修复方法,尤其涉及一种修复MP4损坏文件的方法。
背景技术
MP4是一套用于音频、视频信息的压缩编码标准,由国际标准化组织(ISO)和国际电工委员会(IEC)下属的“动态图像专家组”(Moving Picture Experts Group,即MPEG)制定,第一版在1998年10月通过,第二版在1999年12月通过。MPEG-4格式的主要用途在于网上流、光盘、语音发送(视频电话),以及电视广播。
MPEG-4包含了MPEG-1及MPEG-2的绝大部份功能及其他格式的长处,并加入及扩充对虚拟现实模型语言(VRML,Virtual Reality Modeling Language)的支持,面向对象的合成档案(包括音效,视讯及VRML对象),以及数字版权管理(DRM)及其他互动功能。而MPEG-4比MPEG-2更先进的其中一个特点,就是不再使用宏区块做影像分析,而是以影像上个体为变化记录,因此尽管影像变化速度很快、码率不足时,也不会出现方块画面。
MPEG-4的特点如下:
(1)对于不同的对象可采用不同的编码算法,从而进一步提高压缩效率;
(2)对象各自相对独立,提高了多媒体数据的可重用性;
(3)允许用户对单个的对象操作,提供前所未有的交互性;
(4)允许在不同的对象之间灵活分配码率,对重要的对象可分配较多的字节,对次要的对象可分配较少的字节,从而能在低码率下获得较好的效果;
(5)可以方便的集成自然音视频对象和合成音视频对象。
由于MP4具有以上的优势及特点,因此,MP4获得了广泛的应用并拥有大量的使用者。
MP4文件格式中,所有的数据存在一个称为movie的容器中。一个movie可以由多个音/视频序列(track)组成。每个音/视频序列(track)就是一个随时间变化的媒体序列,例如,视频帧序列。音/视频序列(track)里的每个时间单位是一个sample,它可以是一帧视频或音频。sample按照时间顺序排列。一帧音频可以分解成多个音频sample,所以音频一般用sample作为单位,而不用帧。MP4文件格式的定义里面,用sample表示一个时间帧或者数据单元。每个音/视频序列(track)会有一个或者多个sample描述。
movie容器存放着媒体描述元数据(metadata),其指引播放器怎样索引媒体数据及怎样播放媒体数据,movie容器的名字称为moov。
但是,由于各种原因,MP4会被损坏,从而造成MP4无法正常播放,尤其在公检法领域所使用的视频监控文件中,由于MP4的视频监控文件的损坏,从而给监控及取证带来极大困难。
现有技术中,对MP4损坏文件的恢复通常采用一些应用软件来进行恢复,这些应用软件通常只能恢复一些简单的损坏情况,且修复后的MP4文件在播放的时候会出现声画不同步、播放无声、跳转播放时间后视频被卡死等问题,最主要的是,现有技术无法修复因MP4文件丢失moov而造成的损坏,从而不能修复和播放此类MP4。
发明内容
本发明针对现有技术的不足问题,提出了一种修复MP4损坏文件的方法:通过扫描媒体数据mdat里的sample,重新构建出moov数据索引信息,使播放器能正常播放文件,达到修复MP4损坏文件的目的。
为便于描述,本发明可能包含如下术语:
metadata:媒体描述元数据
mdat:媒体数据区域
chunk:区块
track:音/视频序列
interleave:交错模式
sample-to-chunk table:sample-区块对应关系表
chunk offset table:区块偏移表
sample description atom:sample描述信息
atom(Accurate Tracking by Overlap Maximization):采用最大化重叠的精确跟踪
本发明申请包括以下步骤:
S100:获取任一MP4正常文件,解析所述MP4正常文件以获取数据流的编码方式、sample数据的封装模式及时间流的交错模式,其中,所述MP4正常文件与所述MP4损坏文件由相同的MP4制作装置和/或制作软件所生成且具有相同的编码方式及交错模式;
S200:根据所述编码方式及所述交错模式,扫描所述MP4损坏文件的媒体数据区域并获取所述媒体数据区域中的sample大小及sample的偏移量并记录在音/视频序列容器中;
S300:根据所述音/视频序列容器中sample大小及sample的偏移位置,修改所述MP4正常文件中moov的区块偏移表的偏移量,用以重新构建所述MP4正常文件的moov;
S400:采用所述MP4损坏文件的媒体数据区域替换步骤S300中所重新构建的所述MP4正常文件的媒体数据区域,生成可以正常播放的MP4文件,完成所述MP4损坏文件的修复。
优选地,所述步骤S100包括以下步骤:
S101:获取数据流的编码方式,包括以下步骤:
S1011:获取sample描述信息,所述sample描述信息包含atom大小、类型、版本、标志、条目数及sample描述表,其中,所述类型储存于stsd中;
S1012:读取所述sample描述表中的数据格式作为所述编码方式,所述编码方式包括avc1、mp4a、mp4v、alac、samr、Twos、apcn、in24、sowt及sawb;
S102:获取时间流的交错模式,包括以下步骤:
S1021:获取所述MP4正常文件中各个音/视频序列的区块偏移表并获取各个音/视频序列的偏移量,所述偏移量是相对于媒体数据区域的起始地址的相对偏移地址;
S1022:将各个音/视频序列的偏移量并入同一集合并按升序排列;
S1023:查找各个偏移量所属的音/视频序列在所述集合中出现的规律,用以确定各个音/视频序列的交错模式;
S1024:去除所述集合中重复循环的音/视频序列,用以获取时间流的交错模式;
S103:获取sample数据的封装模式,包括以下步骤:
S1031:获取所述MP4正常文件中sample-区块对应关系表并读取第一区块的序号、每区块的sample数及sample的描述识别号;
S1032:根据所获取的音/视频序列的交错模式及所述MP4正常文件中sample-区块对应关系表,获取sample数据的封装模式。
优选地,所述步骤S200包括以下步骤:
S201:读取所述MP4损坏文件的媒体数据容器的数据,查找媒体数据的标识,所述媒体数据的标识为媒体数据的起始地址;
S202:根据所述MP4正常文件的交错模式,选取要匹配的音/视频序列;
S203:根据所述MP4正常文件的每区块的sample数获取要匹配的sample个数;
S204:根据音/视频序列的编码方式来扫描媒体数据中的sample,用以匹配所读取的sample;
S205:判断所读取的sample是否与音/视频序列的编码方式匹配,如果是,执行步骤S207,否则,执行步骤S206;
S206:寻址下一所需读取的sample,执行步骤S204;
S207:记录当前sample的字节长度和偏移量,并将当前sample的偏移量记录在音/视频序列容器中。
优选地,针对不同的音/视频序列的编码方式,获取sample的字节长度的方法如下:
编码方式为avc1:以当前sample的起始地址为首地址,向后偏移0x5字节并读取字节的内容,与0x1f进行逻辑与运算,所得结果表示sample的类型且小于十进制数21,当前sample的前4字节的内容表示sample的字节长度;
编码方式为mp4a:以当前sample的起始地址为首地址,向后偏移0x5字节、0x06字节并分别读取字节的内容且所读取的内容分别为0xee、0x1b,或者,
以当前sample的起始地址为首地址,向后偏移0x5字节、0x06字节并分别读取字节的内容,所读取的内容分别为0x3e、0x64且当前sample的首字节内容不为零;
采用ffpeg的untr_decode_audio4函数获得sample的字节长度;
编码方式为mp4v:以当前sample的起始地址为首地址,前两个字节的内容为0x1b3或0x1b6,采用ffpeg的avcodec_decode_video2函数获得sample的字节长度;
编码方式为alac:以当前sample的起始地址为首地址,向后偏移0x5字节并读取连续4字节的内容的整数t,当前sample的前4字节的内容为0x00时,t的值为0x00130000,或,
当前sample的前4字节的内容为0x1000时,t的值为0x001a0000,采用ffpeg的untr_decode_audio4函数获得sample的字节长度;
编码方式为samr:当前sample的首字节内容为0x3c,sample的字节长度为32字节。
本发明具有以下有益效果是:解决了现有技术无法修复因MP4文件丢失moov而造成的损坏的技术问题。
附图说明
图1为本发明所提供的方法的总流程图;
图2为本发明一个实施例中获取sample大小及sample的偏移量的具体流程图。
具体实施方式
MP4文件格式中,所有的数据存在一个称为movie的容器中。一个movie可以由多个音/视频序列(track)组成。每个音/视频序列(track)就是一个随时间变化的媒体序列,例如,视频帧序列。音/视频序列(track)里的每个时间单位是一个sample,它可以是一帧视频或音频。sample按照时间顺序排列。一帧音频可以分解成多个音频sample,所以音频一般用sample作为单位,而不用帧。MP4文件格式的定义里面,用sample表示一个时间帧或者数据单元。每个音/视频序列(track)会有一个或者多个sample描述。
movie容器存放着媒体描述元数据(metadata),其指引播放器怎样索引媒体数据及怎样播放媒体数据,movie容器的名字称为moov。
音/视频序列(track)里面的每个sample通过引用关联到一个sample描述。这个sample描述定义了怎样解码这个sample,例如使用的压缩算法。
文件的物理格式和媒体数据的排列都不受媒体的时间顺序的限制。视频帧不需要在文件按时间顺序排列。这就意味着如果文件中真的存在这样的一些帧,那么就有一些文件结构来描述媒体的排列和对应的时间信息。
MP4文件中所有数据都封装在一些box中,以前将这种box叫atom(AccurateTracking by Overlap Maximization),即,采用重叠最大化的精确跟踪)。所有的媒体描述元数据(metadata),包括定义媒体的排列和时间信息的数据都包含在这样的一些结构box中。MP4文件格式定义了这些box的格式,其中,metadata对媒体数据(例如,视频帧)引用说明。
box定义了如何在sample表中找到媒体数据的排列。这包括数据引用、sample大小表(sample size table,简称stsz),sample-区块对应关系表(sample-to-chunk table,简称stsc)、区块偏移表(chunk offset table,简称STCO),这些表就可以找到音/视频序列(track)中每个sample在文件中的位置和大小。
为了节约空间,这些表都很紧凑。另外,交错(interleave)不是一个sample接一个sample的,而是把单个音/视频序列(track)的几个sample组合到一起,然后另外几个sample又进行新的组合。一个音/视频序列(track)的连续几个sample组成的单元就被称为区块(chunk)。每个区块(chunk)在文件中有一个偏移量,这个偏移量是相对于文件的起始地址,在这个区块(chunk)内,sample是连续存储的。
这样,如果一个区块(chunk)包含两个sample,第二个sample的位置就是区块(chunk)的偏移量加上第一个sample的大小。区块偏移表说明了每个区块(chunk)的偏移量,sample-区块对应关系表(sample-to-chunk table)说明了sample序号和区块(chunk)序号的对应关系,或者称为映射关系。
文件的时间和物理结构可以是对齐的,这表明媒体数据在容器中的物理顺序就是时间顺序。另外,如果多个音/视频序列(track)的媒体数据包含在同一个文件中,这个媒体数据可以是交错。一般来说,为了方便读取一个音/视频序列(track)的媒体数据,同时保证每个表紧凑,以一个合适的时间间隔(例如1秒)做一次交错,而不是一个sample接一个sample的。这样就可以减少区块chunk的数据,减小区块偏移表的大小
MP4文件总体布局如下所示:
Figure GDA0003263669520000091
本申请的主要方法是:解析MP4正常文件并得到其moov,并从该moov中得到音/视频序列(track)的交错模式和编码方式,根据交错模式来扫描MP4损坏文件的媒体数据区域(mdat),得到每一个sample的大小和偏移量,根据得到的sample的大小和偏移量重新改写moov中sample-区块对应关系表(chunk offset table,简称STCO),最后把改写的moov和媒体数据区域(mdat)写到一个文件,就成为一个能正常播放的mp4文件。
下面结合附图和实施例对本发明作进一步阐述。
图1示出了本发明所提供的方法的总流程图。
如图1所示,本发明的方法包括以下步骤:
S100:获取任一MP4正常文件,解析MP4正常文件以获取数据流的编码方式、sample数据的封装模式及时间流的交错模式,其中,MP4正常文件与MP4损坏文件由相同的MP4制作装置和/或制作软件所生成且具有相同的编码方式及交错模式;
具体地,解析一个与MP4损坏文件来自相同设备的MP4正常文件。相同的MP4制作装置指相同的硬件设备,例如相同的相机、相同的手机,相同的MP4制作软件指相同的录制软件,例如暴风影音。因为相同的MP4制作装置和/或制作软件生成mp4文件的数据流的编码方式、sample数据的封装模式及时间流的交错模式是相同的,并且MP4损坏文件只有媒体数据区域(mdat)而没有moov信息,因此不能得到数据流的编码方式,因此只能从解析相同的MP4制作装置和/或制作软件所生成的文件获取。
步骤S100包括以下步骤:
S101:获取数据流的编码方式,包括以下步骤:
S1011:获取sample描述信息,sample描述信息包含atom大小、类型、版本、标志、条目数及sample描述表,其中,所述类型储存于stsd中;
数据流的编码方式存放在sample description atom(STSD)中,文件的路径位置为moov/track/stbl/stsd。sample description atom的数据结构如下:
Figure GDA0003263669520000101
注意,此时sample description atom的类型是'stsd',包含了一个sampledescription table。根据不同的编码方式和存储数据的文件数目,每个媒体数据可以有一个到多个sample description。sample-区块对应关系表通过该索引表,找到合适媒体数据中每个sample的描述。
S1012:读取sample描述表中的数据格式作为编码方式,编码方式包括avc1、mp4a、mp4v、alac、samr、Twos、apcn、in24、sowt及sawb;
下表为本发明实施例中的sample描述表:
Figure GDA0003263669520000111
通过读取上表中4字节的“数据格式”即获得编码方式。
S102:获取时间流的交错模式,包括以下步骤:
S1021:获取MP4正常文件中各个音/视频序列的区块偏移表并获取各个音/视频序列的偏移量,偏移量是相对于媒体数据区域的起始地址的相对偏移地址;
S1022:将各个音/视频序列的偏移量并入同一集合并按升序排列;
S1023:查找各个偏移量所属的音/视频序列在集合中出现的规律,用以确定各个音/视频序列的交错模式;
S1024:去除集合中重复循环的音/视频序列,用以获取时间流的交错模式;
具体地,mp4文件中多个音/视频序列(track)的数据在媒体数据区域(mdat)的时间上是交错分布的,即我们所说的交错(interleave)模式,相同设备生成的mp4文件交错(interleave)模式是相同,可以根据mp4正常文件的每个音/视频序列(track)的chunkoffset table(STCO)里chunk的偏移分布来确定音/视频序列(track)的交错(interleave)模式,例如,有三个track分别为track0、track1、track2,它们在区块(chunk)的偏移量分布分别为:
track0在区块(chunk)的偏移量为1,10,20,30字节,记为集合:
track0chunk offsets('stco'):[1,10,20,30]
track1在区块(chunk)的偏移量为2,4,12,15,21,24,32,33字节,记为集合:
track1chunk offsets('stco'):[2,4,12,15,21,24,32,33]
track2在区块(chunk)的偏移量为6,7,18,19,25,28,38,39字节,记为集合:
track2chunk offsets('stco'):[6,7,18,19,25,28,38,39]
将各个偏移量并入同一集合并按升序排列为0,1,1,2,2,0,1,1,2,2,0,1,1,2,2,0,其中的0表示track0的偏移量在并入同一集合后在该集合中的位置,同理,1表示track1的偏移量在并入同一集合后在该集合中的位置,2表示track2的偏移量在并入同一集合后在该集合中的位置,记为如下的交错集合:
interleaveMask:[0,1,1,2,2,0,1,1,2,2,0,1,1,2,2,0]
把出现的次序中找出规律并去除集合中重复循环的部分,得到的交错集合如下:
interleaveMask:[0,1,1,2,2,0]
即,交错模式为track0,track1,track1,track2,track2,track0依次出现并按此次序进行循环。
S103:获取sample数据的封装模式,包括以下步骤:
S1031:获取MP4正常文件中sample-区块对应关系表并读取第一区块的序号、每区块的sample数及sample的描述识别号;
S1032:根据所获取的音/视频序列的交错模式及MP4正常文件中sample-区块对应关系表,获取sample数据的封装模式。
具体地,sample在媒体数据区域(mdat)里是按照区块(chunk)来组织这些sample的,一个区块(chunk)包含一个或多个sample,区块(chunk)的字节长度可以不同,区块(chunk)的sample的字节长度也可以不同。
sample描述信息sample description atom(stsc)记录了sample和区块(chunk)的对应关系,文件的路径位置为moov/track/stbl/stsc:
sample description atom的数据结构如下:
Figure GDA0003263669520000131
值得注意的是,此时sample description atom的类型是'stsc'。
下表为本发明另一实施例中的sample-区块对应关系表(sample-to-chunktable):
字段 长度(字节) 描述
尺寸 4 atom的字节数
类型 4 stsc
版本 1 atom的版本
标志 3 这里为0
条目数目 4 sample-to-chunk的数目
sample-to-chunk sample-to-chunk表的结构
First chunk 4 这个table使用的第一个chunk序号
Samples per chunk 4 当前trunk内的sample数目
Sample description ID 4 与这些sample关联的sample description的序号
读取各个sample的sample-区块对应关系表中的First chunk、Samples perchunk及Sample description ID,生成如下的表格:
First chunk Samples per chunk Sample description ID
1 4 1
4 3 1
5 4 1
8 3 1
9 4 1
12 3 1
13 4 1
16 3 1
17 4 1
20 3 1
21 4 1
277 4 1
280 3 1
第二个First chunk的序号减去第一个First chunk的序号就是一共有多少个包含相同数目sample的chunk,这样通过不断的叠加,得到一共有280个chunk、每个chunk包含多少个sample以及每个chunk对应的description ID。从mp4正常文件通过stsc表、结合上述音/视频序列(track)的交错模式,即可到媒体数据区域(mdat)里所有sample的封装模式,例如,在本发明又一实施例中,假设有两个track,track0为视频,track1为音频,track0的stsc只有一项(即,一个entry),其所有的chunk都只包含1个description ID为1的sample,记为:
track0'stsc'(one entry):[1,1,1]
其中,第一个1表示chunk的序号,第二个1表示track0的每个chunk包含的sample数,第三个1表示sample的description ID;
track1的stsc有三项(即,三个entry),第一项[1,2,1]中的第一个chunk序号为1,第二项[4,1,1]中的第一个chunk序号为4,4-1=3,表示第一项和第二项之间有3个chunk且每个chunk包含2个description ID为1的sample;第三项[5,2,1]中的第一个chunk序号5,5-4=1,表示第二项和第三项之间有1个chunk且每个chunk包含1个description ID为1的sample;第三项[5,2,1]之后就没有下一项了,表示从序号为5的chunk之后的每个chunk都包含2个description ID为1的sample,记为:
track1'stsc'(three entries):[1,2,1,4,1,1,5,2,1]
其中,[1,2,1,4,1,1,5,2,1]中各值的含义与track0的含义相同。通过这个交错对应关系,我们可以直接从上述的track序列流得到sample数量的序列流,这样,再通过序列流上的track得到对应的sample数量(即,sample数据的封装模式),记为:
interleaveMask:[0,1,0,1,0,1,0,1,0,1,0]
samplesPerChunkMask:[(1;1),(2;1),(1;1),(2;1),(1;1),(2;1),(1;1),(1;1),(1;1),(2;1),(1;1)]
其中,interleaveMask中的0表示track0,1表示track1,换言之,此时的交错模式是track0、track1交替出现,而交错模式的获取方法由步骤S102获得;samplesPerChunkMask中圆括号中第一个数字表示sample的数量,第二个数字表示description ID
track0 Chunk#:1 2 3 4 5 6
track1 Chunk#:1 2 3 4 5
上述track0 Chunk#和track1 Chunk#表示track序列里chunk的序号
S200:根据编码方式及交错模式,扫描MP4损坏文件的媒体数据区域并获取媒体数据区域中的sample大小及sample的偏移量并记录在音/视频序列容器中;
图2示出了本发明一个实施例中获取sample大小及sample的偏移量的具体流程图。如图2所示,步骤S200包括以下步骤:
S201:读取MP4损坏文件的媒体数据容器的数据,查找媒体数据的标识,媒体数据的标识为媒体数据的起始地址;
S202:根据MP4正常文件的交错模式,选取要匹配的音/视频序列;
S203:根据MP4正常文件的每区块的sample数获取要匹配的sample个数;
S204:根据音/视频序列的编码方式来扫描媒体数据中的sample,用以匹配所读取的sample;
S205:判断所读取的sample是否与音/视频序列的编码方式匹配,如果是,执行步骤S207,否则,执行步骤S206;
S206:寻址下一所需读取的sample,执行步骤S204;
S207:记录当前sample的字节长度和偏移量,并将当前sample的偏移量记录在音/视频序列容器中。
值得注意的是的是,针对不同的音/视频序列的编码方式,获取sample的字节长度的方法如下:
编码方式为avc1:以当前sample的起始地址为首地址,向后偏移0x5字节并读取字节的内容,与0x1f进行逻辑与运算,所得结果表示sample的类型且小于十进制数21,当前sample的前4字节的内容表示sample的字节长度;
编码方式为mp4a:以当前sample的起始地址为首地址,向后偏移0x5字节、0x06字节并分别读取字节的内容且所读取的内容分别为0xee、0x1b,或者,
以当前sample的起始地址为首地址,向后偏移0x5字节、0x06字节并分别读取字节的内容,所读取的内容分别为0x3e、0x64且当前sample的首字节内容不为零;
采用ffpeg的untr_decode_audio4函数获得sample的字节长度;
编码方式为mp4v:以当前sample的起始地址为首地址,前两个字节的内容为0x1b3或0x1b6,采用ffpeg的avcodec_decode_video2函数获得sample的字节长度;
编码方式为alac:以当前sample的起始地址为首地址,向后偏移0x5字节并读取连续4字节的内容的整数t,当前sample的前4字节的内容为0x00时,t的值为0x00130000,或,
当前sample的前4字节的内容为0x1000时,t的值为0x001a0000,采用ffpeg的untr_decode_audio4函数获得sample的字节长度;
编码方式为samr:当前sample的首字节内容为0x3c,sample的字节长度为32字节。
S300:根据音/视频序列容器中sample大小及sample的偏移位置,修改MP4正常文件中moov的区块偏移表的偏移量,用以重新构建MP4正常文件的moov。
S400:采用MP4损坏文件的媒体数据区域替换步骤S300中所重新构建的MP4正常文件的媒体数据区域,生成可以正常播放的MP4文件,完成MP4损坏文件的修复。
通过本发明提供的方法,解决了现有技术中尚无一种修复MP4损坏文件的方法的技术问题。
应当理解的是,本发明不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。

Claims (3)

1.一种修复MP4损坏文件的方法,其特征在于包括以下步骤:
S100:获取任一MP4正常文件,解析所述MP4正常文件以获取数据流的编码方式、sample数据的封装模式及时间流的交错模式,其中,所述MP4正常文件与所述MP4损坏文件由相同的MP4制作装置和/或制作软件所生成且具有相同的编码方式及交错模式,所述步骤S100包括以下步骤:
S101:获取数据流的编码方式,包括以下步骤:
S1011:获取sample描述信息,所述sample描述信息包含atom大小、类型、版本、标志、条目数及sample描述表,其中,所述类型储存于stsd中;
S1012:读取所述sample描述表中的数据格式作为所述编码方式,所述编码方式包括avc1、mp4a、mp4v、alac、samr、Twos、apcn、in24、sowt及sawb;
S102:获取时间流的交错模式,包括以下步骤:
S1021:获取所述MP4正常文件中各个音/视频序列的区块偏移表并获取各个音/视频序列的偏移量,所述偏移量是相对于媒体数据区域的起始地址的相对偏移地址;
S1022:将各个音/视频序列的偏移量并入同一集合并按升序排列;
S1023:查找各个偏移量所属的音/视频序列在所述集合中出现的规律,用以确定各个音/视频序列的交错模式;
S1024:去除所述集合中重复循环的音/视频序列,用以获取时间流的交错模式;
S103:获取sample数据的封装模式,包括以下步骤:
S1031:获取所述MP4正常文件中sample-区块对应关系表并读取第一区块的序号、每区块的sample数及sample的描述识别号;
S1032:根据所获取的音/视频序列的交错模式及所述MP4正常文件中sample-区块对应关系表,获取sample数据的封装模式;
S200:根据所述编码方式及所述交错模式,扫描所述MP4损坏文件的媒体数据区域并获取所述媒体数据区域中的sample大小及sample的偏移量并记录在音/视频序列容器中;
S300:根据所述音/视频序列容器中sample大小及sample的偏移位置,修改所述MP4正常文件中moov的区块偏移表的偏移量,用以重新构建所述MP4正常文件的moov;
S400:采用所述MP4损坏文件的媒体数据区域替换步骤S300中所重新构建的所述MP4正常文件的媒体数据区域,生成正常播放的MP4文件,完成所述MP4损坏文件的修复。
2.根据权利要求1所述的一种修复MP4损坏文件的方法,其特征在于,所述步骤S200包括以下步骤:
S201:读取所述MP4损坏文件的媒体数据容器的数据,查找媒体数据的标识,所述媒体数据的标识为媒体数据的起始地址;
S202:根据所述MP4正常文件的交错模式,选取要匹配的音/视频序列;
S203:根据所述MP4正常文件的每区块的sample数获取要匹配的sample个数;
S204:根据音/视频序列的编码方式来扫描媒体数据中的sample,用以匹配所读取的sample;
S205:判断所读取的sample是否与音/视频序列的编码方式匹配,如果是,执行步骤S207,否则,执行步骤S206;
S206:寻址下一所需读取的sample,执行步骤S204;
S207:记录当前sample的字节长度和偏移量,并将当前sample的偏移量记录在音/视频序列容器中。
3.根据权利要求2所述的一种修复MP4损坏文件的方法,其特征在于,针对不同的音/视频序列的编码方式,获取sample的字节长度的方法如下:
编码方式为avc1:以当前sample的起始地址为首地址,向后偏移0x5字节并读取字节的内容,与0x1f进行逻辑与运算,所得结果表示sample的类型且小于十进制数21,当前sample的前4字节的内容表示sample的字节长度;
编码方式为mp4a:以当前sample的起始地址为首地址,向后偏移0x5字节、0x06字节并分别读取字节的内容且所读取的内容分别为0xee、0x1b,或者,
以当前sample的起始地址为首地址,向后偏移0x5字节、0x06字节并分别读取字节的内容,所读取的内容分别为0x3e、0x64且当前sample的首字节内容不为零;
采用ffpeg的untr_decode_audio4函数获得sample的字节长度;
编码方式为mp4v:以当前sample的起始地址为首地址,前两个字节的内容为0x1b3或0x1b6,采用ffpeg的avcodec_decode_video2函数获得sample的字节长度;
编码方式为alac:以当前sample的起始地址为首地址,向后偏移0x5字节并读取连续4字节的内容的整数t,当前sample的前4字节的内容为0x00时,t的值为0x00130000,或,
当前sample的前4字节的内容为0x1000时,t的值为0x001a0000,采用ffpeg的untr_decode_audio4函数获得sample的字节长度;
编码方式为samr:当前sample的首字节内容为0x3c,sample的字节长度为32字节。
CN201911050367.3A 2019-10-31 2019-10-31 一种修复mp4损坏文件的方法 Active CN110740391B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911050367.3A CN110740391B (zh) 2019-10-31 2019-10-31 一种修复mp4损坏文件的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911050367.3A CN110740391B (zh) 2019-10-31 2019-10-31 一种修复mp4损坏文件的方法

Publications (2)

Publication Number Publication Date
CN110740391A CN110740391A (zh) 2020-01-31
CN110740391B true CN110740391B (zh) 2021-10-26

Family

ID=69271945

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911050367.3A Active CN110740391B (zh) 2019-10-31 2019-10-31 一种修复mp4损坏文件的方法

Country Status (1)

Country Link
CN (1) CN110740391B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112040239B (zh) * 2020-09-14 2022-07-26 国网重庆市电力公司电力科学研究院 一种基于avi格式文件结构的文件修复方法及装置
CN113127265B (zh) * 2021-03-29 2023-03-10 珠海全志科技股份有限公司 行车记录文件的修复方法及系统
CN113613088A (zh) * 2021-08-02 2021-11-05 安徽文香科技有限公司 一种mp4文件的修复方法、装置、电子设备及可读存储介质
CN114125469B (zh) * 2021-11-08 2022-07-12 北京天宇威视科技股份有限公司 Mp4文件修复方法、装置、电子设备及存储介质
CN114007112B (zh) * 2021-11-30 2023-06-02 四川效率源信息安全技术股份有限公司 一种针对MP4视频文件中mdat box数据错误的修复方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102469315A (zh) * 2010-11-16 2012-05-23 联芯科技有限公司 Mpeg-4视频码流的错误恢复方法和装置
CN104462433A (zh) * 2014-12-17 2015-03-25 四川效率源信息安全技术有限责任公司 一种恢复fat32分区数据的方法
CN104486614A (zh) * 2014-12-10 2015-04-01 央视国际网络无锡有限公司 Mp4视频格式损坏检测方法
CN105451073A (zh) * 2015-11-16 2016-03-30 深圳Tcl数字技术有限公司 Mp4视频源的传送方法和装置
CN108093299A (zh) * 2017-12-22 2018-05-29 厦门市美亚柏科信息股份有限公司 Mp4损坏文件的修复方法及存储介质

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6681580B2 (ja) * 2014-08-04 2020-04-15 パナソニックIpマネジメント株式会社 送信方法、受信方法、送信装置及び受信装置
WO2017053849A1 (en) * 2015-09-23 2017-03-30 Arris Enterprises Llc Single layer high dynamic range coding with standard dynamic range backward compatibility

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102469315A (zh) * 2010-11-16 2012-05-23 联芯科技有限公司 Mpeg-4视频码流的错误恢复方法和装置
CN104486614A (zh) * 2014-12-10 2015-04-01 央视国际网络无锡有限公司 Mp4视频格式损坏检测方法
CN104462433A (zh) * 2014-12-17 2015-03-25 四川效率源信息安全技术有限责任公司 一种恢复fat32分区数据的方法
CN105451073A (zh) * 2015-11-16 2016-03-30 深圳Tcl数字技术有限公司 Mp4视频源的传送方法和装置
CN108093299A (zh) * 2017-12-22 2018-05-29 厦门市美亚柏科信息股份有限公司 Mp4损坏文件的修复方法及存储介质

Also Published As

Publication number Publication date
CN110740391A (zh) 2020-01-31

Similar Documents

Publication Publication Date Title
CN110740391B (zh) 一种修复mp4损坏文件的方法
US7965858B2 (en) Data processing apparatus and method
CN101075462B (zh) 记录/再现/编辑装置、方法
US7920713B2 (en) Recorded video broadcast, streaming, download, and disk distribution with watermarking instructions
US8516275B2 (en) Data structure of multimedia file format, encrypting method and device thereof, and decrypting method and device thereof
US7831127B2 (en) Combining video material and data
DE60102831T2 (de) System und verfahren zur verarbeitung von mpeg-stroemen fuer die einfuegung von dateiindex
JP4481889B2 (ja) データ記録装置及びその方法、プログラム、記録媒体
US20080256431A1 (en) Apparatus and Method for Generating a Data File or for Reading a Data File
KR100904100B1 (ko) 프레임 관련 정보 제공 방법, 프레임 관련 정보 수신 방법및 프레임 관련 정보 검색 시스템
EP3695611A1 (en) Method, device, and computer program for generating timed media data
CN1264120A (zh) 数字式记录重放装置
TW201230747A (en) Arranging sub-track fragments for streaming video data
US20090320060A1 (en) Advertisement signature tracking
US8401370B2 (en) Application tracks in audio/video containers
KR101316579B1 (ko) Mp4 파일 구성 장치 및 복구 장치, mp4 파일 구성 방법 및 복구 방법
US10446188B2 (en) Method and apparatus for low latency non-linear media editing using file-based inserts into finalized digital multimedia files
KR20150139595A (ko) 컨테이너 포맷으로 된 미디어 파일의 구문 인식 조작
CN107077873A (zh) 将样本元数据与媒体样本进行耦合
EP1472880A1 (en) Error correction of stream data
KR101681835B1 (ko) 실감 효과 미디어 데이터 파일 구성 방법 및 장치, 실감 효과 미디어 데이터 파일 재생 방법 및 장치 및 실감 효과 미디어 데이터 파일 구조
US20050276580A1 (en) System and method for maintaining DVD-subpicture streams upon conversion to higher compressed data format
KR101199166B1 (ko) 보간 프레임 생성 시스템
KR20090017027A (ko) 미디어 객체 기반 메타데이터의 생성 방법, 재생 방법 및그 장치
CN112929686B (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