现代社会已经进入直播网红时代,各种视频直播秀,游戏直播,美食直播,薇娅和李佳琦的淘宝直播更是火的一塌糊涂,流量时代的各种网红更是层出不穷,作为程序员,我们更应该关注产品背后的技术原理,今天我们就来聊一聊直播的技术原理
直播技术流程大概为:
1:视频流采集
2:视频流处理、美颜、水印等
3:视频流编码封装
4:推流到服务器
5:服务器流分发
6:播放器拉流播放
1.采集
-
IOS、android使用自身系统自带的API,获取摄像头和麦克风的视频和音频数据流,视频采集分为音频采集和图像采集:
- 音频采集:音频数据既能与图像结合组合成视频数据,也能以纯音频的方式采集播放,常见的音频压缩格式有:MP3,AAC,HE-AAC,Opus,FLAC,Vorbis
(Ogg),Speex 和 AMR等。
音频采集和编码主要面临的挑战在于:延时敏感、卡顿敏感、噪声消除(Denoise)、回声消除(AEC)、静音检测(VAD)和各种混音算法等。 - 图像采集:将图像采集的图片结果组合成一组连续播放的动画,即构成视频中可肉眼观看的内容。图像的采集过程主要由摄像头等设备拍摄成 YUV 编码的原始数据,然后经过编码压缩成 H.264
等格式的数据分发出去。常见的视频封装格式有:MP4、3GP、AVI、MKV、WMV、MPG、VOB、FLV、SWF、MOV、RMVB 和
WebM 等 - 图像由于其直观感受最强并且体积也比较大,构成了一个视频内容的主要部分。图像采集和编码面临的主要挑战在于:设备兼容性差、延时敏感、卡顿敏感以及各种对图像的处理操作如美颜和水印等。
- 音频采集:音频数据既能与图像结合组合成视频数据,也能以纯音频的方式采集播放,常见的音频压缩格式有:MP3,AAC,HE-AAC,Opus,FLAC,Vorbis
2.传输前处理
- 增加美颜,滤镜,水印,人脸识别等效果,目前通用的是GPUImage库,同时支持IOS和android,有120多种滤镜效果
3.传输前编码
- 视频使用H.264编码,音频使用AAC编码,MP3和WMA也可以
4.推流
- 在推流之前还需要使用传输协议将音视频数据进行封装,变成流数据。常用的流传输协议有UDP、RTMP、HLS等,编码性能、编码速度和编码压缩比会直接影响整个流媒体传输的用户体验和传输成本。
5.数据流推送给CDN服务商,推送协议主要有三种:
-
RTMP是Adobe的专利协议,开源软件和开源库都支持的比较好,如开源的librtmp库,播放端只要支持flashPlayer就能非常简单的播放RTMP直播,直播延迟一般在1–3秒。
-
HLS是苹果提出的基于HTTP的流媒体传输协议,HTML5可以直接打开播放,通过微信、QQ等软件分享出去,用户也可以直接观看直播,可以说移动直播app,HLS拉流协议是必须支持的,缺点是延迟通常大于10秒。
-
FLV(HTTP-FLV) 协议是使用HTTP协议传输流媒体内容的一个协议,也不用担心被Adobe的专利绑架,直播延迟同样可以做到1–3秒。
6.服务器流分发
- 服务器一般选用高性能的nginx反向代理服务器,服务端需要对流进行转码,如支持RTMP、HLS、FLV等格式拉流,支持一路转多路适配不同网络和分辨率的终端设备
7.鉴黄
-
目前市面上提供鉴黄服务的方案主要有两种,第一种是对视频进行截图,然后对图片进行鉴黄,返回鉴黄结果和分值,相关企业有阿里(绿网)、图普科技等。
第二种是和CDN结合,直接对直播流进行分析,识别结果分为色情、疑似色情、性感和正常,业务系统根据识别结果直接控制直播流,代表企业有Viscovery等。
8.客户端拉流
- 拉流实际是推流的逆过程。首先通过播放端获取码流,标准的拉流格式有RTMP、HLS、FLV等