媒体封装-MP4

多媒体封装格式详解---MP4

官方文档地址 http://jchblog.u.qiniudn.com/doc/ISO_IEC_14496-14_2003-11-15.pdf

一、基本概念

1、 文件,由许多Box和FullBox组成。

2、 Box,每个Box由Header和Data组成。

3、 FullBox,是Box的扩展,Box结构的基础上在Header中增加8bits version和24bits flags。

4、 Header,包含了整个Box的长度size和类型type。当size==0时,代表这是文件中最后一个Box;当size==1时,意 味着Box长度需要更多bits来描述,在后面会定义一个64bits的largesize描述Box的长度;当type是uuid时,代表Box中的数 据是用户自定义扩展类型。

5、 Data,是Box的实际数据,可以是纯数据也可以是更多的子Boxes。

6、 当一个Box的Data中是一系列子Box时,这个Box又可成为Container Box。

结构如下图:

 

                                                                                             文件基本结构描述图

 

1、  ftypbox,在文件的开始位置,描述的文件的版本、兼容协议等;

2、  moovbox,这个box中不包含具体媒体数据,但包含本文件中所有媒体数据的宏观描述信息,moov box下有mvhd和trak box。

        >>mvhd中记录了创建时间、修改时间、时间度量标尺、可播放时长等信息。

        >>trak中的一系列子box描述了每个媒体轨道的具体信息。

3、  moofbox,这个box是视频分片的描述信息。并不是MP4文件必须的部分,但在我们常见的可在线播放的MP4格式文件中(例如Silverlight Smooth Streaming中的ismv文件)确是重中之重

4、  mdatbox,实际媒体数据。我们最终解码播放的数据都在这里面。

5、  mfrabox,一般在文件末尾,媒体的索引文件,可通过查询直接定位所需时间点的媒体数据。

附:Smooth Streaming中ismv文件结构,文件分为了多个Fragments,每个Fragment中包含moof和mdat。这样的结构符合渐进式播放需求。(mdat及其描述信息逐步传输,收齐一个Fragment便可播放其中的mdat)。

1

2

3

4

/* Set other implicit flags immediately */

if (mov->mode == MODE_ISM)

    mov->flags |= FF_MOV_FLAG_EMPTY_MOOV | FF_MOV_FLAG_SEPARATE_MOOF |

                  FF_MOV_FLAG_FRAGMENT;

 


 

 

 

static int mov_read_ftyp(MOVContext *c, AVIOContext *pb, MOVAtom atom)
{
    uint32_t minor_ver;
    int comp_brand_size;
    char minor_ver_str[11]; /* 32 bit integer -> 10 digits + null */
    char* comp_brands_str;
    uint8_t type[5] = {0};

    avio_read(pb, type, 4);
    if (strcmp(type, "qt  "))
        c->isom = 1;
    av_log(c->fc, AV_LOG_DEBUG, "ISO: File Type Major Brand: %.4s\n",(char *)&type);
    av_dict_set(&c->fc->metadata, "major_brand", type, 0);
    minor_ver = avio_rb32(pb); /* minor version */
    snprintf(minor_ver_str, sizeof(minor_ver_str), "%"PRIu32"", minor_ver);
    av_dict_set(&c->fc->metadata, "minor_version", minor_ver_str, 0);

    comp_brand_size = atom.size - 8;
    if (comp_brand_size < 0)
        return AVERROR_INVALIDDATA;
    comp_brands_str = av_malloc(comp_brand_size + 1); /* Add null terminator */
    if (!comp_brands_str)
        return AVERROR(ENOMEM);
    avio_read(pb, comp_brands_str, comp_brand_size);
    comp_brands_str[comp_brand_size] = 0;
    av_dict_set(&c->fc->metadata, "compatible_brands", comp_brands_str, 0);
    av_freep(&comp_brands_str);

    return 0;
}

 

 

二、MP4文件格式(ISO-14496-12/14)

MP4文件概述

MP4文件就是由各式各样的Box组成的,下表中列出了所有必选或可选的Box类型,√代表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 (handler) type

 

 

 

minf

 

 

√  

media information container

 

 

 

 

vmhd

 

 

video media header, overall information (video track only)

 

 

 

 

smhd

 

 

sound media header, overall information (sound track only)

 

 

 

 

hmhd

 

 

hint media header, overall information (hint track only)

 

 

 

 

nmhd

 

 

Null media header, overall information (some tracks only)

 

 

 

 

