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的结构用伪代码表示如下:

[cpp] view plaincopyprint?

  1. aligned(8) class Box (unsigned int(32) boxtype,optional unsigned int(8)[16] extended_type)
  2. {
  3. unsigned int(32) size;
  4. unsigned int(32) type = boxtype;
  5. if (size==1)
  6. {
  7. unsigned int(64) largesize;
  8. }
  9. else if (size==0)
  10. {
  11. // box extends to end of file
  12. }
  13. if (boxtype==‘uuid’)
  14. {
  15. unsigned int(8)[16] usertype = extended_type;
  16. }
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)。

文件类型ftyp(ISO-14496-12)

Author:Pirate Leo

Email:[email protected]

ISO 14496 - 12 定义了一种封装媒体数据的基础文件格式,mp4、3gp、ismv等我们常见媒体封装格式都是以这种基础文件格式为基础衍生的。

如果从全局角度了解基础文件格式,请看我之前的博文《MP4文件格式详解——结构概述》。

本系列文档从MP4文件入手,对文件中重要的box进行解析。

<======================================================================>

本次解析ftyp box

[cpp] view plaincopyprint?

  1. aligned(8) class FileTypeBox extends Box(‘ftyp’)
  2. {
  3. unsigned int(32) major_brand;
  4. unsigned int(32) minor_version;
  5. unsigned int(32) compatible_brands[];  // to end of the box
  6. }
aligned(8) class FileTypeBox extends Box(‘ftyp’)
{
    unsigned int(32) major_brand;
    unsigned int(32) minor_version;
    unsigned int(32) compatible_brands[];  // to end of the box
}

什么是brands?官方是这样描述的:

Each brand is a printable four-character code, registered with ISO, that identifies a precise specification.//在ISO注册的4个字符。

下表来源于网络,列出了几种常见的基于基础文件格式的,媒体封装格式标识。

更多的内容可以查看http://www.ftyps.com/

  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文件起始位置存放的数据

length(4字节):0x0000001c:box的长度是28字节;

boxtype(4字节):0x66747970:“ftyp”的ASCII码,box的标识;

major_brand(4字节):0x69736f6d:“isom“的ASCII码;

minor_version(4字节):0x00000200:ismo的版本号;

compatible_brands(12字节):说明本文件遵从(或称兼容)ismo,iso2,mp41三种协议。

ftyp box通常放在文件的开始,通过对该box解析可以让我们的软件(播放器、demux、解析器)知道应该使用哪种协议对这该文件解析,是后续解读文件基础。

时间: 2024-10-11 16:14:40

MP4文件格式的相关文章

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文件格式具体解释(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时,代表这是文件里最后一

mp4文件格式之fragment mp4

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

MP4文件格式的解析

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

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

MP4文件格式分析(附源码)

MP4格式分析                   MP4(MPEG-4 Part 14)是一种常见的多媒体容器格式,它是在"ISO/IEC 14496-14"标准文件中定义的,属于MPEG-4的一部分,是"ISO/IEC 14496-12(MPEG-4 Part 12 ISO base media file format)"标准中所定义的媒体格式的一种实现,后者定义了一种通用的媒体文件结构标准.MP4是一种描述较为全面的容器格式,被认为可以在其中嵌入任何形式的数据

多媒体文件格式(一):MP4 格式

在互联网常见的格式中,跨平台最好的应该就属MP4文件了.因为MP4文件既可以在PC平台的Flashplayer中播放,又可以在移动平台的Android.iOS等平台中进行播放,而且使用系统默认的播放器即可以播放. MP4格式是最常见的多媒体文件格式. 一.MP4 格式标准介绍 MP4格式标准为ISO-14496 Part 12.ISO-14496 Part 14,标准内容不是很多,下面我们来介绍一下格式标准中一些重要的信息. MP4是一种描述较为全面的容器格式,被认为可以在其中嵌入任何形式的数据

使用mp4v2将H264+AAC合成mp4文件

录制程序要添加新功能:录制CMMB电视节目,我们的板卡发送出来的是RTP流(H264视频和AAC音频),录制程序要做的工作是: (1)接收并解析RTP包,分离出H264和AAC数据流: (2)将H264视频和AAC音频以某种格式封装,最后存成文件,供用户查看. 第一步已经有部分代码可供参考,因此很快就完成了. 第二步,我们决定封装成mp4,查找了一些资料后,决定使用开源库mp4v2来合成mp4文件. 技术路线已确定,就开工干活. (一)mp4格式的基础知识. 关于mp4格式,网上介绍的不少,有以