MP4文件格式具体解释——结构概述

MP4文件格式具体解释(ISO-14496-12/14)

Author:Pirate Leo

Email:[email protected]

一、基本概念

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。

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、  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)。

时间: 2024-08-01 10:32:39

MP4文件格式具体解释——结构概述的相关文章

MP4文件格式

MP4文件格式详解(ISO-14496-12/14) Author:Pirate Leo Email:[email protected] 一.基本概念 1. 文件,由许多Box和FullBox组成. 2. Box,每个Box由Header和Data组成. 3. FullBox,是Box的扩展,Box结构的基础上在Header中增加8bits version和24bits flags. 4. Header,包含了整个Box的长度size和类型type.当size==0时,代表这是文件中最后一个Bo

mp4文件格式解析

目前MP4的概念被炒得很火,也很乱.最开始MP4指的是音频(MP3的升级版),即MPEG-2 AAC标准.随后MP4概念被转移到视频上,对应的是MPEG-4标准.而现在我们流行的叫法,多半是指能播放MPEG-4标准编码格式视频的播放器.但是这篇文章介绍的内容跟上面这些都无关,我们要讨论的是MP4文件封装格式,对应的标准为ISO/IEC 14496-12,即信息技术 视听对象编码的第12部分:ISO 基本媒体文件格式(Information technology Coding of audio-v

mp4文件格式解析二

目前MP4的概念被炒得很火,也很乱.最开始MP4指的是音频(MP3的升级版),即MPEG-2 AAC标准.随后MP4概念被转移到视频上,对应的是MPEG-4标准.而现在我们流行的叫法,多半是指能播放MPEG-4标准编码格式视频的播放器.但是这篇文章介绍的内容跟上面这些都无关,我们要讨论的是MP4文件封装格式,对应的标准为ISO/IEC 14496-12,即信息技术 视听对象编码的第12部分:ISO 基本媒体文件格式(Information technology Coding of audio-v

MP4文件格式的解析

MP4文件格式的解析,以及MP4文件的分割算法 mp4应该算是一种比较复杂的媒体格式了,起源于QuickTime.以前研究的时候就花了一番的功夫,尤其是如何把它完美的融入到视频点播应用中,更是费尽了心思,主要问题是处理mp4文件庞大的"媒体头".当然,流媒体点播也可以采用flv格式来做,flv也可以封装H.264视频数据的,不过Adobe却不推荐这么做,人家说毕竟mp4才是H.264最佳的存储格式嘛. 这几天整理并重构了一下mp4文件的解析程序,融合了分解与合并的程序,以前是c语言写的

PNG文件格式具体解释

PNG文件结构分析(上:了解PNG文件存储格式) 前言 我们都知道,在进行J2ME的手机应用程序开发的时候,在图片的使用上,我们能够使用PNG格式的图片(甚至于在有的手机上,我们仅仅能够使用PNG格式的图片),虽然使用图片能够为我们的应用程序添加不少亮点,然而,仅仅支持PNG格式的图片却又限制了我们进一步发挥的可能性(事实上,应该说是因为手机平台上的处理能力有限). 在MIDP2中,或者某些厂商(如NOKIA)提供的API中,提供了drawPixels/getPixels的方法,这些方法进一步提

MP4文件格式的解析,以及MP4文件的分割算法

mp4应该算是一种比较复杂的媒体格式了,起源于QuickTime.以前研究的时候就花了一番的功夫,尤其是如何把它完美的融入到视频点播应用中,更是费尽了心思,主要问题是处理mp4文件庞大的"媒体头".当然,流媒体点播也可以采用flv格式来做,flv也可以封装H.264视频数据的,不过Adobe却不推荐这么做,人家说毕竟mp4才是H.264最佳的存储格式嘛. 这几天整理并重构了一下mp4文件的解析程序,融合了分解与合并的程序,以前是c语言写的,应用在linux上运行的服务器程序上,现在改成

BMP文件格式具体解释

BMP文件格式具体解释(BMP file format) BMP文件格式,又称为Bitmap(位图)或是DIB(Device-Independent Device,设备无关位图),是Windows系统中广泛使用的图像文件格式.由于它能够不作不论什么变换地保存图像像素域的数据.因此成为我们取得RAW数据的重要来源.Windows的图形用户界面(graphical user interfaces)也在它的内建图像子系统GDI中对BMP格式提供了支持. 以下以Notepad++为分析工具,结合Wind

mp4文件格式之fragment mp4

目前网络上对mp4文件格式的总结已经相当多了,我就不在这里抄别人总结的东西了,想入门的话百度一下会有许多这方面的文章.这里介绍一下其他文章中很少涉及的一种mp4文件结构,即fragment mp4,也有称之为ismv文件的. 想真正了解mp4文件格式的话,有一个开源工具项目可以学习:mp4 explorer.一方面,这个工具可以按MPEG-4标准去解析mp4文件,直观上帮助大家去看mp4文件的格式.另一方面,认真学习其代码,就可以了解mp4文件是如何被存取和访问的,对致力于底层研究的同学是个福音

04 循环结构概述和for语句的格式及其使用

04.01_Java语言基础(循环结构概述和for语句的格式及其使用) A:循环结构的分类 for,while,do-while B:循环结构for语句的格式: for(初始化表达式;条件表达式;循环后的操作表达式) { 循环体; } C执行流程: a:执行初始化语句 b:执行判断条件语句,看其返回值是true还是false 如果是true,就继续执行 如果是false,就结束循环 c:执行循环体语句; d:执行循环后的操作表达式 e:回到B继续. D:案例演示 在控制台输出10次"hellow