dinf

 

√  

data information box, container

 

 

 

 

 

dref

√  

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

 

 

 

 

stbl

 

√  

sample table box, container for the time/space map

 

 

 

 

 

stsd

√  

sample descriptions (codec types, initialization etc.) 

 

 

 

 

 

stts

√  

(decoding) time-to-sample

 

 

 

 

 

ctts

 

(composition) time to sample

 

 

 

 

 

stsc

√  

sample-to-chunk, partial data-offset

information

 

 

 

 

 

stsz

 

sample sizes (framing)

 

 

 

 

 

stz2

 

compact sample sizes (framing)

 

 

 

 

 

stco

√  

chunk offset, partial data-offset information

 

 

 

 

 

co64

 

64-bit chunk offset

 

 

 

 

 

stss

 

sync sample table (random access points)

 

 

 

 

 

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

mdat

 

 

 

 

 

 

media data container

free

 

 

 

 

 

 

free space

skip

 

 

 

 

 

 

free space

 

udta

 

 

 

 

 

user-data

 

 

cprt

 

 

 

 

copyright etc.

meta

 

 

 

 

 

 

metadata

 

hdlr

 

 

 

 

√  

handler, declares the metadata (handler) type

 

dinf

 

 

 

 

 

data information box, container

 

 

dref

 

 

 

 

