MPEG-2 学习笔记
最近有点时间,看了一部分 MPEG-2 的规范,看后想总结点东西,算是做了点作业,另外希望能和大家讨论讨论,请大家指点。
中文版很多概念翻译得很模糊,不易理解,但总体来说还算是不错,适合像我这种入门级别的看,不过建议和英文版对照看,对一些概念能比较准确的理解。整个规范包括三部分:系统,视频编码,音频编码。对应的标准号分别为 ISO/IEC 13818-1 , ISO/IEC 13818-2 , ISO/IEC 13818-3 ,在规范中经常可以看到这几个字符串。
第一部分“系统”和我们现在的工作关系较紧密,我也主要学习了第一部分。后面两部分主要是讲解编码过程,编码部分看了实在让人犯晕,先偷一下懒吧,把第一部分搞清楚了再看去啃难啃的骨头吧。
下面进入正题了。
一、概念
规范中讲述的概念很多,容易让人糊涂,所以先把一些概念理清,弄清楚它们之间的关系,再看后面的就可提高很多的效率。
(1)ES- Elementary Streams ( 原始流 ) ,对视频、音频信号及其他数据进行编码压缩后
的数据流称为原始流。原始流包括访问单元,比如视频原始流的访问单元就是一副图像的编
码数据。
(2) PES- Packetized Elementary Streams ( 分组的原始流 ) ,原始流形成的分组称为 PES 分组,是用来传递原始流的一种数据结构
(3) 节目是节目元素的集合。节目元素可能是原始流,这些原始流有共同的时间基点,用来做同步显示。
(4) 传输流和节目流
TS-Transport Stream 翻译为 “ 传输流 ”
PS-Program Stream 翻译为 “ 节目流 ”
PS 用来传输和保存一道节目的编码数据或其他数据。 PS 的组成单位是 PES 分组。
TS 用来传输和保存多道节目的编码数据或其他数据, TS 的组成单位是节目。
PS 适用于不容易发生错误的环境,以及涉及到软件处理的应用,典型应用如 DVD 光盘的文件存储
TS 适用于容易发生错误的环境,典型应用就是数字电视信号的传输。
TS 和 PS 是可以互相转换的,比如从 TS 中抽取一道节目的内容并产生有效的 PS 是可能。
(5) 传输流分组和 PES 分组
原始流分成很多 PES 分组,保持串行顺序,一个 PES 分组只包含一个原始流的编码数据。 PES 分组长度很大,最大可为 64K 字节。
PES 分组分为 “ 分组首部 (header)” 和 “ 有效负载 (payload)” 。 “ 有效负载 ” 指跟随在首部字节之后的字节。首部的前 4 个字节构成分组的起始码,标识了该分组所属原始流的类型和 ID 号。
TS 分组也就是传输流数据形成的数据包。每个 TS 分组长度为 188 字节,包括 “ 分组首部 ” 和 “ 有效负载,前 4 个字节是分组首部,包含了这个分组的一些信息。有些情况下需要更多的信息时,需在后面添加 “ 调整字段 (adaption field)” 。
两者之间的关系:
PES 分组是插入到 TS 分组中的,每个 PES 分组首部的第一字节就是 TS 分组有效负载的第一字节。一个 PID 值的 TS 分组只带有来自一个原始流的数据。
PMT (Program Map Table ) 节目映射表
PMT 所在分组的 PID 由 PAT 指定,所以要先解出 PAT ,再解 PMT
PMT 中包含了属于同一节目的视频、音频和数据原始流的 PID 。
找到了 PMT ,解多路复用器就可找到一道节目对应的每个原始流的 PID ,再根据原始流
PID ,去获取原始流。如下图: PID1 和 PID2 分别对应某道节目的视频原始流和音频原始流
的 PID 。
l PAT (Program Association Table ) 节目关联表
l PAT 所在分组的 PID=0
PAT 中列出了传输流中存在的节目流
l
l PAT 指定了传输流中每个节目对应 PMT 所在分组的 PID
l PAT 的第一条数据指定了 NIT 所在分组的 PID ,其他数据指定了 PMT 所在分组的 PID ,如下图所示:
l CAT (Conditional Access Table ) 条件访问表
l CAT 所在分组的 PID=1
l CAT 中列出了条件控制信息 (ECM) 和条件管理信息 (EMM) 所在分组的 PID 。
l CAT 用于节目的加密和解密
l NIT( Network Information Table) 网络信息表
l NIT 所在分组的 PID 由 PAT 指定
l <