目录
1 音视频录制播放原理
1.1 录制原理
若想记录生活中的影像又或声音,我们需要借助摄像头和麦克风两个输入源来实现对音视频的采集,而其内部工作原理也有章可循。
如图:
麦克风通过时钟控制频率去采帧,经过特定的音频处理后放入帧队列,然后对音频进行编码,最后通过复用器输出对声音记录的文件。
同理,摄像头经过采样图像帧和视频编码,最终通过复用器输出对图像的连续记录文件。
1.2 播放原理
播放媒体文件,我们则需要用到解复用器,通过对音视频的包进行相应的解码(视频解码、音频解码),将包转化为帧,通过同步控制对图像音频进行处理,最终呈现在机器荧幕上。
2 图像的表示
2.1 RGB格式
我们应当知道,我们平时看到的“颜色”是由“三原色”构成,而三原色指的是红、绿、蓝这三种颜色。因此在计算机中我们也采用这个概念,设计了R(Red)、G(Green)、B(Blue)三个键值组合起来指示一种具体的颜色。
值得注意的是,这每个键值的位宽是8bit,因此单一键值可以有种组合方式,那么三种键值所能构成的指定颜色则有。
2.2 YUV格式
YUV格式一开始广泛应用于黑白电视上,它被设计的目的主要用于视频信号的压缩、传输和存储,其中“Y”表示的是明亮度(Luminance or Luma),又称灰阶值,而“U”和“V”则表示的是色度(Chrominance or Chroma)
YUV组合在一起的意义是用来描述影响的色彩和饱和度,用以指定像素的颜色。
YUV的格式有两类,分别是 平面 Planar 和 紧凑Packed
对于 Planar - 先连续存储所有像素点的Y,紧接着存储所有像素点的U。
对于 Packed - 每个像素点的Y,U,V连续存储在内存中。
Packed的优点相较于Planar主要是更节省内存空间。
而Planar的优势也显而易见:
- 可以并行访问像素数据。在内存带宽不足的时候,
Planar
就明显优于Packed
了。如YUV,如果采用Planar
,相比于Packed
,可以并行访问Y、U、V三个平面,那就相当于只花1/3的时间,就可以访问到一个YUV像素。 Planar
在切换bit depth
时,更加快:可以通过增加或丢弃平面,来快速扩增或缩减调色板。比如,4个平面变成5个平面时,一个像素的可选颜色,变成了种。- 当代表像素的bit数,不是2的次幂的时候,
Planar
在空间和时间上的效率,都高于Packed
。比如,在3-bit的RGB中(每3个bit表示一个像素,一个像素可选颜色为种)。- 如果采用
Planar
,只需要3个平面。 - 如果采用
Packed
,有两种实现方式:- 允许像素跨字节边界:提高了内存寻址和unpack像素的复杂度,导致耗时增加。
- 采用padding:每个字节只存储两个像素,耗费6个bit,保留两个2bit不使用,导致空间消耗增大。RGB555就是这种做法。
- 如果采用
Libyuv 是一款由Google主导的实现各种YUV与RGB间相互转换、旋转、缩放的库
YUV还存在其他多种格式,比如YUV420p,YUV420sp等。
不同YUV格式的数据在存储时的排列顺序是不一样的,选用错误的解析格式可能导致画面出现花屏,绿屏等现象
3 视频中的重要概念
3.1 视频的属性
视频码率:kb/s,是指视频文件在单位时间内使用的数据流量,也叫码流率。码率越大,说明单位时间内取样率越大,数据流精度就越高。
视频帧率:fps,单位时间中显示的帧的数量,通常说一个视频的25帧,指的就是这个视频帧率,即1秒中会显示25帧。帧率越高,给人的视觉就越流畅。
视频分辨率:ppi(标准单位),视频的分辨率是指视频在一定区域内包含的像素点的数量,分辨率也就是我们常说的640x480分辨率、1920x1080分辨率,其中分辨率 = 像素宽度 x 像素高度。
3.2 视频的I,P,B帧
I 帧(Intra coded frames):I帧不需要参考其他画面而生成,解码时仅靠自己就重构完整图像;
- I帧图像采用帧内编码方式;
- I帧所占数据的信息量比较大;
- I帧图像是周期性出现在图像序列中的,出现频率可由编码器选择;
- I帧是P帧和B帧的参考帧(其质量直接影响到同组中以后各帧的质量);
- I帧是帧组GOP的基础帧(第一帧),在一组中只有一个I帧;
- I帧不需要考虑运动矢量;
P 帧(Predicted frames):根据本帧与相邻的前一帧(I帧或P帧)的不同点来压缩本帧数据,同时利用了空间和时间上的相关性。
- P帧属于前向预测的帧间编码。它需要参考前面最靠近它的I帧或P帧来解码。
B 帧(Bi-directional predicted frames):B 帧图像采用双向时间预测,可以大大提高压缩倍数。