寫在開始之前
之前也分享過不少零散的技術文章,包括音視訊、影像處理和流媒體服務相關的技術都略有涉獵。但是,都寫得比較偏具體功能的實現,不夠系統。因此也讓很多讀者產生迷惑和不解。需要讀者對流媒體相關的架構和知識有一定的瞭解之後才能上手。
對於開發者而言,這些都還好說。但是對於非技術型讀者來說,可以說是直接勸退了,因此本系列文章分為面向開發者得技術向 和 非技術向兩種教程分別更新,對於“非技術向”系列教程將不會出現程式碼編寫,力求通俗易懂;對於開發者得“技術向”系列教程將會出現大量得程式碼開發和優化教程。
本系列文章將以具體的應用場景作為實戰教程,系統的講解整個直播平臺的架構是如何設計的,如何開發這些子系統或者模組功能,從而搭建一套完整的直播平臺。
補充:本教程也適用於視訊會議,視訊監控等應用場景。視訊會議與直播中的連麥原理是相同的,視訊監控與直播平臺的差別是沒有主動推流端,多了拉流或者轉流端。
直播平臺結構
為了防止出現盲人摸象的問題。以我們將由面到點的從整體瞭解整個直播平臺的結構,然後把這個面分解成一個個子系統或者具體模組功能,這樣,我們才能夠清晰的瞭解直播平臺下每個系統模組的功能是做什麼的,如何執行的。
最簡單的直播平臺結構:
事實上我們只要搭建了流媒體服務,就已經完成最簡單的直播平臺了。剩下的就是等直播UP主推流,然後使用者觀看就可以了,是不是很簡單。
當然了,光是這樣還不行,使用者不知道如何獲取和播放你得直播地址,直播UP主也不知道往哪裡推流,直播平臺就是幫助使用者顯示直播UP主的房間,方便篩選和觀看,也方便使用者發彈幕能夠和正在直播的up主交流。至於直播UP主這塊的推流,還是需要知道直播地址並使用OBS等推流工具進行推流才可以直播。
CDN分發:
為什麼會用到CDN分發,這是因為使用直播平臺觀看直播的使用者多了以後出現了一個重大問題,那就是頻寬不夠了。
舉個例子:假設你只有一個直播UP主在推一路1080P高清直播,位元速率是4Mbps/s(每秒512KB),現在有一千個使用者同時在觀看,每個使用者拉流也是4Mbps/s(每秒512KB),那麼一千人同時就需要4000Mbp/s(每秒500MB的實時流量)的頻寬,也就是說不到三千的使用者就需要一萬兆的頻寬了。
怎麼辦?可想而知,光靠頻寬硬抗肯定是不現實的。而且國內頻寬費用可不便宜。所以這時候需要CDN來幫助緩解流媒體中心伺服器的頻寬壓力了,CDN分發一般會按照流量收費,天下沒有免費的午餐。
這時候直播平臺的結構變成了這樣:
推流端
推流端一般使用的軟體是OBS推流工具。這個工具就不多贅述了,用的實在很廣泛。
當然了,對於開發者而言,肯定需要的是FFmpeg 和 opencv了,FFmpeg是做音視訊編碼推流,opencv當然是用來實現美顏。
流媒體服務
流媒體服務就是實時視訊的中轉站。
流媒體服務一般而言:nginx,srs,red5等等,這個系列的後續教程會主要涉及nginx和srs。
拉流播放端
PC端:VLC
web端:videojs,flv.js,hls.js,ckplayer等等
移動端:ijkplayer
微信小程式:最好用企鵝雲的播放,否則會出現相容性問題,親測只有企鵝自己的網頁播放器才可以同時相容QQ微信小程式和公眾號。
系列教程後續會主要使用VLC測試拉流播放,雖然VLC延遲很大,但是相容性是最好的,網頁端測試主要使用videojs和flv.js以及企鵝的播放器
CDN分發
很多CDN服務商都支援rtmp,flv,hls等流媒體的分發,由於涉及具體廠家,不打廣告,這裡就不列舉了。
下一章
從零開始開發和搭建直播平臺-流媒體服務搭建之1-nginx流媒體服務搭建
從零開始開發和搭建直播平臺-流媒體服務搭建之2-srs流媒體服務搭建
javacv系列
以前寫的流媒體服務搭建
nginx-rtmp服務搭建:https://blog.csdn.net/eguid_1/article/details/51749830
感謝支援eguid原創文章。歡迎轉載文章,但還請註明出處,創作不易,萬分感謝!