重学音视频?认识 MP4 视频(下)

时间:2022-10-14 09:01:47


接上一篇文章:

​重学音视频?认识 MP4 视频(上)​

文章的提到的资料都放在知识星球了,后续的内容更新还是以星球为主,也会放出一些干货在公众号的,现在加入星球还是优惠价,后面干货越多,涨价的可能性就越大了。

​一个关于音视频领域专业问答的小圈子!!​

为了方便大家的检索,我把专栏内容放在网页上了,地址如下:

​https://glumes.com/player_book/​

如图所示,就能访问专栏啦。

重学音视频?认识 MP4 视频(下)

以下就是专栏的内容:

在前文介绍了 MP4 标准的缘由,现在要详细了解一下它的格式。

还是回到这张图:

重学音视频?认识 MP4 视频(下)

重点看这里:

第十四部分(ISO/IEC 14496-14):MPEG-4(即MP4)文件格式:定义基于第十二部分的用于存储MPEG-4内容的视频文档格式。

也就是说 MP4 文件格式是定义在 MPEG-4 第 12 部分基础之上的,而第 12 部分的内容描述如下:

第十二部分(ISO/IEC 14496-12):基于ISO的媒体文件格式:定义一个存储媒体内容的文件格式。

所以,要学习 MP4 文件格式,要先了解 第 12 部分的内容,关于 MPEG-4 第 12 部分的文档,我也同步放在知识星球里面了,有需要的可以去下载。

重学音视频?认识 MP4 视频(下)

网上关于 MP4 文件格式的文章内容,基本都可以在第 12 部分中找到,可以说它才是学习知识的源头,当做教科书来学肯定没问题。

有官方文档的情况下,会尽量根据文档来学习,而不是盲目的参考网络博客,那样得到的知识体系太零散了。

MP4 文件组成

摘录一段官方文档的内容:

重学音视频?认识 MP4 视频(下)

关于 MP4 文件格式,参照文档说明:文件是由一系列叫做 Box 的对象组成的,所有的数据都存储在 Box 中。

官方文档中把这些由对象结构组成的文件叫做 Object-structured File ,算是一个比较广义的概念,但我们就当做 MP4 格式好了,狭义地理解一下,并且这种文件格式必须要包含 File Type 类型的 Box 。

MP4 中的 Box

MP4 中的 Box 有很多类型,每个类型中的 Box 代表的含义还不相同,但他们的基础结构还是相同的,继续往下看文档:

重学音视频?认识 MP4 视频(下)

每个 Box 是由 Header 和 Data 两部分组成的,Header 中包含了很多标识信息,而 Data 可以是纯数据也可以是其他的子 Box

参照文档内容,Header 中包含了 Box 的大小 Size 和类型 Type

关于 Size 的说明,参考文档:

重学音视频?认识 MP4 视频(下)

size 字段包含了 Box 和子 Box 的大小,如果 size 为 1 ,说明实际的大小在 largesize 字段中,如果 size 为 0 ,说明这是文件最后一个 Box 了。

关于 Type 的说明,参考文档:

重学音视频?认识 MP4 视频(下)

type 字段表示该 Box 的类型,标准的 Box 类型都是用四个字母来表示的,如果是用户自定义的类型,就用 uuid 来表示。

另外,要强调一下 Box 的字节序是网络字节序,也就是大端序,关于 Box 结构的伪代码文档中也给出了:

重学音视频?认识 MP4 视频(下)

根据伪代码再看 Box 的结构定义就一目了然了。

MP4 中的 FullBox

Box 可以说是所有 Box 类型的基类,接下来要了解它的第一个子类 FullBox 。

重学音视频?认识 MP4 视频(下)

FullBox 在 Box 的基础上多了 version 和 flags 字段。

其中 version 字段表示 Box 的版本,flags 字段是标志位。

如果 Box 遇到了无法识别的 version 或者 type 字段,就应该跳过或者忽略。

MP4 中更多的 Box

MP4 中还有很多类型的 Box ,其实有些 Box 相当重要,甚至面试中还会经常问到,下面从文档中给大家摘录一下所有的 Box 类型。

重学音视频?认识 MP4 视频(下)重学音视频?认识 MP4 视频(下)

这些内容在文档中都有,自行下载了,网络的一些资料可能还没有文档全面呢。

后面我们也会继续讲解这些 Box 类型的,以及使用工具来查看 Box 信息,这节就先到这里啦!!!

众所周知,开通了知识星球,邀请了一些在头条、快手等知名IT企业从事过音视频研发的朋友们做专业咨询,涉及的范围比较广,包括 Android/iOS 开发、Camera 开发、视频编辑、在线直播、WebRTC、播放器、OpenGL、C++ 等等,基本上涵盖了音视频工程领域的绝大部分内容。

关于音视频入门如何学习,学习了 FFmpeg 之后又该怎么办,跳槽选择哪个方向比较好,程序员职业软技能等等之类的问题,更是会以行业一线开发人员的角度帮你认真分析,出谋划策。

力求做到有问必答。在知识范围内,认真地对待每一个提问,不一定所有的问题都能答案,但每一个答案都是详细思考过的。