多媒体封装格式(容器)介绍

封装格式:在观看已经下载好的视频的时候,经常会看到一些视频文件后缀,如.mp4,.flv,.avi,.mkv等等,这些扩展名就可以简单理解为视频的封装格式或者视频的容器格式。

封装:所谓视频的封装,就是将已经编码好的音频,视频,还可能有字幕,脚本之类的文件按照一定的规范放到一起,形成一个封装格式的文件(封装和编码是两个不同的概念,封装是在“视频流水线”上,编码以后的一个过程,一个容器可以封装多种编码格式的文件,但是只支持特定的编码格式)。封装格式有很多,比如flv,mp4,ts,avi ,mkv等等。

几种常见的封装格式:

1.TS封装格式

TS流最早应用于数字电视领域,视频格式主要是mpeg2。后来,苹果公司发明HLS协议也是基于TS文件的。hls流媒体视频编码的主要格式为h264/mpeg4,音频为aac/mp3。

TS文件分为三层:ts层(如下图)pes(Packet Elemental Stream)层,es层(Elementary Stream)。

es层就是音视频数据,pes层是在音视频数据上加了时间戳等对数据帧的说明信息,ts层是在pes层上加入了数据流识别和传输的必要信息。

ts流结构
由上图可以看出,ts流是由一个个固定大小的包组成的,每个packet大小固定188个字节。

在这里说一下TS流的生产,就不再画深一层的结构图了,深一层结构图自行脑补:

TS流的形成过程:

  1. 将原始音视频数据压缩之后,压缩结果组成一个基本码流(ES)。
  2. 对ES(基本码流)进行打包形成PES。
  3. 在PES包中加入时间戳信息(PTS/DTS)。
  4. 将PES包内容分配到一系列固定长度的传输包(TS Packet)中。
  5. 在传输包中加入定时信息(PCR)。
  6. 在传输包中加入节目专用信息(PSI) 。
  7. 连续输出传输包形成具有恒定比特率的MPEG-TS流。
2.MP4封装格式

MP4,全称MPEG-4 Part 14,是一种使用MPEG-4的多媒体电脑档案格式,其基本存储结构是box,box可以理解为数据对象块,所有数据都必须保存在box中,而且必须包含一个File Type box(ftpy),作为MP4格式的标志并包含关于文件的一些信息。以下是MP4文件的结构树:
MP4文件结构树

ftpy:通常放在文件的开始,作为MP4格式的标志包含关于文件的一些信息

moov:它是一种container box,子box包含了媒体的metadata信息

mdat:包含MP4文件的媒体数据

free:“free”中的内容是无关紧要的,可以被忽略。该box被删除后,不会对播放产生任何影响,只能是size+type,这样组成8个字节的头数据

mvhd:一般作为“moov”的第一个子box出现,相当于整个moov box的“header”

概念:

track表示一些sample的集合,对于媒体数据来说,track表示一个视频或音频序列。

hint track这个特殊的track并不包含媒体数据,而是包含了一些将其他数据track打包成流媒体的指示信息。

sample对于非hint track来说,video sample即为一帧视频,或一组连续视频帧,audio sample即为一段连续的压缩音频,它们统称sample。对于hint track,sample定义一个或多个流媒体包的格式。

sample table指明sampe时序和物理布局的表。

chunk一个track的几个sample组成的单元。

MP4文件结构:

1、 文件,由很多Box和FullBox组成。

2、 Box,每一个Box由Header和Data组成。

3、 FullBox,是Box的扩展,Box结构的基础上在Header中添加8bits version和24bits flags。

4、 Header,包括了整个Box的长度size和类型type。当size==0时,代表这是文件里最后一个Box;当size==1时,意味着Box长度须要很多其它bits来描写叙述,在后面会定义一个64bits的largesize描写叙述Box的长度;当type是uuid时,代表Box中的数据是用户自己定义扩展类型。

5、 Data,是Box的实际数据,可以是纯数据也可以是很多其它的子Boxes。

6、 当一个Box的Data中是一系列子Box时,这个Box又可成为Container Box。

链接:https://www.jianshu.com/p/bc06344a91ce

发布了8 篇原创文章 · 获赞 18 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_38054045/article/details/104446142