MP4(MPEG-4 Part 14)是一种常见的多媒体容器格式,它是在“ISO/IEC 14496-14”标准文件中定义的,属于MPEG-4的一部分,是“ISO/IEC 14496-12(MPEG-4 Part 12 ISO base media file format)”标准中所定义的媒体格式的一种实现(在H.264标准文档约14章位置),后者定义了一种通用的媒体文件结构标准。MP4是一种描述较为全面的容器格式,被认为可以在其中嵌入任何形式的数据,各种编码的视频、音频等都不在话下,不过我们常见的大部分的MP4文件存放的AVC(H.264)或MPEG-4(Part 2)编码的视频和AAC编码的音频。MP4格式的官方文件后缀名是“.mp4”,还有其他的以mp4为基础进行的扩展或者是阉割版的格式,如:M4V, 3GP, F4V等。

mp4是由一个个“box”组成的,大box中存放小box,一级嵌套一级来存放媒体信息。box的基本结构如下:
  

File Type Box(ftyp):
该box有且只有1个,并且只能被包含在文件层,而不能被其他box包含。该box应该被放在文件的最开始,指示该MP4文件应用的相关信息。

“ftyp” body依次包括1个32位的major brand(4个字符),1个32位的minor version(整数)和1个以32位(4个字符)为单位元素的数组compatible brands。

Movie Box(moov):

  • 该box包含了文件媒体的metadata信息,“moov”是一个container box,具体内容信息由子box诠释。同File Type Box一样,该box有且只有一个,且只被包含在文件层。一般情况下,“moov”会紧随“ftyp”出现。
  • 一般情况下,“moov”中会包含1个“mvhd”和若干个“trak”。其中“mvhd”为header box,一般作为“moov”的第一个子box出现(对于其他container box来说,header box都应作为首个子box出现)。“trak”包含了一个track的相关信息,是一个container box。

“mvhd”结构如下:

“trak”也是一个container box,其子box包含了该track的媒体数据引用和描述(hint track除外)。一个MP4文件中的媒体可以包含多个track,且至少有一个track,这些track之间彼此独立,有自己的时间和空间信息。“trak”必须包含一个“tkhd”和一个“mdia”,此外还有很多可选的box(略)。其中“tkhd”为track header box,“mdia”为media box,该box是一个包含一些track媒体数据信息box的container box。

“tkhd”结构如下表:

Handler Reference Box(hdlr)

“hdlr”解释了媒体的播放过程信息,该box也可以被包含在meta box(meta)中。“hdlr”结构如下表。

stbl

“stbl”包含了关于track中sample所有时间和位置的信息,以及sample的编解码等信息。利用这个表,可以解释sample的时序、类型、大小以及在各自存储容器中的位置。“stbl”是一个container box,其子box包括:sample description box(stsd)、time to sample box(stts)、sample size box(stsz或stz2)、sample to chunk box(stsc)、chunk offset box(stco或co64)、composition time to sample box(ctts)、sync sample box(stss)等。

“stsd”必不可少,且至少包含一个条目,该box包含了data reference box进行sample数据检索的信息。没有“stsd”就无法计算media sample的存储位置。“stsd”包含了编码的信息,其存储的信息随媒体类型不同而不同。

Time To Sample Box(stts)

“stts”存储了sample的duration,描述了sample时序的映射方法,我们通过它可以找到任何时间的sample。“stts”可以包含一个压缩的表来映射时间和sample序号,用其他的表来提供每个sample的长度和指针。表中每个条目提供了在同一个时间偏移量里面连续的sample序号,以及samples的偏移量。递增这些偏移量,就可以建立一个完整的time to sample表。

Sync Sample Box(stss)

“stss”确定media中的关键帧。对于压缩媒体数据,关键帧是一系列压缩序列的开始帧,其解压缩时不依赖以前的帧,而后续帧的解压缩将依赖于这个关键帧。“stss”可以非常紧凑的标记媒体内的随机存取点,它包含一个sample序号表,表内的每一项严格按照sample的序号排列,说明了媒体中的哪一个sample是关键帧。如果此表不存在,说明每一个sample都是一个关键帧,是一个随机存取点。

Sample To Chunk Box(stsc)

用chunk组织sample可以方便优化数据获取,一个thunk包含一个或多个sample。“stsc”中用一个表描述了sample与chunk的映射关系,查看这张表就可以找到包含指定sample的thunk,从而找到这个sample。

Sample Size Box(stsz)

“stsz” 定义了每个sample的大小,包含了媒体中全部sample的数目和一张给出每个sample大小的表。这个box相对来说体积是比较大的。

Chunk Offset Box(stco)

