在開發直播系統平臺中,會運用到非常多的技術難點,例如視訊/音訊處理,圖形處理、視訊/音訊壓縮、CDN分發等,每一個技術都夠學好幾年的。今天就跟大家介紹一下開發一套視訊直播系統,整個流程中所運用到的技術原理大概是哪些。
首先我們來了解一下一個完整的直播APP原理是:把主播錄製的視訊,推送到伺服器,再由伺服器分發給觀眾觀看。
流程: 採集 —>處理—>編碼和封裝—>推流到伺服器—>伺服器流分發—>播放器流播放
1. 採集視訊、音訊
採集是整個視訊推流過程中的第一個環節,它從系統的採集裝置中獲取原始視訊資料,將其輸出到下一個環節。視訊的採集是指音訊採集和影象採集:音訊資料既能與影象結合組合成視訊資料,也能以純音訊的方式採集播放,純音訊採集播放在很多成熟的應用場景如線上電臺和語音電臺等起著非常重要的作用。影象採集是將影象採集的圖片結果組合成一組連續播放的動畫,即構成視訊中可肉眼觀看的內容。對於採集,PC端需要各種型號的攝像頭的驅動,Andriod端要做很多手機機型的適配工作,ios端就比較簡單。
2.視訊處理(如美顏、水印)
視訊或者音訊完成採集之後得到原始資料,為了增強一些現場效果或者加上一些額外的效果,我們一般會在將其編碼壓縮前進行處理,處理環節中分為音訊和視訊處理,音訊處理中具體包含混音、降噪和聲音特效等處理,視訊處理中包含美顏、水印、以及各種自定義濾鏡等處理。美顏美化功能是線上直播系統開發的標配,且以動態貼紙為代表的AI技術也被廣泛應用於音視訊直播系統方案中。
(圖片轉載自網路)
3.編解碼、封裝
編碼是資訊從一種形式或格式轉換為另一種形式的過程也稱為計算機程式語言的程式碼簡稱編碼。解碼,是編碼的逆過程,使用相關硬體或軟體對接收到的編碼後的音視訊資料進行解碼,得到可以直接顯示的影象或聲音。編解碼就好比物流系統中配貨和裝貨的過程,這個過程直接就影響視訊影象文字在網路傳輸中的速度。封裝,就類似媒體的容器,是把編碼器生成的多媒體內容(視訊,音訊,字幕,章節資訊等)混合封裝在一起的標準。封裝使得不同多媒體內容同步播放變得簡單,也為多媒體內容提供索引,也就是說如果沒有封裝存在的話一部影片你只能從一開始看到最後,不能拖動進度條,而且如果你不自己去手動另外載入音訊就沒有聲音。
4.推流到伺服器
推流,就是將採集到的音訊、視訊資料通過流媒體協議傳送到流媒體伺服器。推流對這個直播鏈路影響非常大,如果推流的網路不穩定,無論我們如何做優化,觀眾的體驗都會很糟糕,所以也是我們排查問題的第一步。推送協議主要有三種:
(1)RTSP(Real Time Streaming Protocol):實時流傳送協議,是用來控制聲音或影像的多媒體串流協議, 由Real Networks和Netscape共同提出的;
(2)RTMP(Real Time Messaging Protocol):實時訊息傳送協議,是Adobe公司為Flash播放器和伺服器之間音訊、視訊和資料傳輸 開發的開放協議;
(3)HLS(HTTP Live Streaming):是蘋果公司(Apple Inc.)實現的基於HTTP的流媒體傳輸協議。
RTMP 是目前主流的流媒體傳輸協議,廣泛用於直播領域,可以說市面上絕大多數的直播產品都採用了這個協議,也有部分使用HLS協議。
5.伺服器流分發
流媒體伺服器的作用是負責直播流的釋出和轉播分發功能。
常用伺服器
SRS:一款國人開發的優秀開源流媒體伺服器系統
BMS:也是一款流媒體伺服器系統,但不開源,是SRS的商業版,比SRS功能更多
nginx:免費開源Web伺服器,常用來配置流媒體伺服器
自建流媒體伺服器侷限性很大,費用也比較高昂,建議交給CDN服務商。
6. 播放器流播放
主要是實現直播節目在終端上的展現。如果使用的傳輸協議是RTMP, 那麼只要支援 RTMP 流協議的播放器都可以使用,譬如:電腦端:VLC等;手機端:Vitamio以及ijkplayer等。
希望通過以上直播技術原理的闡述,在幫助大家更好地了解直播系統如何搭建的同時,也能夠幫助大家優化自己的直播系統解決方案。