mp4文件结构 – wangbuji的博客

转自:

一、根本思想

概述

MP4文件射中靶子全部的记载都装在box(QuickTime中为atom)中,这就是说,MP4文件是由专相当多的盒子结合的。,每个盒子都有类型和堆积起来。,BOX可以懂得为记载宾语块。。另一点钟盒子可以包含在盒子里。,这种箱子叫飞船。 box。MP4文件将率先有一点钟FTYP类型框。,作为MP4体式的迹象,并包含顾虑文件的就中的一比率通信。;那么独占的的一点钟莫夫类型的盒子(影片) 盒子),它是一种飞船。 box,子盒子包含办法的元记载通信。;MP4文件的办法记载包含在DAT类型框(MIDA)中。
Data 盒子)中,这种类型的盒子也飞船。 box,能够不已一点钟。,您也可以(当全部的办法记载援用及其他文件时),办法记载的建筑物由元记载描绘。。

   这时有就中的一比率思想。:

   track 表现示例集中。,办法记载,轨迹表现用录像磁带的或音频序列。。

   hint track 就是非常的特别的轨道不包含办法记载。,相反,它包含了及其他记载轨道为PA的标示通信。。

   sample 非敏捷的 举例来说,video 范本是帧用录像磁带的。,或一组陆续的用录像磁带的帧。,audio 采样是一点钟陆续的紧缩音频。,它们统称为范本。。敏捷的 track,示例下定义一点钟或多个流包的体式。。

   sample table 标示SAMPE时序和形体的存在检查规划的表。

   chunk由轨道的专相当多的范本单元结合的单元。

    在本贴壁纸,我们的将不议论与敏捷的互插的满意的。,只关怀包含办法记载的局部的MP4文件。。下面是一点钟类型的MP4文件的建筑物树。。

mp4文件体式解析(一)

2、Box

       率先,必要阐明的是,框射中靶子音节按次是体系音节按次。,这是大音节按次(大音节)。,复杂的说,它是一点钟32位的4音节圆整数内存模型,在低端具有高音节。。盒子由头部和形体的存在结合。,就中,割穗机称呼委任框的堆积起来和类型。,形体的存在根底类型有变化多的的含蓄和体式。。

       定额框的前4个音节(32位)为Box。 size,堆积起来包含盒子。 集箱和箱 形体的存在堆积起来的总计的盒子。,经过这种办法,我们的可以在文件中找到每个框。。或许大小是1,就是非常的箱子的堆积起来很大。 size,真正的堆积起来值是在大面积域中购置物的。。确实,独占的的DAT型盒子才有能够大用。 size。或许大小是0,标示该框是文件的决赛一点钟框。,文档的死是框的末了。。(也仅存分娩MAT类型的方框中)。。)

      后头的32位是盒子。 type,通常是4个角色。,拿 … 来说,FTYP。、莫夫等,这些盒子 类型是预下定义的。,辨别表达定期地意思。。或许它是UUID,标示该框是用户伸开类型。。中频盒 无下定义类型。,我们的被期望疏忽它。

(1、 mp4文件由数量庞大的数量庞大的Box和FullBox结合。

(2、 Box,每个框由割穗机和记载结合。。

(3、 FullBox,这是盒子的延伸比率。,鉴于Box建筑物,向升至桅顶添加8位。 version和24bits flags。

(4、 Header,包含总计的框的堆积起来堆积起来和类型类型。。当size==0时,这是文档射中靶子决赛一点钟框。;当size==1时,这吝啬的盒子堆积起来必要更多的有点儿来描绘。,嗣后将下定义64位对框堆积起来的大的描绘。;当类型为UUID时,在框中表现记载是用户下定义的伸开类型。。

(5、 Data,这是BOX的实践记载。,它可以是纯记载或更多的子框。。

(6、当一点钟盒子记载是搭上的子盒子,就是非常的盒子可以生长飞船。 Box。当框不包含子框时,就是非常的盒子叫做翻书。 Box,Full Box是MP4科学实验报告中称呼委任的一点钟特别的盒子。。

Box 割穗机的建筑物是伪造的。加密表现如次:

建筑物如次所示。:

 

                                                                                             BOX建筑物描绘图

二、MP4文件体式(ISO14146—12/14)

MP4文件是由各种各样的盒子结合的。,下表中列出了全部的必选或可选的Box类型,箱的代表应该被选。。

ftyp

√ 

file type and compatibility

pdin

progressive download information

moov

√ 

container for all the metadata

mvhd

√ 

movie header, overall declarations

trak

√ 

container for an individual track or stream

tkhd

√ 

track header, overall information about the track

tref

track reference container

edts

edit list container

elst

an edit list

mdia

√ 

container for the media information in a track

mdhd

√ 

media header, overall information about the media

hdlr

√ 

handler, declares the media (处置顺序) type

明夫

√ 

media information container

vmhd

video media header, overall information (用录像磁带的) track 只)

smhd

sound media header, overall information (给整声) track 只)

hmhd

hint media header, overall information (敏捷的) track 只)

nmhd

Null media header, overall information (就中的一比率) tracks 只)

dinf

√ 

data information box, container

dref

√ 

data reference box, declares 源(s) of media data in track

stbl

√ 

sample table box, container for the time/space map

stsd

√ 

sample descriptions (编解码器) types, initialization etc.)

stts

√  

(译码) time-to-sample

ctts

(和解) time to sample

stsc

√ 

sample-to-chunk, partial data-offset

information

stsz

sample sizes (表达)

stz2

compact sample sizes (表达)

STCO

√ 

chunk offset, partial data-offset information

co64

64-bit chunk offset

stss

sync sample table (随机) access 要点)

