前言
本章还是继续了解一些音视频基础的名词等,因为这方面内容非常多,所以还是多阅读、多复习。
正文
视频编码
根据之前的播放器原理,视频编码也就是通过特定的压缩技术,将某个视频格式文件转换为另一种视频格式文件,这个编码技术主要分为2类,一类是H.264、H.265等,还有一种是MPEG。
MPEG系列:MPEG其实就是Moving Picture Experts Group,即运动图像专家组。它在视频编码主要有MPEG1(VCD使用)、MPEG2(DVD使用)、MPEG4、MPEG4 AVC(当前热门),同时它还有音频编码技术,主要有MPEG Audio Layer3(大名鼎鼎的MP3)、MPEG-2 AAC、MPEG-4 AAC(AAC目前热门)。
H.26X系列:这个系列的编码有个侧重点就是网络传输,而且只有视频编码,主要有H.262、H264(这个是MPEG4 AVC合作的结晶)。
音频编码
音频编码主要就以下几种常用,其中AAC目前使用的最多。
AAC:一种专门为声音数据设计的文件压缩格式,与MP3不同的是它采用全新算法编码,更加高效,具有更高的性价比,但同时AAC属于有损压缩,音质和无损压缩的APE等无法比。
MP3:一种音频压缩技术,压缩率能到到1:10左右,特定是利用人耳对高频声音信号不敏感的特效,进行过滤。
AC3:AC3是Dobby实验室发展的,广泛应用于5.1声道等多声道场景。
多媒体播放组件
这里直接说Android平台的情况吧,比如一个视频能在Android平台上播放需要下面相关组件。
MediaPlayer:播放控制。
MediaCodec:音视频编解码。
OMX:多媒体部分采用的编码标准。
StageFright:替代之前的OpenCore,这部分在Android中以动态库的形式存在,也就是libstagefright.so。
AudioTrack:音频播放。
常见的多媒体框架和解决方案
VLC:即Video LAN Client,是一款自由的、开源的跨平台多媒体播放器及框架。
FFmpeg:多媒体解决方案,广泛应用。
GStreamer:一套构建多媒体应用的开源多媒体框架。
DTS和PTS
这2个概念很重要,就是解码时间戳和显示时间戳,这2个是什么用呢,就要涉及I、P、B帧的概念了。
I帧
I帧图像采用帧内编码方式,即只利用了单帧图像内的空间相关性,而没有利用时间相关性。
I帧是帧内压缩,不使用运动补偿,由于I帧不依赖其他帧,所以是随机存取的入点,同时是解码的基准帧。
P帧
P帧和B帧采用的是帧间编码方式,即同时利用了空间和时间上的相关性。P帧图像只采用前向时间预测,可以提高压缩效率和图像质量,也就是P帧依赖于前面的帧数据。
B帧
B帧采用双向时间预测,可以大大提高压缩倍数,这里值得注意的是B帧图像采用了未来帧作为参考,因此MPEG-2编码码流中图像帧的传输顺序和显示顺序是不同的。
从上面概念我们得知,一个I帧可以不依赖其他帧就可以解码出一幅完整的图像,而P帧需要依赖视频流中排在它前面的帧才能解码出图像,而B帧需要依赖视频流中排在它2前面或后面的帧才能解码出图像。
所以就有了DTS、PTS的概念。
DTS
即DTS(Decoding Time Stamp),解码时间戳,这个时间戳的意义在于告诉播放器该在什么时候解码这一帧的数据。
PTS
即PTS(Presentation Time Stamp),解码时间戳,这个时间戳的意义在于告诉播放器在什么时候显示这一帧的数据。
这里我们也就明白了,当视频中没有B帧时,这2个顺序是一样的,当有B帧时就不一定了。
假如有个视频流里面是I P B B这个顺序,显示的顺序是I B B P,这时的解码顺序就不能是I B B P,需要使用I P B B来解码。
所以DTS和PTS就是解决视频流中有B帧时的情况。
YUV和RGB
这属于2种颜色空间,其中RGB我们很好理解,就是3原色混合而成的颜色,这个YUV是啥呢
YUV是电视上使用的一种颜色空间,其中Y表示亮度,其实有了Y之后就能显示出影像了,就是黑白电视的效果,这里很有意思,黑色就是亮度低,白色就是亮度高,这里就是利用了人眼对颜色判断其中亮度比较明显的特效。
有了黑白后,UV就是2个色差分量,通过UV就能显示出彩色了,这2种颜色空间可以相互转换。
音频相关概念
声波
声波这个我们很熟悉了,所有声音都是通过振动来产生的声波,它有几个常用的属性。
频率,代表音调的高低,频率越高,波长越短;波长越长,声音更容易绕过障碍物,传的更远。
振幅,代表响度,就是能量大小的反应,分贝是描述响度大小的单位,分贝是无量纲,指2个相同的物理量A1(被度量量)和A0(基准量或者参考量)之比取以10为底的对数并乘以10,即N=10*lg(A1/A0)
波形,也就代表音色,不同的波形即使音调和响度相同,它的声音也是不同。
数字音频
将音频信号进行数字化,需要3个步骤,即采样、量化和编码。
采样,采样是在时间轴上对信号进行数字化,根据采样定理,按比声音最高频率2倍以上的频率对声音进行采样。
采样频率,表示一秒采样的次数,采样率一般为44.1kHz。
量化,量化是指在幅度轴上对信号进行数字化,比如用16比特的二进制信号来表示声音的一个采集,也就是最终的音频信号在振幅上分为65535层。
编码,按照一定的格式记录采样和量化的数字数据。
PCM编码
PCM是无损编码,也是音频裸数据,能达到最大程度的高保真。
WAV编码
WAV是一种不会进行压缩操作的编码,在PCM数据格式的前面加上44字节,分别用来描述PCM的采样率、声道数、数据格式信息。
MP3编码
MP3具有不错的压缩比,听感上非常接近WAV文件,音质在128Kbps上表现不错。
AAC编码
AAC是新一代的音频有损压缩技术,在小于128Kbps时表现优异,支持多种音频声道组合。
总结
这里先说这么多,到后面有更详细的概念再进行补充。