视频直播,主要涉及到采集、预处理、编码、传输、服务器转码、解码这样一个流程。
一、视频采集:采集主要包含图像采集和音频采集;
图像采集设置前置摄像头、后置摄像头,并配置采集的参数、图像数据的长宽、fps、输出的方向、横屏竖屏等,然后从回调中取到数据。
音频采集和编码主要面临的挑战在于:噪声消除(Denoise)、回声消除(AEC)算法等。
前期不需要音频数据处理需求的时候,只需配置音频采集的采样频率、采样精度和声道。
二、预处理:分为音频处理和视频处理两个方面。
音频处理是直播难点之一,尤其主播离手机有一段距离,直播环境会有噪音,所以直播的音频处理是整体降噪的过程。增益降噪等处理可直接从speex项目中抽出来的声音处理代码,然后调用、处理。如有类似在直播的时候播放背景音乐的混音需求,就需要使用Audio Unit来实现音频数据的混音,而还需要将混音的背景音乐转成PCM数据,拷贝一份送入混音,原来的数据送入播放器。
滤镜、美颜功能是直播标配,如果需要美白、水印、裁剪等处理效果,就必须处理拿到的buffer,这个时候还要考虑到拿到的数据是YUV还是RGB。iOS上是不能对YUV格式直接进行美颜处理,只能是RGB格式。可选择使用GPUImage库,调用GPUImage来进行采集和美白、水印、裁剪的处理,然后取出来进行编码上传,并显示在预览画面上。