MP4文件格式解析个人总结讲解.docx

上传人:b****7 文档编号:15687064 上传时间:2023-07-06 格式:DOCX 页数:11 大小:153.44KB
下载 相关 举报
MP4文件格式解析个人总结讲解.docx_第1页
第1页 / 共11页
MP4文件格式解析个人总结讲解.docx_第2页
第2页 / 共11页
MP4文件格式解析个人总结讲解.docx_第3页
第3页 / 共11页
MP4文件格式解析个人总结讲解.docx_第4页
第4页 / 共11页
MP4文件格式解析个人总结讲解.docx_第5页
第5页 / 共11页
MP4文件格式解析个人总结讲解.docx_第6页
第6页 / 共11页
MP4文件格式解析个人总结讲解.docx_第7页
第7页 / 共11页
MP4文件格式解析个人总结讲解.docx_第8页
第8页 / 共11页
MP4文件格式解析个人总结讲解.docx_第9页
第9页 / 共11页
MP4文件格式解析个人总结讲解.docx_第10页
第10页 / 共11页
MP4文件格式解析个人总结讲解.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

MP4文件格式解析个人总结讲解.docx

《MP4文件格式解析个人总结讲解.docx》由会员分享,可在线阅读,更多相关《MP4文件格式解析个人总结讲解.docx(11页珍藏版)》请在冰点文库上搜索。

MP4文件格式解析个人总结讲解.docx

MP4文件格式解析个人总结讲解

 

MP4文件格式解析总结

1.引言

MP4是一种常见的多媒体容器格式,对应MPEG-4标准,这种容器格式非常全面开放,被认为可以在其中嵌入任何形式的数据,各种编码的视频、音频等都可以。

在MP4文件中,媒体的描述信息与媒体数据是分开的,并且媒体数据的组织也很自由,不一定要按照时间顺序排列。

同时,MP4也支持流媒体,MP4目前被广泛用于封装h.264视频和AAC音频,是高清视频的代表。

MP4格式的官方文件后缀名是“.mp4”,还有其他的以mp4为基础进行的扩展或者是缩水版本的格式。

2.MP4中一些概念详解

MP4文件格式中,所有的内容存在一个称为movie的容器中。

一个movie可以由多个tracks组成。

每个track就是一个随时间变化的媒体序列,track里的每个时间单位是一个sample,它可以是一帧视频,或者一段连续的压缩音频。

sample按照时间顺序排列。

其中一帧音频可以分解成多个音频sample,所以音频一般用sample作为单位,而不用帧。

MP4文件格式的定义里面,用sample表示一个时间帧或者数据单元。

几个连续的sample就构成了一个chunk。

3.MP4文件结构分析

3.1box结构

MP4由一个一个box组成,每个box由一个boxheader和boxdata组成,boxheader又分为3部分:

①4字节的size:

表示这个box的大小

②4字节的type:

表示这个box的类型

③8字节的largesize

如果整个box的大小超出了4字节能表示的最大值,那么size=1,同时,box的大小就储存在largesize中。

3.2MP4总体结构

Mp4必须包含ftypbox、moovbox、mdatbox。

Filetypebox(ftyp)用来储存文件类型的相关信息,Moviebox(moov)用来储存媒体的信息,是一个containerbox,

Mediadatabox(mdat)用来储存媒体的具体数据

3.3Moviebox(moov)

一个moviebox包含一个mvhdbox和若干个trakbox,比如audiotrakbox,vediotrakbox。

3.3.1MovieHeaderbox(mvhd)

mvmd具体结构如下:

字段

字节数

意义

boxsize

4

box大小

boxtype

4

box类型

version

1

box版本,0或1,一般为0。

(以下字节数均按version=0)

flags

3

creationtime

4

创建时间(相对于UTC时间1904-01-01零点的秒数)

modificationtime

4

修改时间

timescale

4

文件媒体在1秒时间内的刻度值,可以理解为1秒长度的时间单元数

duration

4

该track的时间长度,用duration和timescale值可以计算track时长,比如audiotrack的timescale=8000,duration=560128,时长为70.016,videotrack的timescale=600,duration=42000,时长为70

rate

4

推荐播放速率,高16位和低16位分别为小数点整数部分和小数部分,即[16.16]格式,该值为1.0(0x00010000)表示正常前向播放

volume

2

与rate类似,[8.8]格式,1.0(0x0100)表示最大音量

reserved

10

保留位

matrix

36

视频变换矩阵

pre-defined

24

nexttrackid

4

下一个track使用的id号

3.3.2Trakbox

Trakbox必须包含一个tkhdbox和一个mediabox,此外还有很多可选的box:

①TrackHeaderbox(tkhd):

定义了一个track的特性,例如时间,空间和音量信息。

结构如下:

字段

字节数

意义

boxsize

4

box大小

boxtype

4

box类型

version

1

box版本,0或1,一般为0。

(以下字节数均按version=0)

flags

3

按位或操作结果值,预定义如下:

0x000001track_enabled,否则该track不被播放;

0x000002track_in_movie,表示该track在播放中被引用;

0x000004track_in_preview,表示该track在预览时被引用。

一般该值为7,如果一个媒体所有track均未设置track_in_movie和track_in_preview,将被理解为所有track均设置了这两项;对于hinttrack,该值为0

creationtime

4

