音视频-封装格式和编码格式

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u010584319/article/details/79565846

可能侧重视频, 但是通常封装容器中都要封装音频;

引用:

为什么要有那么多格式,是因为每一种的格式,都有合适的应用场景。但是同一类型,为什么会有那么多,那就是各个集团和大公司之间

的标准之争。标准就是游戏规则,大公司就是要制定游戏规则。

引用:

MP4封装格式对应标准为 ISO/IEC 14496-12(信息技术 视听对象编码的第12部分: ISO 基本媒体文件格式/Information technology Coding of audio-

visual objects Part 12: ISO base media file format)

引用:

H.264,又称为MPEG-4第10部分,高级视频编码(英语:MPEG-4 Part 10, Advanced Video Coding,缩写为MPEG-4 AVC)

视频帧的压缩使用了不同的算法,这些应用于视频帧的不同算法被称为图像类型或者帧类型。

a. I - 该帧可压缩程度最低,也不需要通过其他视频帧解码。

b. P - 该帧可以引用前面的帧的数据来解压缩并且相对于I帧来说,该帧可以压缩程度更高。

c. B - 该帧可以引用前面的帧和后面的帧的数据,从而压缩程度最高。

引用:

MPEG-4分部[编辑]
MPEG-4由一系列的子标准组成,被称为部(part)(有时也译为卷),包括以下的部分:
第一部分(ISO/IEC 14496-1):系统:描述视频和音频数据流的控制、同步以及混合方式(即混流Multiplexing,简写为MUX)。
第二部分(ISO/IEC 14496-2):视频:定义一个对各种视觉信息(包括自然视频、静止纹理、计算机合成图形等等)的编解码器。(例如XviD编码就属于MPEG-4 Part 2)
第三部分(ISO/IEC 14496-3):音频:定义一个对各种音频信号进行编码的编解码器的集合。包括高级音频编码(Advanced Audio Coding,缩写为AAC)的若干变形和其他一些音频/语音编码工具。
第四部分(ISO/IEC 14496-4):一致性:定义对本标准其他的部分进行一致性测试的程序。
第五部分(ISO/IEC 14496-5):参考软件:提供用于演示功能和说明本标准其他部分功能的软件。
第六部分(ISO/IEC 14496-6):多媒体传输集成框架(DMIF for Delivery Multimedia Integration Framework)
第七部分(ISO/IEC 14496-7):优化的参考软件:提供对实现进行优化的例子(这裡的实现指的是第五部分)。
第八部分(ISO/IEC 14496-8):在IP网络上传输:定义在IP网络上传输MPEG-4内容的方式。
第九部分(ISO/IEC 14496-9):参考硬件:提供用于演示怎样在硬件上实现本标准其他部分功能的硬件设计方案。
第十部分(ISO/IEC 14496-10):進階視訊編碼或称高级视频编码(Advanced Video Coding,缩写为AVC):定义一个视频编解码器(codec)。AVC和XviD都属于MPEG-4编码,但由于AVC属于MPEG-4 Part 10,在技术特性上比属于MPEG-4 Part2的XviD要先进。另外,它和ITU-T H.264标准是一致的,故又称为H.264。
第十二部分(ISO/IEC 14496-12):基于ISO的媒体文件格式:定义一个存储媒体内容的文件格式。
第十三部分(ISO/IEC 14496-13):知识产权管理和保护(IPMP for Intellectual Property Management and Protection)拓展。
第十四部分(ISO/IEC 14496-14):MPEG-4文件格式:定义基于第十二部分的用于存储MPEG-4内容的視訊檔案格式。
第十五部分(ISO/IEC 14496-15):AVC文件格式:定义基于第十二部分的用于存储第十部分的视频内容的文件格式。
第十六部分(ISO/IEC 14496-16):动画框架扩展(AFX : Animation Framework eXtension)。
第十七部分(ISO/IEC 14496-17):同步文本字幕格式。
第十八部分(ISO/IEC 14496-18):字体压缩和流式传输(针对开放字体格式Open Font Format)。
第十九部分(ISO/IEC 14496-19):合成材质流(Synthesized Texture Stream)。
第二十部分(ISO/IEC 14496-20):简单场景表示(LASeR for Lightweight Scene Representation。
第二十一部分(ISO/IEC 14496-21):用于描绘(Rendering)的MPEG-J拓展。
第二十二部分(ISO/IEC 14496-22):开放字体格式(Open Font Format)。
第二十三部分(ISO/IEC 14496-23):符号化音乐表示(Symbolic Music Representation)。
第二十四部分(ISO/IEC 14496-24):音频与系统交互作用(Audio and systems interaction)。
第二十五部分(ISO/IEC 14496-25):3D图形压缩模型(3D Graphics Compression Model)。
第二十六部分(ISO/IEC 14496-26):音频一致性检查:定义测试音频数据与ISO/IEC 14496-3是否一致的方法(Audio conformance)。
第二十七部分(ISO/IEC 14496-27):3D图形一致性检查:定义测试3D图形数据与ISO/IEC 14496-11:2005, ISO/IEC 14496-16:2006, ISO/IEC 14496-21:2006,和ISO/IEC 14496-25:2009是否一致的方法(3D Graphics conformance)。
Profiles是在每个部分内定义的,所以对某个部分的一个实现通常不是对该部分的完整实现。

MPEG-1、MPEG-2、MPEG-7和MPEG-21是由MPEG制定的其他MPEG标准。


容器有根据其实现的特性, 分为流式容器和媒体式容器;

引用:

封装格式对视音频编码格式的支持程度是不一样的。比如说MKV支持比较多,RMVB则主要支持Real公司的视音频编码格式。
封装格式和专利是有关系的,关系到推出封装格式的公司的盈利,所以格式众多。

TS是流式数据,理论上说没有专门的文件头,如果有的话就不能满足从任何时候开始都能解码的要求。但总要有一些关键性的信息放在什么地方,在TS流里称为PSI(Program Specification Information), 包括了PAT, PMT, NIT, CAT这4种类型的表,其中又以PAT最为关键。对于我们来说,一般只用到PAT和PMT这2张表。NIT和CAT一般是给电视台做付费解码加密的。在 TS流中PSI会定期出现,播放时只要等到PSI信息,就可以开始获取视频和音频流信息,开始解码了。专业的TS流合成软件,平均每秒钟插入10次PSI 信息,因此,TS流无论在任何地方切割,最多搜寻1/10秒的数据,就可以找到解码需要的音频视频数据。

2. TS流的基本规范是188字节每包,PSI信息和音频视频流都用188字节来包装。 m2ts里使用的是192字节TS流,188+4字节时间戳(这个时间戳的意思不很清楚, gabest和haali分离器都是直接丢弃的),这个就是你图片里显示的结构, 但高清电视台和思路remux使用的都是188字节TS

3. 188字节TS里的时间码在哪里?TS流中有多个时间码,包括PCR(program_clock_reference), OPCR(original_program_clock_reference), ESCR(elementary stream clock reference),但对于我们这种在PC上播放的应用来说,PTS(presentation time stamp)才是我们最关心的内容。通常,每个音频帧和视频帧都有自己的PTS时间码,使用这个时间码,无论什么类型的音频和视频编码,都可以在时间轴上取得完美同步。

4. TS相比MKV/AVI的劣势在哪里?
a. TS由于是流式结构,没有类似MKV和AVI的全局文件头,无法保存视频和音频帧的索引,因此在拖动的时候,根据时间找到文件位置会花费较多的时间,在硬盘上还好,在光盘上感觉会明显很多。那么Blu-ray怎么解决这个问题?它额外有单独的索引文件,索引这个m2ts的各音频视频帧。
b. TS采用了188字节包,但其中4字节是包头,不能提供有效负载,另外,剩下的184字节中,经常还会出现浪费,比如一个全码DTS音频帧是2013字节 (DTS-HD Core是2012字节), 10个包嫌小,111个包就浪费了12-13个字节,积少成多。而AVI,MKV则可以紧紧排在一起,靠单独的索引来区别。因此TS的代价就是空间浪费一些。 做过一些测试和比较,HD区的TS封装MPEG2, H.264和Remux,
额外开销大概3%, HD-RE区的TS封装, 额外开销大概4-5%. 码率越高,额外开销越小。为什么?码率高,每帧的平均数据量就大,用184字节包装,额外开销的比例就很小。反之亦然。极端情况,如果每帧都是1字节,每帧都要单独的184字节包装,那额外开销就是18000%

5. TS和MKV/AVI的优势在哪里?

黄教授已经写了不少,再补充一个,TS的扩展性是无限的,MKV和AVI里要有特别的信息来标识各数据流的codec属性(FourCC). 合成软件和播放软件没有在FourCC上达成共识,大家谁也不敢轻举妄动。TS则更多的是靠实际数据类型来检测的。新的音频和视频数据出来了,按照TS的规范,逐帧封装进TS包里,再合成进完整的TS流里, 就完成了新的音频和视频数据的合成工作,然后就等分离器和解码器来支持这种格式了。目前doom9上都没有搞定的TrueHD音频格式,我现在在等一部片子,有了这部片子,我就可以把TrueHD音轨完整的合成进TS流里,但是你要问我怎么播放,我只能告诉你,暂时还不行。 这就是TS封装的威力,在根本没有任何分离器和播放器 支持的前提下,封装合成的工作就已经可以完成了。


总结:

我们所接触到的文件级的东西, 都是容器, 即使是.h264等模样的文件,也是容器. jpg这样的文件,是一帧(只有一个轨道上的数据-图像,没有)一个文件的特殊情况,可以叫容器,也可以不叫;编码在容器的底层, 容器是基于编码的, 从某种意义上说,两者的配合,是容器要接管编码的内容, 并通过融合进自己的结构中管理起来,它对编码数据的管理也正是通过添加进自己开发的管理结构中实现的;

展开阅读全文

没有更多推荐了,返回首页