前言
此刻,直播如火如荼(cha),所以在这里学习一下,因为所用到的技术太多,太广泛,所以更需要记录以备后用,文章连载,如有问题,客官别客气,狠狠的批评纠正我,一起进步。
本集简介
主要分解直播整个流程步骤与技术点。
直播总体技术流程
- 音视频采集
- 前处理
- 编码
- 传输,推流
- 解码
- 渲染,播放
直播步骤整体概览 这里引用一下网上的流程图:
流程步骤详解
- 音视频采集
音视频的采集是直播架构的第一个环节,也是直播的视频来源
采集的来源包括:摄像头采集,屏幕采集,iOS我们常用前者
- 前处理
前处理主要包括,美颜、模糊效果、水印等,总之就是让人变帅,画面变炫。在iOS端图像处理库是GPUImage。
- 编码
不经编码的视频存储所占用的内存太大,更何况还需要网络传输。
编码就是通过压缩音视频数据来减少数据体积,方便音视频数据的后期推流,拉流和存储,能大大提高存储传输效率。所以音视频需要经过压缩编码才能进行存储和传输。
那么问题来了,如何编码?有哪几种编码方式?
编码方式一般分为硬编码与软编码两种:
- 硬编码:使用非CPU进行编码,如显卡GPU、专用的DSP芯片等
- 软编码:使用CPU进行编码(手机容易发热)
在iOS端,由于硬件兼容性较好,我们可以直接进行硬编码。
既然需要编码,那么就需要制定编码规则即编码标准:
- 视频编码:H.265、H.264、VP8、VP9等
- 音频编码:AAC、Opus
- 传输
从推流端到服务端,数据经过推流端采集和预处理,编码之后推流到服务端
流传输就涉及到相应的传输协议,最常用的协议是RTMP、RTSP、HLS
- 流分发
音频流推到服务器后,为了适配各个平台端各种不同协议,需要在服务端做一些流处理工作,比如转码成不同格式支持不同协议如 RTMP、HLS 和 FLV,以适应各个平台,比如:iOS、Android、PC、网页...,
甚至,我们在服务端也提供了内容识别如鉴黄的功能,也是在服务端这里进行处理。
- 播放
拉流获取音视频数据后,需要通过解码器解码,渲染,最后在播放器上播放
总体步骤大概如下:
- 解协议:取出网络传输过程中一些无用信息
- 解封装:获取到的是 音频+视频 放在一起的封装文件
- 音视频解码
- 音视频同步