data reference box, declares source(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、  ftypbox,在文件的开始位置,描述的文件的版本、兼容协议等;

2、  moovbox,这个box中不包含具体媒体数据,但包含本文件中所有媒体数据的宏观描述信息,moov box下有mvhd和trak box。

        >>mvhd中记录了创建时间、修改时间、时间度量标尺、可播放时长等信息。

        >>trak中的一系列子box描述了每个媒体轨道的具体信息。

3、  moofbox,这个box是视频分片的描述信息。并不是MP4文件必须的部分,但在我们常见的可在线播放的MP4格式文件中(例如Silverlight Smooth Streaming中的ismv文件)确是重中之重。

4、  mdatbox,实际媒体数据。我们最终解码播放的数据都在这里面。

5、  mfrabox,一般在文件末尾,媒体的索引文件,可通过查询直接定位所需时间点的媒体数据。

附:Smooth Streaming中ismv文件结构,文件分为了多个Fragments,每个Fragment中包含moof和mdat。这样的结构符合渐进式播放需求。(mdat及其描述信息逐步传输,收齐一个Fragment便可播放其中的mdat)。

 

 

 

 

 

 

http://blog.csdn.net/tx3344/article/details/8476669

MP4(MPEG-4 Part 14)是一种常见的多媒体容器格式,它是在“ISO/IEC 14496-14”标准文件中定义的。

1.最小组成单元 BOX

像FLV的tag、MKV的EBML、ASF文件中的 ASF object.mp4 是由一系列的box组成,他的最小组成单元就是box.

 

 

size;指明了整个box所占用的大小,包括header部分.

type;表示这个box的类型。(附表1)

largesize;如果box很大超过了uint32的最大数值,size就被设置为1,并用接下来的 largesize来存放大小。

 

2.mp4文件整体结构

mp4文件说白了就是一系列box组成,大box里面有小box。

接下来会深入到具体的box里面,来具体分析mp4格式

未完待续.....

 

 

附表1

 

CodeAbstractDefined in/by
ainfAsset information to identify, license and playDECE
albmAlbum title and track number (user-data)3GPP
authMedia author name (user-data)3GPP
avcnAVC NAL Unit Storage BoxDECE
blocBase location and purchase location for license acquisitionDECE
bpccBits per componentJP2
buffBuffering informationAVC
bxmlbinary XML containerISO
ccidOMA DRM Content IDOMA DRM 2.1
cdeftype and ordering of the components within the codestreamJP2
clsfMedia classification (user-data)3GPP
cmapmapping between a palette and codestream componentsJP2
co6464-bit chunk offsetISO
colrspecifies the colourspace of the imageJP2
cprtcopyright etc. (user-data)ISO
crhdreserved for ClockReferenceStream headerMP4V1
cslgcomposition to decode timeline mappingISO
ctts(composition) time to sampleISO
cvruOMA DRM Cover URIOMA DRM 2.1
dcfDMarlin DCF Duration, user-data atom typeOMArlin
dinfdata information box, containerISO
drefdata reference box, declares source(s) of media data in trackISO
dscpMedia description (user-data)3GPP
dsgdDVB Sample Group Description BoxDVB
dstgDVB Sample to Group BoxDVB
edtsedit list containerISO
elstan edit listISO
feciFEC InformatiomISO
fecrFEC ReservoirISO
fiinFD Item InformationISO
fireFile ReservoirISO
fparFile PartitionISO
freefree spaceISO
frmaoriginal format boxISO
ftypfile type and compatibilityJP2ISO
gitnGroup ID to nameISO
gnreMedia genre (user-data)3GPP
grpiOMA DRM Group IDOMA DRM 2.0
hdlrhandler, declares the media (handler) typeISO
hmhdhint media header, overall information (hint track only)ISO
hpixHipix Rich Picture (user-data or meta-data)HIPIX
icnuOMA DRM Icon URIOMA DRM 2.0
ID32ID3 version 2 containerinline
idatItem dataISO
ihdrImage HeaderJP2
iinfitem informationISO
ilocitem locationISO
imifIPMP Information boxISO
infuOMA DRM Info URLOMA DRM 2.0
iodsObject Descriptor container boxMP4V1
iphdreserved for IPMP Stream headerMP4V1
ipmcIPMP Control BoxISO
iproitem protectionISO
irefItem referenceISO
jP$20$20JPEG 2000 SignatureJP2
jp2cJPEG 2000 contiguous codestreamJP2
jp2hHeaderJP2
jp2iintellectual property informationJP2
kywdMedia keywords (user-data)3GPP
lociMedia location information (user-data)3GPP
lrcuOMA DRM Lyrics URIOMA DRM 2.1
m7hdreserved for MPEG7Stream headerMP4V1
mdatmedia data containerISO
mdhdmedia header, overall information about the mediaISO
mdiacontainer for the media information in a trackISO
mdriMutable DRM informationOMA DRM 2.0
mecoadditional metadata containerISO
mehdmovie extends header boxISO
meremetabox relationISO
metaMetadata containerISO
mfhdmovie fragment headerISO
mfraMovie fragment random accessISO
mfroMovie fragment random access offsetISO
minfmedia information containerISO
mjhdreserved for MPEG-J Stream headerMP4V1
moofmovie fragmentISO
moovcontainer for all the meta-dataISO
mvcgMultiview groupAVC
mvciMultiview InformationAVC
mvexmovie extends boxISO
mvhdmovie header, overall declarationsISO
mvraMultiview Relation AttributeAVC
nmhdNull media header, overall information (some tracks only)ISO
ochdreserved for ObjectContentInfoStream headerMP4V1
odafOMA DRM Access Unit FormatOMA DRM 2.0
oddaOMA DRM Content ObjectOMA DRM 2.0
odhdreserved for ObjectDescriptorStream headerMP4V1
odheOMA DRM Discrete Media HeadersOMA DRM 2.0
odrbOMA DRM Rights ObjectOMA DRM 2.0
odrmOMA DRM ContainerOMA DRM 2.0
odttOMA DRM Transaction TrackingOMA DRM 2.0
ohdrOMA DRM Common headersOMA DRM 2.0
padbsample padding bitsISO
paenPartition EntryISO
pclrpalette which maps a single component in index space to a multiple- component imageJP2
pdinProgressive download informationISO
perfMedia performer name (user-data)3GPP
pitmprimary item referenceISO
res$20grid resolutionJP2
rescgrid resolution at which the image was capturedJP2
resddefault grid resolution at which the image should be displayedJP2
rtngMedia rating (user-data)3GPP
sbgpSample to Group boxAVC, ISO
schischeme information boxISO
schmscheme type boxISO
sdepSample dependencyAVC
sdhdreserved for SceneDescriptionStream headerMP4V1
sdtpIndependent and Disposable Samples BoxAVC, ISO
sdvpSD Profile BoxSDV
segrfile delivery session groupISO
sencSample specific encryption dataDECE
sgpdSample group definition boxAVC, ISO
sidxSegment Index Box3GPP
sinfprotection scheme information boxISO
skipfree spaceISO
smhdsound media header, overall information (sound track only)ISO
srmbSystem Renewability MessageDVB
srmcSystem Renewability Message containerDVB
srppSTRP ProcessISO
stblsample table box, container for the time/space mapISO
stcochunk offset, partial data-offset informationISO
stdpsample degradation priorityISO
sthdSubtitle Media Header BoxDECE
stscsample-to-chunk, partial data-offset informationISO
stsdsample descriptions (codec types, initialization etc.)ISO
stshshadow sync sample tableISO
stsssync sample table (random access points)ISO
stszsample sizes (framing)ISO
stts(decoding) time-to-sampleISO
stypSegment Type Box3GPP
stz2compact sample sizes (framing)ISO
subsSub-sample informationISO
swtcMultiview Group RelationAVC
tfadTrack fragment adjustment box3GPP
tfhdTrack fragment headerISO
tfmaTrack fragment media adjustment box3GPP
tfraTrack fragment radom accessISO
tibrTier Bit rateAVC
tiriTier InformationAVC
titlMedia title (user-data)3GPP
tkhdTrack header, overall information about the trackISO
trafTrack fragmentISO
trakcontainer for an individual track or streamISO
treftrack reference containerISO
trextrack extends defaultsISO
trgrTrack grouping informationISO
trikFacilitates random access and trick play modesDECE
truntrack fragment runISO
tselTrack selection (user-data)3GPP
udtauser-dataISO
uinfa tool by which a vendor may provide access to additional information associated with a UUIDJP2
UITSUnique Identifier Technology SolutionUniversal Music
ulsta list of UUID’sJP2
url$20a URLJP2
uuiduser-extension boxISO, JP2
vmhdvideo media header, overall information (video track only)ISO
vwdiMultiview Scene InformationAVC
xml$20a tool by which vendors can add XML formatted informationJP2
xml$20XML containerISO
yrrcYear when media was recorded (user-data)3GPP

QuickTime Codes

 

CodeAbstractDefined in/by
clipVisual clipping region containerQT
crgnVisual clipping region definitionQT
ctabTrack color-tableQT
elngExtended Language TagQT
imapTrack input map definitionQT
kmatCompressed visual track matteQT
loadTrack pre-load definitionsQT
mattVisual track matte for compositingQT
pnotPreview containerQT
wideExpansion space reservationQT

 

 

 

1.File Type Box

Box Type: `ftyp’
这种box一般情况下都会出现在mp4文件的开头,它可以作为mp4容器格式的可表示信息。就像flv头‘F’ 'L' 'V' 3字节,MKV头部的1A 45 DF A3 、ASF_Header_Object 可以作为ASF容器格式的可辨识信息一样。

ftyp box内容结构如下

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  

2.Movie Box

Box Type: ‘moov’

 

moov 这个box 里面包含了很多个子box,就像上篇那个图上标的。一般情况下moov 会紧跟着 ftyp。moov里面包含着mp4文件中的metedata。音视频相关的基础信息。让我们看看moov 里面都含有哪些重要的box。

2.1 Movie Header Box

Box Type: ‘mvhd’

mvhd 结果如下:

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  

 

Field

Type

Comment

box size

4

box大小

box type

4

box类型

version

1

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

flags

3

 flags

creation time

4

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

modification time

4

修改时间

time scale

4

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

一般情况下视频的 都是90000

duration

4

该track的时间长度,用duration和time scale值可以计算track时长,比如audio track的time scale = 8000, duration = 560128,时长为

70.016,video track的time scale = 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

next track id

4

下一个track使用的id号


所以通过解析这部分内容可以或者duration、rate等主要信息。举个例子:

 

 

上面的例子解析可知 time scale = 90000,duration = 15051036(E5A91C)/ time scale = 167s.

 

2.2 Track Box

Box Type: ‘trak’

 

在moov 这个box中会含有若干个track box.每个track都是相对独立。tarck box里面会包含很多别的box,有2个很关键 Track Header BoxMedia Box。下图是个普通的mp4文件。可以看到track box的简单结构。

 

2.2.1 Track Header Box

Box Type: ‘tkhd’

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  

Field

Type

Comment

box size

4

box大小

box type

4

box类型

version

1

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

flags

3

按位或操作结果值,预定义如下:
0x000001 track_enabled,否则该track不被播放;
0x000002 track_in_movie,表示该track在播放中被引用;
0x000004 track_in_preview,表示该track在预览时被引用。
一般该值为7,如果一个媒体所有track均未设置track_in_movie和track_in_preview,将被理解为所有track均设置了这两项;对于hint track,该值为0

track id

4

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

reserved

4

保留位

duration

4

track的时间长度

reserved

8

保留位

layer

2

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

alternate group

2

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

volume

2

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

reserved

2

保留位

matrix

36

视频变换矩阵

width

4

height

4

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值