type
status
date
slug
summary
tags
category
icon
password
Property
Mar 18, 2023 02:12 AM
基础知识
MP4 简介
mp4 ⽂件格式⼜被称为 MPEG-4 Part 14,出自 MPEG-4 标准第 14 部分 。它是⼀种多媒体格式容器,⼴泛用于包装视频和⾳频数据流、海报、字幕和元数据等。(顺便⼀提,目前流行的视频编码格式 AVC/H264 定义在 MPEG-4 Part 10)。
mp4 ⽂件格式基于 Apple 公司的 QuickTime 格式,因此,QuickTime File Format Specification 也可以作为我们研究 mp4 的重要参考。
MP4 文件结构
- 在MP4文件中,数据被组织成一个个的"track",每个track包含一个或多个"chunk",每个chunk又包含多个"sample":
- Track:MP4文件可以包含一个或多个track,每个track代表不同的媒体类型,比如音频、视频或字幕等。每个track由一个唯一的ID来标识,并包含一些元数据,比如媒体类型、时长、码率等
- Chunk:每个track被分成一个个的chunk,每个chunk包含一定数量的sample。chunk是为了优化数据的读取而存在的,通过将大的数据块分成小的chunk,可以更快地从文件中读取所需数据。每个chunk包含一个唯一的ID和一些元数据,比如大小、偏移量等
- Sample:每个chunk又由多个sample组成,sample是最小的音频或视频单元。比如一个视频文件可以被分成多个chunk,每个chunk包含数秒的视频数据,每个chunk又被分成多个视频帧(sample),每个视频帧就是一个独立的图像帧。同样的,一个音频文件也可以被分成多个chunk,每个chunk包含数秒的音频数据,每个chunk又被分成多个音频采样(sample),每个采样就是一个独立的声音样本。每个sample包含一些元数据,比如采样率、位深度、编码格式等
- mp4 ⽂件由 box 组成,每个 box 分为 Header 和 Data。其中 Header 部分包含了 box 的类型和大小,Data 包含了子 box 或者数据,box 可以嵌套子 box。 下图是⼀个典型mp4文件的基本结构(可在 MP4Box 的 Box View 查看):
- MP4 ⽂件的基本组成单元是 box,也就是说 MP4 文件是由各种各样的 box 组成的,有 parent box,还有 children box。因此,这些 boxes 之间存在⼀定的层次关系,总结如下表所示,表中标记出了各个 box 必选或可选特性,√ 代表 box 必选:
ftyp(File Type Box)
mdat(Media Data Box)
moov(Movie Box)
Moov Insider
mp4 的媒体数据信息主要存放在 Moov Box 中,是我们需要分析的重点。moov 的主要组成部分如下:
- mvhd(Movie Header Box):
- udta(User Data Box):自定义数据
- track(Track Box):
- tkhd(Track Header Box):
- mdia(Media Box):
- mdhd(Media Header Box):存放视频流创建时间,长度等信息
- hdlr(Handler Reference Box):媒体的播放过程信息
- minf(Media Information Box):
Stbl Insider
- stbl(Sample Table Box):
- stsd(Sample Description Box):存放解码必须的描述信息
- stts(Time-to-Sample Box):
- stss(Sync Sample Box):同步sample表,存放关键帧列表,关键帧是为了⽀持随机访问
- stsc(Sample-To-Chunk Box):
- stsz(Sample Size Box):指定了每个 sample 的 size。Sample Size Atom 包含两 sample 总数和⼀张包含了每个 sample size 的表
- stco(Chunk Offset Box):
如何计算 sample 偏移位置
上文提到通过 stco 并不能直接获取某个 sample 的偏移位置,下⾯举例说明如何获取某⼀个 pts 对应的 sample 在⽂件中的位置。
大体需要以下步骤:
- 作者:OctalZero
- 链接:https://octalzero.com/article/f4698d4c-1b5f-40d0-9b17-fab4456395cc
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章