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