音视频的录制与播放流程
通过如下两个流程,大致熟悉一下音视频处理从外设到音视频的过程
- 音视频的录制
图片非原创,原图出处:音视频录制基础原理概念
大体流程为,从麦克风处采集数据(采样帧),经过音频处理将处理后,将处理后的采样帧放到(暂存)采样帧队列中,接着经过音频编码,形成音频包,放到音频包队列中。同理,在视频包队列中形成了一系列的视频包。接着将音频包和视频包一起通过复用器的音视频封装,形成一个音视频文件。
其中,时钟用于统一和控制音视频同步。
- 音视频播放原理
图片非原创,原图出处:ffplay深入解析—main函数解析篇
音视频播放可以看作是录制过程的的逆向操作,这里就不再细说了,详情看图理解
图像表示
图像基础概念
- 像素与像素点:像素是一个图片的基本单位,简称px,“像素”有“图像元素”之意。
- 分辨率,表示图像的大小,用像素来表示。图像(或视频)的分辨率是指图像的大小或尺寸。我们通常用像素表示图像的尺寸。例如2500×2000的照片就是指横向(宽)有2500个像素点,竖向(高)有2000个像素点。常说的 1080 和 720 其实是指垂直像素数,分辨率除去垂直像素,还需要考虑到水平像素数。按照 16:9 (宽 : 高) 的比例计算, 720p 的水平像素数为 720 ÷ 9 × 16 = 1280,总计像素为921600像素即大约为 92 万像素。 1080p 具有 1920 个水平像素,总计2073600 像素即约 200 万像素,是 720p 的两倍多。像素越多视频就越清晰,所以 1080p 比 720p 的视频更加清晰。 图像的分辨率越高,图像就越清晰。
- 位深。我们看到的彩色图片,都有三个通道,分别为红®、 绿(G)、蓝(B)通道。(如果需要透明度则还有alpha分量)通常每个通道用8bit表示, 8bit能表示256种颜色,所以可以组成256256256=16,777,216 = 1677万种颜色。这里的8bit就是我们讲的位深。 每个通道的位深越大,能够表示的颜色值就越大,比如现在高端电视说的10bit色彩,即是每个通道用10bit表示,每个通道有1024种颜色。 102410241024约为10,7374万色=10亿色, 是8bit的64倍。常见的颜色还是8bit居多。
- 帧率。帧率即 FPS(每秒有多少帧画面),经常玩游戏的同学应该会对这个词很熟悉。我们玩游戏时, FPS 帧率越高就代表游戏画面越流畅,越低则越卡顿。视频也是如此。由于视觉图像在视网膜的暂时停留,一般图像帧率能达到24帧,我们就认为图像是连续动态的。帧率越高,画面越流畅,需要的设备性能也越高。
- 码率。视频文件在单位时间内使用的数据流量。比如1Mbps。大多数情况下码率越高 分辨率越高,也就越清晰。但模糊的视频文件大小(码率)也可以很大,分辨率小的视频文件可能也比分辨率大的视频文件清晰。其中,bps(bits per second)是数据传输速率的常用单位,意思是比特率、比特/秒、位/秒、每秒传的位数。码率与图像的清晰度呈对数关系,而不是线性增长的。
- Stride跨距:指在内存中每行像素所占的空间。为了实现内存对齐每行像素在内存中所占的空间并不一定是图像的宽度。Stride 就是这些扩展内容的名称, Stride 也被称作 Pitch,如果图像的每一行像素末尾拥有扩展内容, Stride 的值一定大于图像的宽度值,如下图所示:
比如分辨率638x480的RGB24图像,我们在内存处理的时候如果要以16字节对齐,则638 * 3 / 16 = 119.625不能整除,因此不能16字节对齐,我们需要在每行尾部填充6个字节。就是(638+2->640),640 * 3 / 16=120。此时该图片的Stride为1920字节。
RGB格式和YUV格式
- RGB格式
RGB是指使用三基色(红绿蓝)合成各种颜色,我们看到的彩色图片,都有三个通道,分别为红、绿、蓝通道,如果需要透明度则还有alpha分量。通常每个通道用8bit表示,8bit能表示256种颜色,所以可以组成 256256256/3=1677万种颜色。这里的8bit就是我们讲的位深。一张图片有R-G-B的顺序排列,也有BGR的方式排列。
图片非原创,原图出处:图像基础概念与YUV/RGB深入理解
- YUV格式
和RGB格式一样,YUV格式也是一种颜色编码方法。YUV是指亮度参量和色度参量分开表示的像素格式,其中“Y”表示亮度参量,也就是灰度值,U和V表示色度参量,作用是描述影像色彩及饱和度,用于指定像素的颜色。
这样分开的好处就是不但可以避免相互干扰, 没有UV信息一样可以显示完整的图像,因而解决了彩色电视与黑白电视的兼容问题;还使得降低色度的采样率而不会对图像质量影响太大, 降低了视屏信号传输时对频宽(带宽) 的要求。
YUV是一个比较笼统地说法,针对它的具体排列方式,可以分为很多种具体的格式:
打包(packed) 格式:将每个像素点的Y、U、V分量交叉排列并以像素点为单元连续的存放在同一数组中,通常几个相邻的像素组成一个像素(macro- pixel)
平面(planar) 格式:使用三个数组分开连续的存放Y、U、V三个分量,即Y、U、V分别存放在各自的数组中。
详情参考:图像基础概念与YUV/RGB深入理解
视频的相关概念
基础概念
视频码率:kb/s,是指视频文件在单位时间内使用的数据流量,也叫码流率。码率越大,说明单位时间内取样率越大,数据流精度就越高。
视频帧率:fps,通常说一个视频的25帧,指的就是这个视频帧率,即1秒中会显示25帧。帧率越高,给人的视觉就越流畅。
视频分辨率:分辨率就是我们常说的640x480分辨率、1920x1080分辨率,分辨率影响视频图像的大小。
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 帧图像采用双向时间预测,可以大大提高压缩倍数。
图片非原创,原图出处:音视频学习笔记-视频的主要概念