一张图了解音视频开发流程
YUV和PCM是收集的裸数据,通过编码压缩(H264和OPUS),通过网络传输协议(rtsp)传输,封装成常用的视频格式(MP4)。
1. 为什么需要视频编码压缩
我们看下一个完全没压缩的视频数据大小(裸数据)。假设视频是高清(1280 * 720)分辨率(由一个个像素点组成),每秒30帧,也就是每秒的数据1280 * 720 *30 / 8(字节) /1024(KB)/1024(MB) = 3.11MB
那么90分钟的电影就要16.7GB,这个数据量显然在当前网络下是不现实的。视频编码显然是为了压缩大小。
2. 视频压缩的原理
2.1. 冗余数据
视频信息之所以存在大量可以被压缩的空间,是因为其中本身就存在大量的数据冗余。其主要类型有:
- 时间冗余
视频相邻的两帧之间内容相似,存在运动关系 - 空间冗余
视频的某一帧内部的相邻像素存在相似性2.2. 编码
针对这些不同类型的冗余信息,在各种视频编码的标准算法中都有不同的技术专门应对,以通过不同的角度提高压缩的比率。2.2.1. 预测编码
- 帧内预测
预测值与实际值位于同一帧内,用于消除图像的空间冗余;帧内预测的特点是压缩率相对较低,然而可以独立解码,不依赖其他帧的数据;通常视频中的关键帧都采用帧内预测。 - 帧间预测
帧间预测的实际值位于当前帧,预测值位于参考帧,用于消除图像的时间冗余;帧间预测的压缩率高于帧内预测,然而不能独立解码,必须在获取参考帧数据之后才能重建当前帧。
通常在视频码流中,I帧(关键帧)全部使用帧内编码,P帧中的数据可能使用帧内或者帧间编码。
3. 音频的采集和播放
3.1. 采样
大自然中声音的存在是以模拟信号的方式存在的,然而在计算机的世界里,只有1、0的存在,所以如果我们想要把大自然中的声音存储在计算机的世界中,那么就需要转换;即模拟信号—>数字信号。
采样就是对模拟信号进行周期性扫描,把时间上连续的信号变成时间上离散的信号,取值离散的数字信号后在信道中传输。
为了保证数字化的音频能够准确(可逆)地还原成模拟音频进行输出,采样定理要求:采样频率必须大于等于模拟信号频谱中的最高频率的2倍。常用的音频采样率有:8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz。
3.2. 量化
就是把采样得到的声音信号幅度转换成数字值,用于表示信号强度。
量化精度:用多少个二进位来表示每一个采样值,也称为量化位数。声音信号的量化位数一般是4,6,8,12或16bits。
3.3. 编码
就是用一组二进制码组来表示每一个有固定电平的量化值
模拟声音转化成数字声音的结果,就是PCM,一般我们称之为音频裸数据。