聊聊直播簡(jiǎn)要架構(gòu)梳理走查,你學(xué)會(huì)了嗎?
?一、音視頻直播架構(gòu)
下圖為音視頻直播架構(gòu)簡(jiǎn)圖。
1、涉及的角色
直播客戶端(主播)
- 功能主要包括音視頻數(shù)據(jù)的采集、編碼、推流
- 從攝像頭、麥克風(fēng)采集數(shù)據(jù),并對(duì)數(shù)據(jù)進(jìn)行編碼后通過RTMP協(xié)議發(fā)送給CDN源節(jié)點(diǎn)
直播客戶端(觀眾)
- 功能主要包括拉流、解碼、播放
- 從直播系統(tǒng)獲取房間流媒體地址
- 通過RTMP協(xié)議從CDN邊緣節(jié)點(diǎn)獲取數(shù)據(jù)、解碼、渲染
信令服務(wù)器
- 接受指令并處理業(yè)務(wù)邏輯,創(chuàng)建房間、加入房間、送禮物等
CND網(wǎng)絡(luò)
- 內(nèi)容分發(fā)網(wǎng)絡(luò)(Content Delivery Network)
- 利用最靠近每位用戶的服務(wù)器,更快、更可靠地將音樂、圖片、視頻、應(yīng)用程序等發(fā)送給用戶來提供高性能
- 提供異地備援,100%的高可用性
2、傳輸協(xié)議
RTMP協(xié)議
- 實(shí)時(shí)消息傳輸協(xié)議,Real Time Messaging Protocol的縮寫
- 最初由Macromedia為通過互聯(lián)網(wǎng)在Flash播放器與一個(gè)服務(wù)器之間傳輸流媒體音頻、視頻和數(shù)據(jù)而開發(fā)的一個(gè)專有協(xié)議
- 基于TCP,默認(rèn)使用1935端口的“明文”協(xié)議
HLS協(xié)議
蘋果公司提出基于HTTP的流媒體網(wǎng)絡(luò)傳輸協(xié)議,HTTP Live Streaming的縮寫
工作原理是把整個(gè)流分成一個(gè)個(gè)小的基于HTTP的文件來下載,每次只下載一些
HLS只請(qǐng)求基本的HTTP報(bào)文,與實(shí)時(shí)傳輸協(xié)議(RTP)不同,HLS可以穿過任何允許HTTP數(shù)據(jù)通過的防火墻或者代理服務(wù)器
根據(jù)客戶端帶寬情況自適應(yīng)調(diào)整碼率,例如使用FFmpeg可以將視屏文件轉(zhuǎn)換為HLS切片
3、整體流程
- 直播客戶端(主播)向信令服務(wù)器發(fā)起信令創(chuàng)建直播間
- 信令服務(wù)器收到指令后返回CDN源站推流地址
- 直播客戶端(主播)通過音/視頻采集設(shè)備采集數(shù)據(jù)后編碼、通過RTMP協(xié)議發(fā)送給CDN網(wǎng)絡(luò)
- 直播客戶端(觀眾)向信令服務(wù)器發(fā)起信令加入直播間
- 信令服務(wù)器收到指令后向客戶端(觀眾)推送其附近的CND邊緣節(jié)點(diǎn)地址
- 直播客戶端(觀眾)收到地址后使用RTMP/HLS協(xié)議拉取直播數(shù)據(jù)
二、點(diǎn)直播服務(wù)器搭建
下面兩種方式比較快速搭建點(diǎn)直播服務(wù)器。
方式一
- 使用Nginx+RTMP 推拉流插件
- Nginx RTMP Module支持RTMP/HLS/MPEG-DASH 協(xié)議
方式二
- 使用開源SRS服務(wù)器
- SRS是一個(gè)簡(jiǎn)單高效的實(shí)時(shí)視頻服務(wù)器,支持RTMP/WebRTC/HLS/HTTP-FLV/SRT/GB28181
三、CDN內(nèi)容分發(fā)網(wǎng)絡(luò)
CDN內(nèi)容分發(fā)網(wǎng)絡(luò)(Content Distribution Network)是指一種透過互聯(lián)網(wǎng)互相連接的電腦網(wǎng)絡(luò)系統(tǒng),利用最靠近每位用戶的服務(wù)器,更快、更可靠地將音樂、圖片、視頻、應(yīng)用程序及其他文件發(fā)送給用戶,來提供高性能、可擴(kuò)展性及低成本的網(wǎng)絡(luò)內(nèi)容傳遞給用戶。
- 提高網(wǎng)頁加載速度
- 提高文件下載速度
- 提高視頻播放速度
云廠商提供的CDN服務(wù):