直播的技術
直播技術概況來說,可以分為 采集,前處理,編碼,傳輸,解碼,渲染 這幾個環(huán)節(jié)
一個完整直播app實現流程

image.png
一個完整直播app架構

image.png
音視頻采集
- 音視頻的采集是直播架構的第一個環(huán)節(jié),也是直播的視頻來源
- 采集的來源包括:
- PC端:屏幕攝像頭(攝像頭驅動適配)
- OS端:攝像頭采集(屏幕采集?)
- Android端:屏幕攝像頭采集(硬件過多,適配一堆坑)
前處理
- 使用美顏相機&美圖秀秀已經是網絡發(fā)照片&發(fā)視頻必備技能了
- 80%的主播沒有美顏簡直不能看(當然還是有美女的)
- 不能看如何吸引用戶&觀眾
- 對視頻進行美顏,已成標配
- 處理主要包括,美顏、模糊效果、水印等
- 各個平臺處理方式
- PC端:美顏鏡頭、一些美顏軟件
- iOS端:圖像處理庫是GPUImage,提供了豐富的預處理效果,也可利用該庫自定義設計
- Android端:Google開源的grafika,是一個非常強大的圖形處理庫
編碼
- 不經編碼的視頻非常龐大,存儲起來都麻煩,更何況網絡傳輸
- 編碼通過壓縮音視頻數據來減少數據體積,方便音視頻數據的推流,拉流和存儲,能大大提高存儲傳輸效率
- 音視頻必須經過壓縮編碼才能進行存儲和傳輸
- 編碼方式:
- 硬編碼:使用非CPU進行編碼,如顯卡GPU、專用的DSP芯片等
- 軟編碼:使用CPU進行編碼(手機容易發(fā)熱)
- 各個平臺處理:
- iOS端:硬件兼容性較好,可以直接進行硬編碼
- Android端:硬編碼較難,難找到統(tǒng)一的庫兼容各個平臺(推薦使用軟編)
- 編碼標準:
- 視頻編碼:H.265、H.264、VP8、VP9等
- 音頻編碼:AAC、Opus
傳輸
- 從推流端到服務端
- 數據經過推流端采集和預處理,編碼之后推流到服務端
- 流傳輸就涉及到相應的傳輸協(xié)議,最常用的協(xié)議是RTMP、RTSP、HLS
流分發(fā)
- 音頻流推到服務器后,為了適配各個平臺端各種不同協(xié)議,需要在服務端做一些流處理工作,比如轉碼成不同格式支持不同協(xié)議如 RTMP、HLS 和 FLV,以適應各個平臺
- 比如:iOS、Android、PC、網頁
- 甚至,為了配合一些運營需求,比如一些監(jiān)管部門的要求,我們在服務端也提供了內容識別如鑒黃的功能
播放
- 拉流獲取音視頻數據后,需要通過解碼器解碼,渲染才能在播放器上播放
- 總體步驟概覽:
- 解協(xié)議:取出網絡傳輸過程中一些無用信息
- 解封裝:獲取到的是音頻&視頻放在一起的封裝文件
- 音視頻解碼:音視頻都是經過壓縮編碼的內容,解碼后才能進行播放
- 音視頻同步:視頻&音頻文件需要通過同步播放
- 音視頻播放:聲卡&顯卡等對音視頻進行播放