一、基本概念
1、
2、
3、
4、
当size==0时,代表这是文件中最后一个Box;当size==1时,意味着Box长度需要更多bits来描述,在后面会定义一个64bits的largesize描述Box的长度;当type是uuid时,代表Box中的数据是用户自定义扩展类型。
5、
6、
Box的结构用伪代码表示如下:
- aligned(8)
class Box (unsigned int(32) boxtype,optional unsigned int(8)[16] extended_type) - {
-
unsigned int(32) size; -
unsigned int(32) type = boxtype; -
if (size==1) -
{ -
unsigned int(64) largesize; -
} -
else if (size==0) -
{ -
// box extends to end of file -
} -
if (boxtype==‘uuid’) -
{ -
unsigned int(8)[16] usertype = extended_type; -
}
结构如下图:
二、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、 2、
3、
4、
5、
附:Smooth Streaming中ismv文件结构,文件分为了多个Fragments,每个Fragment中包含moof和mdat。这样的结构符合渐进式播放需求。(mdat及其描述信息逐步传输,收齐一个Fragment便可播放其中的mdat)。