stsh

shadow sync sample table

padb

sample padding bits

stdp

sample degradation priority

sdtp

independent and disposable samples

SBGP

sample-to-group

sgpd

sample group description

subs

sub-sample information

mvex

movie extends box

mehd

movie extends header box

trex

√ 

track extends defaults

ipmc

IPMP Control Box

moof

movie fragment

mfhd

√ 

movie fragment header

traf

track fragment

tfhd

√ 

track fragment header

trun

track fragment run

sdtp

independent and disposable samples

SBGP

sample-to-group

subs

sub-sample information

mfra

movie fragment random access

tfra

track fragment random access

mfro

√ 

movie fragment random access offset

降糖片

media data container

free

free space

skip

free space

udta

user-data

cprt

copyright etc.

meta

metadata

hdlr

√ 

handler, declares the metadata (处置顺序) type

dinf

data information box, container

dref

data reference box, declares 源(s) of metadata items

ipmc

IPMP Control Box

iloc

item location

ipro

item protection

sinf

protection scheme information box

frma

original format box

imif

IPMP Information box

schm

scheme type box

schi

scheme information box

iinf

item information

xml

XML container

bxml

binary XML container

pitm

primary item reference

fiin

file delivery item information

paen

partition entry

fpar

file partition

fecr

FEC reservoir

segr

file delivery session group

gitn

group id to name

tsel

track selection

meco

additional metadata container

mere

metabox relation

率先,引见就中的一比率要紧的盒子。,非常的你可以在后续的深思中有一点钟好主意。:

1、  ftyp box,在文件的前线,描绘文件的版本、适合科学实验报告等。;

2、  moov box,此框不包含指定的办法记载。,不管怎样,它包含THI中全部的办法记载的宏描绘通信。,moov 盒子下面有MVHD和TRAK。 box。

        找到工夫记载在MVHD中。、修正工夫、工夫度量标尺、它可以玩工夫和堆积起来等通信。。

        TRAK射中靶子搭上子框描绘了每个办法的详细通信。。

3、  moof box,就是非常的方块是一点钟用录像磁带的使分裂描绘通信。。它产生断层MP4文件的一比率。,但在我们的共有权的可在线玩的MP4体式文件中(拿 … 来说Silverlight Smooth 流办法射中靶子ISMV文件是重中之重。。

4、  降糖片 box,实践办法记载。我们的终极解码并玩其射中靶子记载。。

5、  mfra box,通常在文档的末了。,办法搜集文件,可经过查询正好状态所需工夫点的办法记载。

附:Smooth 流办法射中靶子ISMV文件建筑物,文件被切除成多个使分裂。,每个Fragment中包含moof和降糖片。非常的的建筑物清偿过的了渐进的责任。。(降糖片及其描绘通信逐渐调动,收齐一点钟Fragment便可玩其射中靶子降糖片)。

************************************

** 文件类型ftyp                              **

************************************

ftyp box 记载建筑物的伪加密表现:

是什么污辱?这是裁判描绘的。:

Each brand is a printable 四字 code, registered with ISO, that identifies a precise 定额。ISO记录的4个角色。

下表由体系导出。,列出几种共有权的根本文件体式。,办法封装体式认出。

可以检查更多满意的。

  Brand Extension Mime Type
MP4 mp41, mp42 .mp4 video/mp4, audio/mp4, application/mp4
3GPP various, e.g. 3gp4, 3gp5 .3gp video/3gpp, audio/3gpp
3GPP2 3g2a .3g2 video/3gpp2, audio/3gpp2
Motion JPEG 2000 mjp2 .mj2 video/mj2
QuickTime “qt” .mov video/quicktime

结合实践文件,下图是MP4文件胚芽名列前茅安置的记载

堆积起来(4音节):0x0000001c:盒子的堆积起来是28音节。;

Boxtype(4音节):0x66747970:FTYP的ASCII码,箱形记分;

MaigruBrand(4音节):0x69736f6d:ISOM的ASCII加密;

迷你版本(4音节):0x00000200:ISMO版本号;

compatible_brands(12音节):请注意到,此文档遵照(或可以并存的)ISMO。,iso2,MP41三科学实验报告。

ftyp BOX通常储蓄在文件的前线。,经过辨析盒子,我们的可以组成怀疑句和否定句我们的的软件(玩器)、demux、解析器变卖被期望运用哪个科学实验报告来解析文件。。

************************************

** 元记载moov                              **

************************************

movie box —— container box whose 子盒子 define the metadata for a presentation (‘moov’) 

MOV包含办法P所需的搭上附带框内存元记载。metadata)。

