导言:音视频开发涉及的知识面比较广,知识点又相对独立琐碎,入门门槛相对较高。想要对音视频开发具有深入全面的了解,需要在行业深耕多年。本文将简单介绍音视频的采集,编解码,传输,渲染四个技术点并对涉及到的知识点和原理进行解释,希望你可以对音视频开发窥见一斑。
目录
一、简化的音视频客户端的架构图
图2.1 音视频客户端架构图
二、各模块拆解
从图2.1我们可以看到一个音视频客户端架构图大致可以分为以下几个模块:
- 音视频采集模块(因为涉及到跨平台通信所以音视频采集又涉及到各操作系统的API)
- 音视频编解码模块(涉及到编解码器的插件化管理)
- 网络传输模块
- 音视频渲染模块
接下来,我将为大家介绍每个模块涉及到的相关知识:
(1)音视频采集模块
音频篇:
首先我们来介绍一下音频采集的原理,音频采样就是通过麦克风等录音设备将声音信号(声音是由物体震动产生的一种疏密相间的纵波)转化为电信号(声音传递的能量会导致麦克风内部的电压发生变化从而产生电流,可参考动圈麦),然后经过采样,量化,编码的方式将电信号转换成数字信号,最后得到一组二进制码流的过程。上述模数转换的过程也被称为PCM(Pulse Code Modulation,脉冲编码调制)。PCM编码是一种最原始的音频编码,其他编码方式都是在此基础上再次编码和压缩的。
图3.1 模/数转换示意图
采样 是指在时间轴上对模拟信号进行数字化,采样频率是指单位时间内从连续信号中提取并组成离散信号的采样个数,单位是Hz。而且奈奎斯特采样定理指出,如果信号是无限的,并且采样频率高于信号带宽的两倍,那么原来的连续信号就可以从采样样本中完全重建出来。所以采样频率越高,对声音的还原度越高。人耳可以感受到的震动频率是20Hz-20000Hz,所以一般采样频率是40000Hz,常用的采样频率有22.05kHz(FM广播的品质),44.1kHz(CD声音品质),48kHz(高品质无损音乐)
量化 是指在振幅轴上对模拟信号进行数字化,但由于抽样信号在时间轴上虽然是离散的信号,但仍然是模拟信号,其取值在一定范围内可以有无限多个值(比如49.999999....) ,所以为了用准确的数字表示采样值,我们需要对采样值进行“取整”。量化位宽是指用几位二进制数来存储采样的数据,量化位数越大,声音的质量越高。常用的位宽有8bit和16bit。
编码 是指将量化后的采样的十进制数字码流转换成给定字长(量化位深)的二进制码流的过程。
视频篇:
常见的视频采集方式有摄像头采集,屏幕录制采集,从视频文件推流。这里我们以摄像头采集视频为例简单讲解一下视频采集的原理:
被拍摄物体通过镜头(lens),将生成的光学图像投射到感光传感器(sensor)上,把光信号转换成电信号,电信号再经过模数转换把电信号转换成数字信号,数字信号经过DSP图像处理器加工处理,转换成标准的RGB、YUV等格式图像信号存储在设备上最终通过显示器可以看到图像了
图3.2 摄像头工作原理图
图像采集常会涉及到以下几个技术参数:
- 像素
- 颜色编码方式
- 分辨率
- 帧率
- 采样频率
接下来简单介绍一下各个参数的含义:
像素:像素是组成图像的基本单位,像素的大小不是固定的,是由屏幕的大小决定,像素的纵横比也不是固定的,一般来说,电视上显示的像素是矩形的,而电脑上显示的像素是正方形的。
颜色编码方式:主要有RGB和YUV,RGB表示每个像素点都由红、绿、蓝三个颜色组成,每中颜色用8个bit表示,也就是一个字节,所以一个像素点的大小是三个字节。而YUV采用明亮度和色度来表示像素的颜色,Y表示明亮度,UV表示色度(色调和饱和度),和RGB不同的是Y和UV可以分离的,没有UV分量同样可以表示一幅完整的图像,但是是黑白的。对于图像显示器来说,通常选择RGB模型来显示图像。而在传输的图像时使用的是YUV模型,因为YUV模型可以节省带宽。比如采用主流的YUV 4:2:0的方式,可以比采用RGB方式节省一半的带宽,所以在采集时需要将RGB先通过公式转换成YUV(算法原理可以参考一文读懂 YUV 的采样与格式)
分辨率:是指纵横向上的像素点数,它的表达式为:“水平像素数*垂直像素数”。常见的图像分辨率有QCIF(176×144),CIF(352×288),D1(704×576),720P(1280×720),1080P(1920*1080)。摄像机成像的最大分辨率是由CCD或CMOS感光器件决定的。现在有些摄像机支持修改分辨率,是通过摄像机自带软件裁剪原始图像生成的
帧率:一帧就是一副静止的画面,连续的帧就形成动画,如电影等。我们通常所说的帧数就是在1秒钟时间里传输的图片的数量,通常用fps(Frames Per Second)表示。每一帧都是静止的图像,快速连续地显示帧便形成了运动的假象,还原了物体当时的状态。高帧率可以得到更流畅、更逼真的动画。每秒钟帧数 (fps)