一、基本概念

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 plain copy print ?
  1. aligned(8) class Box (unsignedint(32) boxtype,optional unsignedint(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. elseif (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)。

MP4文件格式详解(ISO-14496-12/14)相关推荐

  1. MP4文件格式详解——文件类型ftyp

    原谅地址:http://blog.csdn.net/pirateleo/article/details/7583321 文件类型ftyp(ISO-14496-12) Author:Pirate Leo ...

  2. MP4文件格式详解——文件类型ftyp(转)

    文件类型ftyp(ISO-14496-12) Author:Pirate Leo Email:codeevoship@gmail.com ISO 14496 - 12 定义了一种封装媒体数据的基础文件 ...

  3. 多媒体 MP4文件格式详解——文件类型ftyp

    ISO 14496 - 12 定义了一种封装媒体数据的基础文件格式,mp4.3gp.ismv等我们常见媒体封装格式都是以这种基础文件格式为基础衍生的. 如果从全局角度了解基础文件格式,请看我之前的博文 ...

  4. MP4文件格式详解——元数据moov(二)tkhd box

    ISO 14496 - 12 定义了一种封装媒体数据的基础文件格式,mp4.3gp.ismv等我们常见媒体封装格式都是以这种基础文件格式为基础衍生的. 如果从全局角度了解基础文件格式,请看我之前的博文 ...

  5. MP4文件格式详解——结构概述

    MP4文件格式详解(ISO-14496-12/14) 一.基本概念 1. 文件,由许多Box和FullBox组成. 2. Box,每个Box由Header和Data组成. 3. FullBox,是Bo ...

  6. Ffmpeg快速命令使用 Ffmpeg选项详解 Ffmepg格式详解 常见视频文件格式详解

    http://www.ffmpeg.com.cn/index.php/%E9%A6%96%E9%A1%B5 Ffmpeg快速命令使用 From Ffmpeg工程组 Jump to: navigatio ...

  7. 【转】 快捷方式lnk文件格式详解(英文)(中文)

    为什么80%的码农都做不了架构师?>>>    [转] 快捷方式lnk文件格式详解(英文)(中文) 2009-11-07 10:55 转自:http://www.stdlib.com ...

  8. 音视频入门-17-GIF文件格式详解

    * 音视频入门文章目录 * GIF 文件格式解析 图像互换格式主要分为两个版本,即图像互换格式 87a 和图像互换格式 89a. 图像互换格式 87a:是在 1987 年制定的版本. 图像互换格式 8 ...

  9. ZIP(32位)文件格式详解

    ZIP(32位)文件格式详解 为什么要去了解ZIP文件格式 最近有个需求,需要加载jar包中的jar包中的class,此时有两种方式: 1.将jar解压缩,然后将解压缩后的路径添加到class pat ...

最新文章

  1. [原]Failed to load SELinux policy. System Freezing ----redhat7or CentOS7 bug
  2. 《深入理解计算机系统》读书笔记七:浮点数表示
  3. 计算机与外部设备通讯的接口,总线接口与计算机通信(四)USB外部总线(初级认识)...
  4. 联想服务器看内存型号,合肥联想服务器内存条_性能无约束
  5. CCNA课堂练习:OSPF的介绍及配置
  6. machine id linux,linux – 机器ID是uuid吗?
  7. Spring Boot中常见注解诠释
  8. LeetCode(897)——递增顺序查找树(JavaScript)
  9. 处理PHP字符串的10个简单方法
  10. PAT (Basic Level) Practice1011 A+B 和 C
  11. [生活]我短暂的股票生涯
  12. 经典中的博弈:第一章 C++的Hello,World!
  13. java反射机制原理详解
  14. IDEA导入本地项目
  15. Tensorflow2.0 之 SSD 网络结构
  16. Postman,Insomnia用户登录请求验证码错误的原因
  17. 《Deep Learning for Computer Vision withPython》阅读笔记-StarterBundle(第6 - 7章)
  18. 单元测试和E2E测试
  19. 数据结构c语言版题库编程,数据结构习题库(c语言版)
  20. 制作移动端手机网站过程中的SEO优化方法技巧

热门文章

  1. java转人工智能_[转]人工智能缩略语大全
  2. windows+MAC系统使用-快捷键
  3. 树,完美二叉树, 完全二叉树和完满二叉树
  4. 在阿里云上安装MySQL的简单教程
  5. 活动星投票午间修身自习室制作在线投票投票制作网页
  6. React最佳实践系列 —— 循序渐进理解 Dva中的model概念
  7. 基于mediaprojection的手机群控软件
  8. 基于百度地图api实现计算目标点与自身位置的距离(js)
  9. 云队友丨任正非:没有退路,就是胜利之路
  10. GEMU 107-263 8A 250V