常见视频封装格式(3)—MP4

常见视频封装格式(3)—MP4
1 概述
⽇常⽣活中,看到的视频⽂件的后缀名如 .mp4、.avi、.rmvb 都是属于视频⽂件的封装格式。所谓封装格式,就是以怎样的⽅式将视频轨、⾳频轨、字幕轨等信息组合在⼀起。说得通俗点,视频轨相当于饭,⽽⾳频轨相当于菜,封装格式就是⼀个碗或者⼀个锅,是⽤来盛放饭菜的容器。
视频⽂件的封装格式并不影响视频的画质,影响视频画⾯质量的是视频的编码格式。
下⾯介绍常见的视频封装格式 - MP4
MP4(MPEG-4 Part 14)是⼀种常见的多媒体容器格式,它是在 “ISO/IEC 14496-14” 标准⽂件中定义的,属于 MPEG-4 的⼀部分。
MP4 是⼀种较为全⾯的容器格式,被认为可以在其中嵌⼊任何形式的数据,,不过我们常见的⼤部分的 MP4 ⽂件存放的 AVC(H.264)或 MPEG-4(Part 2) 编码的视频和 AAC 编码的⾳频。MP4 格式的官⽅⽂件后缀名是 “.mp4”,还有其他的以 mp4 为基础进⾏的扩展或者是阉割版的格式,如 M4V、 3GP、F4V 等。
2 box 结构树
MP4 ⽂件中所有数据都装在 box 中,也就是说 MP4 由若⼲个 box 组成,每个 box 有类型和长度,包含不同的信息,可以将 box 理解为⼀个数据对象块。box 中可以嵌套另⼀个 box,这种 box 称为 container box。
MP4 ⽂件 box 以树形结构的⽅式组织, ⼀个简单的 MP4 ⽂件由以下 box 结构数组成(mp4info ⼯具查看 MP4 ⽂件结构):
根节点之下,主要包含以下三个 box 节点:
1. ftyp:File Type Box,⽂件类型
2. moov:Movie Box,⽂件媒体的 metadata 信息
3. mdat:Media Data Box,具体的媒体数据
⼀个 MP4 ⽂件有且仅有⼀个 “ftyp” 类型的 box,作为 MP4 格式的标识并包含⼀些关于⽂件的⼀些信息;
ftyp box 之后会有⼀个 “moov” 类型的 box(Movie Box),它是⼀种 container box,⼦ box 中包含了媒体的 metadata 信息;
MP4⽂件的媒体数据包含在 “mdat” 类型的 box(Midia Data Box)中,该类型的 box 也是 container box,可以有多个,也可以没有(当媒体数据全部引⽤其他⽂件时),媒体数据的结构由 metadata 进⾏描述;
要更深⼊的了解 MP4 封装格式,⾸先需要理解⼏个基本概念:
家用水处理器1. track:表⽰⼀些 sample 的集合,对于媒体数据来说,track 表⽰⼀个视频或⾳频序列
2. sample:video sample 即为⼀帧视频或⼀组连续视频帧,audio sample 即为⼀段连续的压缩⾳频,它们统称 sample
3. chunk:⼀个 track 中连续⼏个 sample 组成的单元
3 MP
4 重要 box 详解
3.1 box
mp4 ⽂件由若⼲个 box 组成。下⾯是 box 结构⽰意图:
1. box 由 header 和 body 组成,其中 header 指明 box 的 size 和 type。size 是指包含 box header 的整个 box 的⼤⼩。
2. box type,通常是 4 个 ASCII 码的字符如 “ftyp”、“moov” 等。
3. 如果 header size 为 1,则表⽰ box 长度需要更多的 bits 来描述,在后⾯会有⼀个 64 bit 位的 large
size ⽤来描述 box 的长度。
自动投篮机如果 size 为 0,表⽰该 box 为⽂件的最后⼀个 box,⽂件结尾(存在于 “mdat” 类型的 box 中)。
4. container box 可以包含 box
5. box 分为两种,Box 和 Fullbox。FullBox 是 Box 的扩展,Header 中增加了version 和 flags 字段。
3.2 File Type Box(ftyp)
File Type Box 有且只有 1 个,并且只能被包含在⽂件层,不能被其他 box 包含。该 box 应该被放在⽂件的最开始,指⽰该 MP4 ⽂件应⽤的相关信息。
“ftyp” body 部分依次包括 1 个 32 位的 major brand(4个字符),1 个 32 位的 minor version(整数)和 1 个以 32 位(4个字符)为单位元素的数组 compatible brands。这些都是⽤来指⽰⽂件应⽤级别的信息。
截取⼀个 MP4 ⽂件最开头的 File Type Box:
00 00 00 14 66 74 79 70 69 73 6F 6D 00 00 00 01
69 73 6F 6D
可以看出,前⾯ 8 个字节是 box header,其中前 4 个字节为 box size 为 0x14 = 20,后 4 个字节为 box type(ftyp),box body 包含 (20- 8) = 12 个字节。
3.3 Movie Box(moov)
Movie Box 中包含了⽂件媒体的 metadata 信息,“moov” 是⼀个 container box,具体的内容信息在其⼦ box 中。
“moov” 中包含1个 “mvhd” 和若⼲个 “trak”。其中 “mvhd” 是 header box,⼀般作为 "moov " box 的第⼀个⼦ box 出现。“trak” 包含了⼀个 track 也就是⼀个媒体流序列的相关信息,是⼀个 container box。下图是 “moov” 的⼀个字节实例,其中红⾊部分为 box header,绿⾊为 “mvhd”,黄⾊为⼀部分的 “track”。
可以看到,该 moov box header 占 8 个字节,整个 box size 为 0x5AEB = 23272 字节
3.4 Movie Header Box(mvhd)
mvhd 结构如下表,具体值以上⾯的 mvhd 字节举例:
字段字节
说明
box size4mvhd box size,0xC8 = 108 字节
box type4box type,固定为 “mvhd”
box version1box 版本,⼀般为 0
flags3flag
creation time4创建时间(相对于 UTC 时间 1904-01-01 零点的秒数)
modification
time
4修改时间
time scale4⽂件媒体在 1 秒时间内的刻度值,可以理解为 1 秒长度的时间单元数。值 0x0258 = 600
duration
4媒体流时间长度,⽤ duration + time scale 计算时长,如实例值 0xA410 = 42000 video track->time scale = 600,则时长 = duration / scale = 88 秒rate
4推荐播放速率,⾼ 16 位和低 16 位分别为⼩数点整数部分和⼩数部分,即 [16.16] 格式,该值为 1.0 表⽰正常前向播放volume
2与 rate 类似,[8.8] 格式,1.0(0x0100)表⽰最⼤⾳量reserved
10保留位,固定全设为 0matrix
36视频变换矩阵pre-defined
24next track id 4下⼀个 track 使⽤的 id 号
字段
字节数说明3.5 Track Box (trak )高铬铸铁
Track Box 是⼀个 container box,其⼦ box 包含了该 track 的媒体数据引⽤和描述。⼀个 mp4 ⽂件可以包含多个 track 且⾄少有⼀个track,track 之间是独⽴,有⾃⼰的时间和空间信息。Track Box 必须包含⼀个 “tkhd” 和⼀个 “mdia”,此外还有很多可选的 box。其中 “tkhd” 为 track header box,“mdia” 为 media box,该 box 包含⼀些 track 媒体数据信息,也是⼀个 container box。“trak” box 的字节实例如下图,其中黄⾊为 “trak” box 头,绿⾊为 “tkhd”,蓝⾊为 “edts”(⼀个可选 box),红⾊为⼀部分
“mdia”。
1)Track Header Box (tkhd )
“tkhd” 结构如下表,具体值以上⾯的 tkhd 字节举例:
字段字节
说明box size 4
tkhd box size,0x5C = 92 字节box type 4
box type,固定为 “tkhd”box version 1
box 版本,⼀般为 0flags 3
flag,按位或操作结果值,定义见表格后说明creation time
4创建时间(相对于 UTC 时间 1904-01-01 零点的秒数)modification
time
4修改时间track id
4track id 号,不能重复且不能为 0,字节实例中值为 1reserved 4保留位
duration 4track 时间长度,⽤ duration + time scale 计算时长,如实例值 0xA410 = 42000 video track->time scale = 600,则时长
= duration / scale = 88 秒
reserved 8
保留位
数卡器layer
2视频层,默认为 0,值⼩的在上层alternate
group
2track 分组信息,默认为 0 表⽰该 track 未与其他 track 有组关系volume
2[8.8] 格式,1.0(0x0100)表⽰最⼤⾳量reserved
2保留位matrix
36视频变换矩阵width
4宽,字节势⼒中值为:height 4⾼,均为 [16.16] 格式值,⽤于播放时的展⽰宽⾼
字段
字节数说明表中 flag 为按位或操作结果值,预定义如下:
1. 0x000001 track_enabled,表⽰该 track 是否可⽤
2. 0x000002 track_in_movie,表⽰该 track 是否在播放中被引⽤;
3. 0x000004 track_in_preview,表⽰该 track 是否在预览时被引⽤;
有线电视分支分配器⼀般该值为 7,如果⼀个媒体所有 track 均未设置 track_in_movie 和 track_in_preview,将被理解为所有 track 均设置了这两项。
2)Media Box (mdia )
“mdia” 也是个 container box,其⼦ box 的结构和种类还是⽐较复杂的。先来看⼀个 “mdia” 的实例结构树图。
总体来说,“mdia” 定义了 track 媒体类型以及 sample 数据,描述 sample 信息。⼀般 “mdia” 包含⼀个 “mdhd”、⼀个“hdlr” 和⼀个 “minf”,其中 “mdhd” 为 media header box,“hdlr” 为 handler reference box,“minf” 为 media information box。rbd-508
3.6 Free Space Box (free )
“free” 中的内容是⽆关紧要的,可以被忽略。该 box 被删除后,不会对播放产⽣任何影响
3.7 Meida Data Box (mdat )
该 box 包含于⽂件层,可以有多个,也可以没有(当媒体数据全部为外部⽂件引⽤时),⽤来存储媒体数据。数据直接跟在 box type 字段后⾯,具体数据结构的意义需要参考 metadata(主要在sample table中描述)。
可参考资料

本文发布于:2024-09-23 19:19:06,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/194340.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:视频   格式   数据   媒体   封装   信息   结构
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议