两点怀疑:是什么元记载?Moov有什么子盒子?

1)元记载:描绘记载的记载。办法文件的元记载是什么?为了记录一点钟正好的懂得:

很是运用体式厂子获取MP4 FI的办法通信。,这些办法音讯根本上包含在Moov。。

用录像磁带的包含编码级。、分解率、色域、码率、帧速、位深、持续工夫等。……

音频还包含给整声传球。、音频属性,如抽样率。

这些元记载的涵义分娩我们的。:我们的的体系(如PC玩器),高清玩器可以经过MOOV 箱体辨析,自适应买卖玩影片在必然的模型。。嵌入式界,鉴于DSP或ARM的RAM空的稍许地。,常常必要静态装载量就是非常的BROA所需的解码器。算法顺序),经过自适应,可以运用最廉的CPU。,成功忍受多速率和多体式的多人游玩。。

2)莫夫用来内存这些通信的子盒子是什么?

mvhd ——This box defines overall information which is 办法孤独, and relevant to the entire 演示。

全部的文件都是独占的的(一点钟文件不得不包含一点钟MVHD)。 盒子),对办法记载举行片面、片面的描绘。包含办法找到和修正的工夫和工夫程度。、默许音量、色域、工夫和及其他通信。

率先,MVHD是一点钟满的的。 Box,援用我的用姓名的首字母签名的篇文字。:“ FullBox,这是盒子的延伸比率。,鉴于Box建筑物,向升至桅顶添加8位。 version和24bits flags。”,见下图:

图片射中靶子白色捣碎是Moov。 箱形堆积起来与辨别出,

定额蓝是MVHD的堆积起来0x6C。,

捣碎黄色是MVHD的记分和满意的。:

0x6D766864 它是MVHD的ASCII认出。;

0x00000000 它是由Full box伸开的辨别出位。,这0个都是。,版本和记分均为0。,顾及后面的建筑物下定义,它显示了工夫和。

用姓名的首字母签名的点钟0x7C25B080是找到工夫,其次个0x7C25B080是决赛修正工夫。我们的可以查看办法无被修正。。这两个值若何描绘详细工夫?

 time is an integer that declares the creation time of the presentation 中 seconds 半夜以后, Jan. 1, 1904, in UTC 工夫)

即,在UTC工夫从1904年1月1日到零点的秒数。。让我们的手工操作计算。:

0x7C25B080 = 2082844800秒,汹涌的每年365天。,不思索闰年,1904+66=1970年中。看来就是非常的办法文件无定额化。,无比照ISO标准填写创作和修正工夫 the way,该文件是在一年前运用IKU加密替换功劳的。。但这时的工夫不熟练的引起玩家辨别出和玩用录像磁带的。。 

我们的假说4音节的工夫描绘取其极大值0xFFFFFFFF,经过计算,少数忍受率为2040。。或许,假说该限制因素是玩用录像磁带的所精华的的限制因素,2040后,或许全部的的MP4文件将无法玩睡眠状态。~(0 == 版本)。

0x000003E8 它是工夫刻度。,此值表现用于此文档射中靶子全部的工夫描绘的单元。。0x3E8 = 1000,破旧的1s将分为1000个比率。,每份1ms。

0x000A06A2这是持续工夫。,办法可以玩更长工夫。,0xA06A2 =  657058,就是非常的数值的单位与实践工夫的对应相干快要经过下面的timescale限制因素。

