最简易的音视频图解,包括一下几个部分:

于一个实时音视频应用共包括几个环节:采集、编码、前后处理、传输、解码、缓冲、渲染等很多环节。每一个细分环节,还有更细分的技术模块。比如,前后处理环节有美颜、滤镜、回声消除AEC、噪声抑制NS、静音控制VAD、自动增益控制AGC等,采集有麦克风阵列等,编解码有VP8、VP9、H.264、H.265等。
典型的实时音视频应用数据流转过程如下:
下面这张图可能更具体一点:

整个图包含了音视频数据从打包、编解码、传输、推拉流、播放等整个过程,这里边包含了很多音视频基础知识,下边归纳整理一下。
音频相关:
CDN构成:
①边缘结点:用户会先从边缘结点获取服务;
②二级结点(主干结点):主要是用于缓存,减轻源站的压力。如果边缘结点没有服务,会先从主干结点上拉取缓存的数据到边缘结点,然后用户再从边缘结点获取数据;
③源站:(会有多个源节点)内容提供商会将内容放在源站上。如果边缘结点和主干结点都没有获取到服务,则会访问源站。
常用工具:①ffmpeg
②ffplay:也是基于ffmpeg
③flashplayer
音频三要素:①音调(音频)
②音量
③音色(根材质有关)
听觉范围:①<20HZ,次声波
②20HZ~20KHZ,可以听见的
③>20KHZ,超声波
音频的量化与标准

①采样大小:也就是采样的纵坐标对应的值,表示一个采样用多少位存放。一般为16bit(2^16 = 65535),也可以是8位,但是8位对应的是256,比较小,一般采用16位。
②采样率:一般由8k,16k,32k,44.1k(AAC用这个),48k
可以把它理解为,要采集的总量,拿44.1k举例,比如说,现在要采集20HZ的,就要采集(44100/20=)2000次,而要采集20KHZ的,就要采集(44100/20000=)2次;
③声道:单声道、双声道、多声道(上下左右等都有一个喇叭)
码率:采样率 x 采样大小 x 声道数
比如:
采样率为:44.1k
采用大小为:16bit
双声道的PCM编码的WAV文件,它的码率为:
44.1k x 16 x 2=1411.2kb/s--->除以8--->176.4kB/s
音频的压缩技术:
有损压缩(就是说还原回来的数据和原数据不一样):消除冗余的数据
人耳听不到的声音:<20HZ或 >20kHZ的
被遮蔽掉的声音(受频域和时域的影响)
无损压缩:哈夫曼无损编码

常见的音视频编解码器:
AAC(Advanced Audio Coding):
为什么这么重要?
①应用范围广,在泛娱乐化中大部分都是用的这个;
②协议的支持:在泛娱乐化中要用的是rtmp协议,而AAC支持这个协议
③它的高保真可以保证音频的质量
目的:取代MP3
原因:MP3的规范是MPEG-2,这个规范在音频方面的处理是有损压缩,也就是说还原回来的数据和原数据不能一模一样,对音质有损耗;而AAC的损耗更小,且压缩率更高,他是基于MPEG-4规范的;

三、视频:
1.几种帧:
I帧:又叫关键帧,也就是一组帧中的第一帧;
P帧:向前参考帧,也就是说,他只参考它的前一帧,存的是和前一帧不同的地方,属于帧间压缩;
B帧:双向参考帧,它会参考它的前一帧和它的后一帧,存的是前后帧都没有的,不适合实时互动场景
GOP:一组帧,在一组帧的前面会有SPS(Sequence Parameter Set,序列参数集)和PPS(Picture Parameter Set,图像参数集)

2.视频花屏和卡顿的原因
花屏主要是有帧的丢失:比如P帧或者是I帧丢失了;
卡顿主要是为因为为了解决避免花屏的情况,就把丢失的那一组帧全部扔掉,然后就会卡屏了;
3.编码器分类:

H264编码原理:
压缩技术:
帧内预测压缩,解决空域数据冗余问题,比如一张图片上人眼无法直接感官到的颜色值等;
帧间预测压缩,解决时域上数据冗余的问题,比如在录制视频的时候,会有很大帧的图像是一样的;
整数离散余弦变换(DCH),将空间上的相关性变成频域上的无关的数据然后进行量化;
CABAC:上下文适应的无损压缩
宏块划分


从上面的图中可以看出,整张图宏划分后就是这样的了;

-
分层:
- NAL层:网络抽象层
一个帧的拆包和组包都是在这里完成的;(为什么要拆包和组包呢?因为网络的最大传输单元是1500字节,而每一帧大于1500字节,所以得拆包)
- VCL层:视频编码层
- 码流:

NAL单元

切片与宏的关系

H264码流分层

