Android直播技术之(一) : 音频/视频采集等介绍

直播技术近年来越来越火,直播的形式也多种多样,如电竞直播/秀场直播/泛娱乐直播/校园直播等,五路哪种直播,都需要端和端之间的交互.本文介绍下直播技术中经常用到的相关知识点,如有错误,敬请指正

1.直播原理:
通过计算机上的音视频输入设备或者手机端摄像头和麦克风实时录制的音视频流,编好码后通过直播协议将数据包实时发送给服务器端.服务器端通过流媒体协议把实时流粉发出去,其它终端通过直播协议实时请求数据包,并进行解码播放,这就是直播的原理
2.直播架构
直播架构主要分4块:

(1)采集数据推流过程,包括对数据流编码,通过流媒体协议传输到服务器上

(2)服务器端收到推流数据后,进行内容分发及中间转存处理

(3)播放器进行拉流

(4)这不属于直播技术,但是也和重要,那就是在直播中不只是播放音视频,还可以做一些实时美颜和滤镜效果

其中直播架构如图所示:
Android直播技术之(一) : 音频/视频采集等介绍

3.直播过程
直播过程主要涉及采集数据/渲染处理/编码数据/推流/CDN分发/拉流/播放流数据等
(3.1:采集内容之音频采集)
音频数据既能与图像结合组成音视频数据,也支持单纯的音频数据输出(电台).音频的采集过程主要是通过设备设置采样率/采样数,将音频信号采集为PCM编码的原始数据,然后编码压缩成MP3/AC3等封装格式的数据粉发出去.常见的音频封装格式有MP3/AAC/OGG/WMA/FLAC/MP4/AMR等.声音的采样和量化如下图:
Android直播技术之(一) : 音频/视频采集等介绍
音频采集和编码面临的主要挑战在于去噪/回声消除(ACE)/静音检测(VAD)和各种音效处理等
在音频采集阶段,主要技术如下:

(3.1.1)采样率:采样率越高,数据量越大,音质越好,但是!并不是采样率越高,效果越好,不同声音的采样率有一定的阈值
(3.1.2)位宽:位宽表示一次能传递的数据宽度,就像公路的车道宽度有双向车道和双向更多的车道,车道越多一次能通过的汽车就越多,位宽越大一次性能处理的数据就越多,音频采样过程中常用的宽值有8位或16位
(3.1.3)声道数:直声音在录制或播放时在不同空间位置采集或回放的相互独立的音频信号,声道数是声音录制时音源数量或回放时相应的扬声器数量.声道数为1和2分别叫单声道和双声道
(3.2:采集内容之图像采集)
图像采集是通过摄像头或可以采集图像的设备,获取一段时间内的图像内容,如手机摄像头采集的NV21格式数据,在经过压缩成H.264等格式的数据,瑞后可以编码成不同的封装格式传递或直接通过流媒体协议传递到服务器
在图像采集阶段,主要技术有:

(3.2.1)图像格式:通常采用YUV格式存储原始数据信息,其中包含8位表示的黑白图像灰度值,及可由RGB3种色彩组合的彩色图像
(3.2.2)传输通道:指数据在传输时所利用的媒介,包括获取模块/数据类型模块及传输模块.如可用TCP或UDP传输
(3.2.3)分辨率:代表图像中存储的信息量,指每英寸图像内有多少个像素,图像分辨率表达式"水平像素数*垂直像素数"
(3.2.4)采样率:就是每秒从连续信号中提取并组成离散信号的采样个数,如:采样720像素视频还是540像素视频,不同的采样个数对应的分辨率不同,文件大小也不一样
(3.2.5)fps:指画面中每秒传输的帧数,通俗讲就是动画或视频的画面数,直播一般设置为15~20fps
在实际开发中,常常要调整以上的一些参数,如fps/分辨率等已获得更好的直播效果.

(3.3:采集内容之采集源)
(3.3.1)摄像头采集:对于视频内容,主要通过摄像头和专业摄像机进行采集
(3.3.2)屏幕录制:一般可调用Android系统的API来捕捉屏幕进行录制.在音视频会议中,常使用的开原桌面推流工具OBS进行屏幕录制和推流,他的优点是轻量,支持丰富的采集源,而采集源的具体实现也可以交给实现者