技术整体概述:
- 采集:摄像头采集,屏幕采集(视屏来源)
- 处理:美颜、水印、滤镜效果(瘦脸、美白)
- 编码:视频压缩编码、音频压缩编码(h.265 / h.264 / VP9)
- 推流:将编码流推送给服务器
- 流分发:服务器进一步视频转码将流推送给播放端
- 解码:将流解码成mp4、mp3、MOV、MPV等
- 播放:各平台客户端播放视频
音视频采集:
- PC端:屏幕摄像头(摄像头驱动适配)
- iOS端:摄像头采集(屏幕采集 ReplayKit)
- 安卓端:屏幕摄像头采集(适配多、坑多)
前处理:
- 美颜,瘦脸,水印,磨皮
- iOS:GPUImage
- 安卓:grafika
- PC : 美颜镜头
编码:
-
不经过编码的视频非常庞大,储存麻烦,网络传输太大
编码是通过压缩音视频数据来减少数据提及,方便音视频数据的推流,拉流储存,提高传输效率,音视频必须经过压缩才能进行储存传输
-
编码方式:
- 硬编码 :使用非CPU进行编码,如显卡GPU ,专用DSP芯片等
- 软编码 : 使用CPU进行编码(手机容易发热)
-
各个平台处理方式:
- iOS端:硬件兼容性较好,可以直接进行硬编码
2.安卓端:型号不一样,硬编码较难,难以找到统一库兼容各个平台 (推荐使用软编码)
- iOS端:硬件兼容性较好,可以直接进行硬编码
编码标准 :
1.视屏编码:H.264、H.265、VP8、VP9
2.音频编码:AAC、Opus
流分发:
音视频流推到服务器后,为了适配各个平台端各种不同的协议,需要在服务端做一些流处理工作,比如转码成不同格式支持不同协议如RTMP、HLS和FLV来适应各个平台
甚至为了配合一些运营需求,比如一些监管部门的要求,我们在服务端也提供了内容识别,例如鉴黄功能
解码 :
- 拉流获取音视频数据后,H.264数据能无法直接播放,需要通过解码器解码,渲染才能在播放器上播放
- 解协议:取出网络协议传输中一些无用信息
- 解封装:获取到音频&视频封装文件(放在一起)
- 音视频解码:开始解码压缩内容
- 音视频同步: 解码的视频 &音频文件需通过同步才能播放
播放:
- 使用适合的播放软件 进行播放
1.iOS:AVPlayer 等
2.安卓:MediaPlayer 等