duration / timescale = 可玩持续工夫(s)。在这时,我们的变卖用录像磁带的可以玩。。用MPC翻开,工夫的一段与我们的的计算是分歧的。。

工夫刻度的工夫程度贯串总计的文档。,工夫的全部的描绘都被期望以它们为根底。,拿 … 来说,解码工夫是DTS。,显示工夫PTS和及其他最要紧的工夫描绘。。

0x00010000 办法速率,就是非常的值代表原始全速。。

0x0100 办法音量,此值表现满的卷。。

下搭上的值是建筑物射中靶子预下定义值。,请参阅建筑物下定义。。

trak box ——This is a container box for a single track of a 演示。 A presentation consists of one or more 轨道。各 track is independent of the other tracks in the presentation and carries its own temporal and 空的通信。
Each track will contain its associated Media 盒子。

它的附带框包含临时的ME的独占的描绘通信。。

我们的变卖用录像磁带的通常有多个音轨。。

拿 … 来说,真正的DVD让着重号飞,1)有一点钟影片屏风的用录像磁带的轨道。。2)至多两个音轨辨别试图官僚的和四川版本。,确实,为了产量更真实的观察比分,为了相配多频道家庭影院,影片也有特刊的给整声T。。3)多字的幕轨迹,简体中文,繁体中文,英文……。从就是非常的我们的可以懂得为什么TRAK box能够不已一点钟。:每个轨道是孤独的。,具有私利特点和属性的。,如此,我们的必要描绘彼此的不插嘴。。

我们的普通所看的MP4文件中moov下都至多是mvhd-trak-trak-trak…这种组成。

tkhd box 记载建筑物的伪加密表现:

就像我们的的MOVH射中靶子MVHD俱 box,不管怎样TKHD只描绘了单轨索道的特点。。


很是实践办法射中靶子TKHD记载。:

0x5c是tkhd box堆积起来,0x76B664是TKHD的ASCII码。。

0x00 00 00 运用满。 框射中靶子记分位(满) box 8位 version + 24bits flag,看一眼我的用姓名的首字母签名的本日志。,这时疲乏 0xf,即1111b。

4个代表辨别从低到高。:

Track_enabled: Indicates that the track is 启用。 或许就是非常的名列前茅是0,轨道的满意的不必要玩(拿 … 来说,我们的运用就中的一比率n)。<如Sony Vegas>组成怀疑句和否定句用录像磁带的剪辑时,有些轨迹仅供顾及和效仿。,输入时停工轨道。。
Track_in_movie: Indicates that the track is used in the 演示。 
Track_in_preview: Indicates that the track is used when previewing the 演示。

Track_in_poster: Indicates that the track is used in 影片的
poster.

/* ——————————————————————————————————-*/

important:我们的变卖,MP4文件体式是ISO-14496-12根底文件体式的衍生品,1449—14,伸开了12科学实验报告齐头并进一步下定义。。

要紧的是。“14496-12 原始文件体式科学实验报告或许先人被赔偿,我们的一下子看到这种文件体式用姓名的首字母签名是由Apple公司的QuickTime办法体式开展而来的。

即,MOV体式功劳了ISO 14496 – 12科学实验报告,MP4是从科学实验报告中派生出现的。,f4v,ismv,3GP和及其他经用办法封装体式。。

如此,上述的捣碎的张贴布告于位是。,1446-12未一下子看到任何的描绘。,在Apple科学实验报告中,我们的查看了正确的的下定义。。

详见 https://developer.apple.com/library/mac/#documentation/QuickTime/QTFF/QTFFChap2/qtff2.html

/* ——————————————————————————————————-*/

两个0xc5268eb6 它是轨道的找到工夫和决赛修正工夫。;

紧随其后的是0x000 000 02,代表轨迹 ID =2,Track ID产生断层0。,独占的的,不行重用的辨别出轨迹办法;

剩的0位是保存位。;

0x000 09d97是就是非常的轨道的持续工夫。,必要与MVHD配合 框射中靶子工夫刻度 计算实践工期。

就中的一比率后续的死场将不再被辨析。,就中的一比率与MVHD反复。,你可以查看先前的那个。文字。我们的看两个坩埚界。:

layer,相似地PS图象处置软件射中靶子层思想,较小的号码在玩时更将近用户(下层)。。

alternate_group,轨道备用包支持,上班为0时,这吝啬的该轨道满意的无支持性的。;要不然,就是非常的轨道能够有零到多个支持性的轨道。。当同一组竞赛时 ID的轨迹只选择一点钟玩家玩。。

发表评论

电子邮件地址不会被公开。 必填项已用*标注