“stco”定义了每个thunk在媒体流中的位置。位置有两种可能,32位的和64位的,后者对非常大的电影很有用。在一个表中只会有一种可能,这个位置是在整个文件中的,而不是在任何box中的,这样做就可以直接在文件中找到媒体数据,而不用解释box。需要注意的是一旦前面的box有了任何改变,这张表都要重新建立,因为位置信息已经改变了。

Sample Description Box(stsd)

box header和version字段后会有一个entry count字段,根据entry的个数,每个entry会有type信息,如“vide”、“sund”等,根据type不同sample description会提供不同的信息,例如对于video track,会有“VisualSampleEntry”类型信息,对于audio track会有“AudioSampleEntry”类型信息。

视频的编码类型、宽高、长度,音频的声道、采样等信息都会出现在这个box中。

最后全家福:

H.264标准(一)MP4封装格式详解相关推荐

  1. MP4封装格式详解1

    转载自:http://blog.chinaunix.net/uid-20758197-id-5056943.html MP4(MPEG-4 Part 14)是一种常见的多媒体容器格式,它是在" ...

  2. 【H.264/AVC视频编解码技术详解】二. 主流视频编码标准的发展

    <H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行 ...

  3. H.264/AVC视频编解码技术详解-殷汶杰-专题视频课程

    H.264/AVC视频编解码技术详解-46880人已学习 课程介绍         H.264/AVC是目前业界应用为广泛的视频压缩编码标准,包含了先进而且较为成熟的视频编码技术.本课程将从原理.标准 ...

  4. 视频教程-H.264/AVC视频编解码技术详解-其他

    H.264/AVC视频编解码技术详解 毕业于上海大学通信与信息工程学院,研究生学历,硕士学位.研究方向为视频处理与传输,对H.264/AVC.H.265/HEVC.AVS.AVS+.AVS2等视频编解 ...

  5. 【H.264/AVC视频编解码技术详解】四. 常见H.264视频编解码器(X264和JM)及参考软件JM的下载与编解码

    <H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行 ...

  6. 【多媒体封装格式详解】---ASF(WMV/WMA)

    [1] ASF全称Advanced Systems Format 高级串流格式,微软出的一种开放封装格式的标准.它可以包含很多内容如:音视频.脚本命令.JPEG.二进制文件.或是由开发者自己定义的内容 ...

  7. 【H.264/AVC视频编解码技术详解】一. 视频信息与压缩编码

    <H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行 ...

  8. 【H.264/AVC视频编解码技术详解】三. H.264简介

    <H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行 ...

  9. 【H.264/AVC视频编解码技术详解】二十六、帧间预测编码(4):宏块的帧间预测解码

    <H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行 ...

  10. 【H.264/AVC视频编解码技术详解】十九:熵编码算法(5)——H.264的CABAC(上):语法元素的二值化方法...

    <H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行 ...

最新文章

  1. vanpopup 高度_解决VantUI popup 弹窗不弹出或无蒙层的问题
  2. @程序员:这些瓜没吃到,可以告别互联网了!
  3. Linux中的sed详解
  4. SEO优化如何让网站关键词排名稳如狗?
  5. Arduino从DHT11读取温湿度数据并显示在1602LCD
  6. 二维声波方程的有限差分法数值模拟
  7. 如何查看Windows 10的具体版本号?
  8. 手工卡纸做机器人_亲子手工,带孩子用彩色卡纸做一朵可爱的小花,有教程
  9. pl/sql实现打印九九乘法表
  10. android通话流程浅析RIL层
  11. 凸优化第七章统计估计 7.1 参数分布估计
  12. 考研编程练习---StringMatching(后缀表达式)
  13. Jquery 实现xml转json
  14. 通过ajax获取对象后动态插入文本框
  15. 计算机未来的发展英语作文,关于科技发展英语作文(通用10篇)
  16. 个人项目-网络电话呼叫客户端 (一)
  17. Ubuntu Linux访问小米手机存储卡
  18. 电脑数据信息安全常识
  19. 【软考】【计算机网络】OSI/RM模型及相应硬件
  20. php avi格式播放,Linux_网页播放器代码全集,1.avi格式代码片断如下:obje - phpStudy...

热门文章

  1. 初中科技节计算机,初中科技节活动方案.doc
  2. 论文笔记_S2D.13-2017-3DV-稀疏不变的卷积神经网络(Sparsity Invariant CNNs)
  3. 图神经网络学习笔记(1)——图信号与图傅里叶变换
  4. android:获取网络时间、文件路径,修改包名,发布release版本
  5. ShiftViT用Swin Transformer的精度跑赢ResNet的速度,论述ViT的成功不在注意力!
  6. window下安装scapy
  7. 「洛谷5017」「NOIP2018」摆渡车【DP,经典好题】
  8. Spring+Stomp+ActiveMq实现websocket长连接
  9. 怎么将linux的动态IP设置成静态IP
  10. Listener中应用spring管理的Bean