一般来说,我们常把视频直播的流程可以分为如下几步:
采集 —>处理—>编码和封装—>传输(推流到服务器、服务器流分发)—>播放器流播放
简单描述起来就是:主播端把音视频数据采集编码后通过CDN网络传送到观众端,观众进行观看。之前我常拿网络购物举例子,视频直播就相当于是把图像数据打包,从一个地方运输到另一个地方。
下面我们就从各个环节简单说一下技术原理:
音视频采集
采集是整个视频直播过程的第一个环节,它从系统的采集设备中获取原始视频数据,将其输出到下一个环节。视频的采集涉及两方面数据的采集:音频采集和图像采集。
音频采集
音频的采集过程主要通过设备将环境中的模拟信号采集成 PCM 编码的原始数据,然后编码压缩成MP3,AAC,HE-AAC,Opus,FLAC,Vorbis (Ogg),Speex 和 AMR等等格式的数据分发出去。音频采集和编码主要面临的挑战在于:延时敏感、卡顿敏感、噪声消除(Denoise)、回声消除(AEC)、静音检测(VAD)和各种混音算法等。
图像采集
图像的采集过程主要由摄像头等设备拍摄成 YUV 编码的原始数据,然后经过编码压缩成 MP4、3GP、AVI、MKV、WMV、MPG、VOB、FLV、SWF、MOV、RMVB 和 WebM 等等格式的数据分发出去。图像采集和编码面临的主要挑战在于:设备兼容性差、延时敏感、卡顿敏感以及各种对图像的处理操作如美颜和水印等。
处理
音视频数据完成采集之后,为了达到相应的现场效果,使视频画面更加的优美往往需要加上一些额外的效果。
例如,现在常见的泛娱乐直播祛斑美颜功能就是必不可少的一项功能,有的还需要加上声音的一些混淆处理让音效更加的丰富,满足直播现场需要的效果。还有的要加logo水印等等,这些都是在编码压缩前进行处理完成的。
编码封装
对流媒体传输来说,编码非常重要,编码性能、编码速度和编码压缩比会直接影响整个流媒体传输的用户体验和传输成本。
为什么要编码?
原始视频数据存储空间大,而经过 H.264 编码压缩之后,视频文件的大小变得非常小,占用带宽传输也很小,满足了实时传输的需求。如果不仅进行编码原始数据文件过于庞大,难以传输,更别提无卡顿、低延迟的直播了。所以从视频采集传感器采集来的原始视频势必要经过视频编码。
为什么编码之后原有的视频数据会变得这么小呢?其实,这里的核心技术原理就是去冗余。
视频图像数据有极强的相关性,也就是说有大量的冗余信息。其中冗余信息可分为空域冗余信息和时域冗余信息,编码技术就是将数据中的冗余信息去掉(去除数据之间的相关性)。
(注:H.264是视频编码器的一种,常见的有H.264、HEVC/H.265 、VP8 、VP9 、FFmpeg 等)
封装就是用什么样容器来装编码之后的数据,就像物流运输一样是选用长方形盒子还是正方形或者是圆形的一样。目前,流媒体传输中主要采用的就是 FLV 和 MPEG2-TS 格式。
视频直播技术编码封装之后在主播端的任务基本就完成了