MP4_3GP文件格式分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MP4文件格式分析
MP4是ISO多媒体文件格式(Media File format)的一个实例,MP4的标准定义在“ISO/IEC 14496-14Part 14: MP4 file format”中,而多媒体文件格式定义于“ISO/IEC 14496-12 and ISO/IEC 15444-12”。
1.概述
MP4文件中的所有数据都装在box(Apple的QuickTime File Format中称为atom)中,也就是说MP4文件由若干个box组成,每个box有类型和长度,可以将box理解为一个数据对象块。box中可以包含另一个box,这种box称为container box。一个MP4文件首先会有且只有一个“ftyp”类型的box,作为MP4格式的标志并包含关于文件的一些信息;之后会有且只有一个“moov”类型的box(Movie Box),它是一种container box,子box包含了媒体的metadata信息;MP4文件的媒体数据包含在“mdat”类型的box(Midia Data Box)中,该类型的box也是container box,可以有多个,也可以没有(当媒体数据全部引用其他文件时),媒体数据的结构由metadata进行描述。
下图为一个典型的MP4文件的结构树。
2.Box
首先需要说明的是,box中的字节序为网络字节序,也就是大端字节序(Big-Endian),简单的说,就是一个32位的4字节整数存储方式为高位字节在内存的低端。Box由header
和body组成,其中header统一指明box的大小和类型,body根据类型有不同的意义和格式。
标准的box开头的4个字节(32位)为box size,该大小包括box header和box body整个box的大小,这样我们就可以在文件中定位各个box。如果size为1,则表示这个box的大小为large size,真正的size值要在largesize域上得到。(实际上只有“mdat”类型的box
才有可能用到large size。)如果size为0,表示该box为文件的最后一个box,文件结尾即为该box结尾。(同样只存在于“mdat”类型的box中。)
size后面紧跟的32位为box type,一般是4个字符,如“ftyp”、“moov”等,这些box type 都是已经预定义好的,分别表示固定的意义。如果是“uuid”,表示该box为用户扩展类型。如果box type是未定义的,应该将其忽略。
3.File Type Box(ftyp)
该box有且只有1个(在早期版本中可以没有ftyp box,可以不用考虑此种情况),并且只能被包含在文件层,而不能被其他box包含。该box应该被放在文件的最开始,指示该MP4文件应用的相关信息。
“ftyp” body依次包括1个32位的major brand(4个字符),1个32位的minor version(整数)和1个以32位(4个字符)为单位元素的数组compatible brands。这些都是用来指示文件应用级别的信息。
ftyp的定义如下:
aligned(8) class FileTypeBox
extends Box(‘ftyp’) {
unsigned int(32) major_brand; // 主版本信息,ex:isom
unsigned int(32) minor_version; // 次版本信息,是一个整数,ex:512
unsigned int(32) compatible_brands[]; // to end of the box,兼容信息ex:mp41 }
Ftyp box的长度存在文件的前4个字节中,例如下图中ftyp的长度为1C,即16 + 12 = 28
字节。
ftyp box参考图
开头的黑色框内为box长度28,蓝色框内为box关键字”ftyp” ,红色框内为主版本信息”isom”,绿色框内为次版本信息”0020”,粉色框内为兼容信息”isomiso2mp41”。
3.1 主版本信息(major_brand)
此标记存在于file-type(ftyp)box中,紧接着”ftyp”就是。
Mp4文件识别的主版本标志如下表所示,常见的标识用红色字体显示。
'3g2a' => '3GPP2 Media (.3G2)',
'3ge6' => '3GPP (.3GP) Release 6 MBMS Extended Presentations',
'3ge7' => '3GPP (.3GP) Release 7 MBMS Extended Presentations',
'3gg6' => '3GPP Release 6 General Profile',
'3gp1' => '3GPP Media (.3GP) Release 1 ? (non-existent)',
'3gp2' => '3GPP Media (.3GP) Release 2 ? (non-existent)',
'3gp3' => '3GPP Media (.3GP) Release 3 ? (non-existent)',
'3gp4' => '3GPP Media (.3GP) Release 4',
'3gp5' => '3GPP Media (.3GP) Release 5',
'3gp6' => '3GPP Media (.3GP) Release 6 Basic Profile',
'3gr6' => '3GPP Media (.3GP) Release 6 Progressive Download',
'3gs6' => '3GPP Media (.3GP) Release 6 Streaming Servers',
'3gs7' => '3GPP Media (.3GP) Release 7 Streaming Servers',
'avc1' => 'MP4 Base w/ AVC ext [ISO 14496-12:2005]',
'caep' => 'Canon Digital Camera',
'caqv' => 'Casio Digital Camera',
'cdes' => 'Convergent Design',
'f4v ' => 'Video for Adobe Flash Player 9+ (.F4V)',
'f4p ' => 'Protected Video for Adobe Flash Player 9+ (.F4P)',
'f4a ' => 'Audio for Adobe Flash Player 9+ (.F4A)',
'f4b ' => 'Audio Book for Adobe Flash Player 9+ (.F4B)',
'isc2' => 'ISMACryp 2.0 Encrypted File',
'iso2' => 'MP4 Base Media v2 [ISO 14496-12:2005]',
'isom' => 'MP4 Base Media v1 [IS0 14496-12:2003]',
'jp2 ' => 'JPEG 2000 Image (.JP2) [ISO 15444-1 ?]',
'jp20' => 'Unknown, from GPAC samples (prob non-existent)',
'jpm ' => 'JPEG 2000 Compound Image (.JPM) [ISO 15444-6]',
'jpx ' => 'JPEG 2000 w/ extensions (.JPX) [ISO 15444-2]',
'kddi' => '3GPP2 EZmovie for KDDI 3G Cellphones',
'm4a ' => 'Apple iTunes AAC-LC (.M4A) Audio',
'm4b ' => 'Apple iTunes AAC-LC (.M4B) Audio Book',
'm4p ' => 'Apple iTunes AAC-LC (.M4P) AES Protected Audio',
'm4v ' => 'Apple iTunes Video (.M4V) Video',
'm4vh' => 'Apple TV (.M4V)',
'm4vp' => 'Apple iPhone (.M4V)',
'mj2s' => 'Motion JPEG 2000 [ISO 15444-3] Simple Profile',
'mjp2' => 'Motion JPEG 2000 [ISO 15444-3] General Profile',
'mmp4' => 'MPEG-4/3GPP Mobile Profile (.MP4 / .3GP) (for NTT)',
'mp21' => 'MPEG-21 [ISO/IEC 21000-9]',