创建时间(相对于UTC时间1904-01-01零点的秒数)

modificationtime

4

修改时间

trackid

4

id号,不能重复且不能为0

reserved

4

保留位

duration

4

track的时间长度

reserved

8

保留位

layer

2

视频层,默认为0,值小的在上层

alternategroup

2

track分组信息,默认为0表示该track未与其他track有群组关系

volume

2

[8.8]格式,如果为音频track1.0(0x0100)表示最大音量;否则为0

reserved

2

保留位

matrix

36

视频变换矩阵

width

4

height

4

高,均为[16.16]格式值,与sample描述中的实际画面大小比值,用于播放时的展示宽高

②mediabox:

该box是一个包含一些track媒体数据信息box的containerbox。

3.4Mediabox

Mediabox主要包含mediaheaderbox(mdhd)、hdlrbox、minfbox。

3.4.1Mediaheaderbox(mdhd)

mediaheaderbox(mdhd)定义了整个movie的特性,例如timescale和duratio,具体结构如下:

字段

字节数

意义

boxsize

4

box大小

boxtype

4

box类型

version

1

box版本,0或1,一般为0。

(以下字节数均按version=0)

flags

3

 

creationtime

4

创建时间(相对于UTC时间1904-01-01零点的秒数)

modificationtime

4

修改时间

timescale

4

文件媒体在1秒时间内的刻度值,可以理解为1秒长度的时间单元数

duration

4

track的时间长度

language

2

媒体语言码。

最高位为0,后面15位为3个字符(见ISO639-2/T标准中定义)

pre-defined

2

 

3.4.2Hdlrbox

Hdlrbox解释了媒体的播放过程信息。

同时也指明了本trak类型,如:

vedio、autio、hint,具体结构如下:

字段

字节数

意义

boxsize

4

box大小

boxtype

4

box类型

version

1

box版本,0或1,一般为0。

(以下字节数均按version=0)

flags

3

 

pre-defined

4

 

handlertype

4

在mediabox中,该值为4个字符:

“vide”—videotrack

“soun”—audiotrack

“hint”—hinttrack

reserved

12

 

name

不定

tracktypename,以‘\0’结尾的字符串

3.4.3Minfbox

存储了解释该track的媒体数据的handler-specific的信息。

mediahandler用这些信息将媒体时间映射到媒体数据,并进行处理。

minf包含一个headerbox,一个DataInformationBox(dinf)和一个SampleTableBox(stbl):

①Headerbox定义颜色和图形模式信息

②dinfbox解释如何定位媒体信息

③stblbox包含了关于track中sample所有时间和位置的信息,以及sample的编解码等信息。

利用这个表,可以解释sample的时序、类型、大小以及在各自存储容器中的位置。

3.5SampleTableBox(stbl)

SampleTableBox(stbl)包含:

sampledescriptionbox(stsd)、timetosamplebox(stts)、samplesizebox(stsz)、sampletochunkbox(stsc)、chunkoffsetbox(stco)、compositiontimetosamplebox(ctts)、syncsamplebox(stss)。

3.5.1SampleDescriptionBox(stsd)

boxheader和version字段后会有一个entrycount字段,根据entry的个数,每个entry会有type信息,如“vide”、“sund”等,根据type不同sampledescription会提供不同的信息,例如对于videotrack,会有“VisualSampleEntry”类型信息,对于audiotrack会有“AudioSampleEntry”类型信息。

视频的编码类型、宽高、长度,音频的声道、采样等信息都会出现在这个box中。

3.5.2TimeToSampleBox(stts)

stts存储了sample的duration,描述了sample时序的映射方法,我们通过它可以找到任何时间的sample。

stts可以包含一个压缩的表来映射时间和sample序号,用其他的表来提供每个sample的长度和指针。

表中每个条目提供了在同一个时间偏移量里面连续的sample序号,以及samples的偏移量。

递增这些偏移量,就可以建立一个完整的timetosample表。

3.5.3SampleSizeBox(stsz)

stsz定义了每个sample的大小,包含了媒体中全部sample的数目和一张给出每个sample大小的表。

这个box相对来说体积是比较大的。

3.5.4SampleToChunkBox(stsc)

用chunk组织sample可以方便优化数据获取,一个thunk包含一个或多个sample。

stsc中用一个表描述了sample与chunk的映射关系,查看这张表就可以找到包含指定sample的thunk,从而找到这个sample。

3.5.5SyncSampleBox(stss)

stss确定media中的关键帧。

对于压缩媒体数据,关键帧是一系列压缩序列的开始帧,其解压缩时不依赖以前的帧,而后续帧的解压缩将依赖于这个关键帧。

stss可以非常紧凑的标记媒体内的随机存取点,它包含一个sample序号表,表内的每一项严格按照sample的序号排列,说明了媒体中的哪一个sample是关键帧。

如果此表不存在,说明每一个sample都是一个关键帧,是一个随机存取点。

3.5.6ChunkOffsetBox(stco)

stco定义了每个thunk在媒体流中的位置。

位置有两种可能,32位的和64位的,后者对非常大的电影很有用。

在一个表中只会有一种可能,这个位置是在整个文件中的,而不是在任何box中的,这样做就可以直接在文件中找到媒体数据,而不用解释box。

需要注意的是一旦前面的box有了任何改变,这张表都要重新建立,因为位置信息已经改变了。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2