没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
mp4 文件格式解析(一)
(2010-09-01 17:55:04)
转载原文
标签:
http://
blog.sina.c
om.cn/s/
blog_4646
0bb30100
ke59.html
分类: 多媒体文件标准解析
原文地址:mp4
文件格式解析(一) 作者:可下人间
目前 MP4 的概念被炒得很火,也很乱。最开始 MP4 指的是音频(MP3 的升级版),即
MPEG-2 AAC 标准。随后 MP4 概念被转移到视频上,对应的是 MPEG-4 标准。而现在我们
流行的叫法,多半是指能播放 MPEG-4 标准编码格式视频的播放器。但是这篇文章介绍的
内容跟上面这些都无关,我们要讨论的是 MP4 文件封装格式,对应的标准为 ISO/IEC
14496-12,即信息技术 视听对象编码的第 12 部分:ISO 基本媒体文件格式(Information
technology Coding of audio-visual objects Part 12: ISO base media file format)。 ISO/IEC 组
织指定的标准一般用数字表示,ISO/IEC 14496 即 MPEG-4 标准。
MP4 视频文件封装格式是基于 QuickTime 容器格式定义的,因此参考 QuickTime 的格式
定义对理解 MP4 文件格式很有帮助。MP4 文件格式是一个十分开放的容器,几乎可以用来
描述所有的媒体结构,MP4 文件中的媒体描述与媒体数据是分开的,并且媒体数据的组织
也很自由,不一定要按照时间顺序排列,甚至媒体数据可以直接引用其他文件。同时,
MP4 也支持流媒体。MP4 目前被广泛用于封装 h.264 视频和 AAC 音频,是高清视频的代表。
现在我们就来看看 MP4 文件格式到底是什么样的。
1、概述
MP4 文件中的所有数据都装在 box(QuickTime 中为 atom)中,也就是说 MP4 文
件由若干个 box 组成,每个 box 有类型和长度,可以将 box 理解为一个数据对象块。box
中可以包含另一个 box,这种 box 称为 container box。一个 MP4 文件首先会有且只有
一个“ftyp”类型的 box,作为 MP4 格式的标志并包含关于文件的一些信息;之后会有且
只有一个“moov”类型的 box(Movie Box),它是一种 container box,子 box 包含了
媒体的 metadata 信息;MP4 文件的媒体数据包含在“mdat”类型的 box(Midia Data
Box)中,该类型的 box 也是 container box,可以有多个,也可以没有(当媒体数据全
部引用其他文件时),媒体数据的结构由 metadata 进行描述。
下面是一些概念:
track 表示一些 sample 的集合,对于媒体数据来说,track 表示一个视频或音频序
列。
hint track 这个特殊的 track 并不包含媒体数据,而是包含了一些将其他数据 track
打包成流媒体的指示信息。
sample 对于非 hint track 来说,video sample 即为一帧视频,或一组连续视频帧,
audio sample 即为一段连续的压缩音频,它们统称 sample。对于 hint track,sample
定义一个或多个流媒体包的格式。
sample table 指明 sampe 时序和物理布局的表。
chunk 一个 track 的几个 sample 组成的单元。
在本文中,我们不讨论涉及 hint 的内容,只关注包含媒体数据的本地 MP4 文件。下图
为一个典型的 MP4 文件的结构树。
2、Box
首先需要说明的是,box 中的字节序为网络字节序,也就是大端字节序(Big-
Endian),简单的说,就是一个 32 位的 4 字节整数存储方式为高位字节在内存的低端。
Box 由 header 和 body 组成,其中 header 统一指明 box 的大小和类型,body 根据类
型有不同的意义和格式。
标准的 box 开头的 4 个字节(32 位)为 box size,该大小包括 box header 和 box
body 整个 box 的大小,这样我们就可以在文件中定位各个 box。如果 size 为 1,则表示
这个 box 的大小为 large size,真正的 size 值要在 largesize 域上得到。(实际上只有
“mdat”类型的 box 才有可能用到 large size。)如果 size 为 0,表示该 box 为文件的最
后一个 box,文件结尾即为该 box 结尾。(同样只存在于“mdat”类型的 box 中。)
size 后面紧跟的 32 位为 box type,一般是 4 个字符,如“ftyp”、“moov”等,这些
box type 都是已经预定义好的,分别表示固定的意义。如果是“uuid”,表示该 box 为用
户扩展类型。如果 box type 是未定义的,应该将其忽略。
3、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。
这些都是用来指示文件应用级别的信息。该 box 的字节实例如下:
4、Movie Box(moov)
该 box 包含了文件媒体的 metadata 信息,“moov”是一个 container box,具体内容
信息由子 box 诠释。同 File Type Box 一样,该 box 有且只有一个,且只被包含在文件
层。一般情况下,“moov”会紧随“ftyp”出现。
一般情况下(限于篇幅,本文只讲解常见的 MP4 文件结构),“moov”中会包含 1 个
“mvhd”和若干个“trak”。其中“mvhd”为 header box,一般作为“moov”的第一个子
box 出现(对于其他 container box 来说,header box 都应作为首个子 box 出现)。
“trak”包含了一个 track 的相关信息,是一个 container box。下图为部分“moov”的字
节实例,其中红色部分为 box header,绿色为“mvhd”,黄色为一部分“trak”。
4.1 Movie Header Box(mvhd)
“mvhd”结构如下表。
剩余18页未读,继续阅读
资源评论
- xvlianguo2014-05-28讲得很详细嘛
- weixin_394662312018-09-19就是百度的资源,要分下载就。。。 https://www.cnblogs.com/ranson7zop/p/7889272.html
- livia1385672015-03-25讲得很详细到位,已经通读完毕,基本这样一份资料,同时对照着文件分析,就可以掌握MP4的封装结构了
- jiejeo2017-09-11资料很详细,值得借鉴,不过其他地方也找得到。
- haisen46492014-12-24写的很详细,不错。
Linux兵工厂
- 粉丝: 3648
- 资源: 19
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 10、安徽省大学生学科和技能竞赛A、B类项目列表(2019年版).xlsx
- 9、教育主管部门公布学科竞赛(2015版)-方喻飞
- C语言-leetcode题解之83-remove-duplicates-from-sorted-list.c
- C语言-leetcode题解之79-word-search.c
- C语言-leetcode题解之78-subsets.c
- C语言-leetcode题解之75-sort-colors.c
- C语言-leetcode题解之74-search-a-2d-matrix.c
- C语言-leetcode题解之73-set-matrix-zeroes.c
- 树莓派物联网智能家居基础教程
- YOLOv5深度学习目标检测基础教程
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功