1,采集。2,濾鏡處理。3,編碼。4,推流。5,CDN分發(fā)。6,拉流。7,解碼。8,播放。9,聊天互動。
其中1-4由LFLiveKit完成(2由GPUImage完成),5,就是搭建的服務器(或者買的服務器)。6-8由ijkplayer完成。
直播原理:把主播錄制的視頻,推送到服務器,在由服務器分發(fā)給觀眾觀看。
直播環(huán)節(jié):推流端(采集、美顏處理、編碼、推流)、服務端處理(轉(zhuǎn)碼、錄制、截圖、鑒黃)、播放器(拉流、解碼、渲染)、互動系統(tǒng)(聊天室、禮物系統(tǒng)、贊)
1,采集
AVFoundation:AVFoundation是用來播放和創(chuàng)建實時的視聽媒體數(shù)據(jù)的框架,同時提供Objective-C接口來操作這些視聽數(shù)據(jù),比如編輯,旋轉(zhuǎn),重編碼
2,濾鏡處理
GPUImage: GPUImage是一個基于OpenGL ES的一個強大的圖像/視頻處理框架,封裝好了各種濾鏡同時也可以編寫自定義的濾鏡,其本身內(nèi)置了多達120多種常見的濾鏡效果。
3,編碼
對視頻進行壓縮(視頻編碼)或者解壓縮(視頻解碼)的編碼技術(shù),比如MPEG,H.264,這些視頻編碼技術(shù)是壓縮編碼視頻的
4,推流
librtmp:用來傳輸RTMP協(xié)議格式的數(shù)據(jù),RTMP協(xié)議用于對象、視頻、音頻的傳輸。這個協(xié)議建立在TCP協(xié)議或者輪詢HTTP協(xié)議之上。
5,CDN分發(fā)
流媒體開發(fā):網(wǎng)絡層(socket或st)負責傳輸,協(xié)議層(rtmp或hls)負責網(wǎng)絡打包,封裝層(flv、ts)負責編解碼數(shù)據(jù)的封裝,編碼層(h.264和aac)負責圖像,音頻壓縮。
常用服務器
SRS:一款國人開發(fā)的優(yōu)秀開源流媒體服務器系統(tǒng)
BMS:也是一款流媒體服務器系統(tǒng),但不開源,是SRS的商業(yè)版,比SRS功能更多
nginx:免費開源web服務器,常用來配置流媒體服務器。
數(shù)據(jù)分發(fā)
CDN:(Content Delivery Network),即內(nèi)容分發(fā)網(wǎng)絡,將網(wǎng)站的內(nèi)容發(fā)布到最接近用戶的網(wǎng)絡”邊緣”,使用戶可以就近取得所需的內(nèi)容,解決 Internet網(wǎng)絡擁擠的狀況,提高用戶訪問網(wǎng)站的響應速度.
CDN:代理服務器,相當于一個中介。
CDN工作原理:比如請求流媒體數(shù)據(jù)
1.上傳流媒體數(shù)據(jù)到服務器(源站)
2.源站存儲流媒體數(shù)據(jù)
3.客戶端播放流媒體,向CDN請求編碼后的流媒體數(shù)據(jù)
4.CDN的服務器響應請求,若節(jié)點上沒有該流媒體數(shù)據(jù)存在,則向源站繼續(xù)請求流媒體數(shù)據(jù);若節(jié)點上已經(jīng)緩存了該視頻文件,則跳到第6步。
5.源站響應CDN的請求,將流媒體分發(fā)到相應的CDN節(jié)點上
6.CDN將流媒體數(shù)據(jù)發(fā)送到客戶端
6.拉流
直播協(xié)議選擇:

7.解碼
硬解碼:用GPU來解碼,減少CPU運算
優(yōu)點:播放流暢、低功耗,解碼速度快,
缺點:兼容不好
軟解碼:用CPU來解碼
優(yōu)點:兼容好
缺點:加大CPU負擔,耗電增加、沒有硬解碼流暢,解碼速度相對慢
8.播放
ijkplayer:一個基于FFmpeg的開源Android/iOS視頻播放器
API易于集成;
編譯配置可裁剪,方便控制安裝包大??;
支持硬件加速解碼,更加省電
簡單易用,指定拉流URL,自動解碼播放.
9.聊天互動
IM:(InstantMessaging)即時通訊:是一個實時通信系統(tǒng),允許兩人或多人使用網(wǎng)絡實時的傳遞文字消息、文件、語音與視頻交流.
IM在直播系統(tǒng)中的主要作用是實現(xiàn)觀眾與主播、觀眾與觀眾之間的文字互動.