不會做直播還混什么互聯(lián)網(wǎng)
2016年國內(nèi)各種直播應(yīng)用如雨后春筍一般涌現(xiàn)出來,各大主打云服務(wù)的國內(nèi)互聯(lián)網(wǎng)巨頭紛紛推出了自己的視頻直播平臺的解決方案嚎花,比較優(yōu)秀的有七牛, 阿里的大視頻解決方案,網(wǎng)易的云視頻,當(dāng)然騰訊也不甘落后紊选,推出了類似的視頻云。
事實(shí)上兵罢,網(wǎng)絡(luò)直播由來已久,但之所以會在2016年一下子火起來卖词,我覺得一是短視頻社區(qū)的火爆帶動(dòng)了整個(gè)視頻行業(yè),促成了網(wǎng)絡(luò)直播的流行此蜈。再者拢操,大部分人通過早期的微信公眾號舶替,微博等自媒體媒介嘗到了甜頭杠园,網(wǎng)絡(luò)直播片天地自然也不能放過顾瞪。最后各類mooc在中國大地遍地開花抛蚁,教育行業(yè)對直播也有相當(dāng)需求陈醒。最后瞧甩,事實(shí)上對于直播,國內(nèi)具有相當(dāng)?shù)募夹g(shù)積累肚逸。
網(wǎng)絡(luò)直播的技術(shù)構(gòu)架
往簡單地說直播就是在自己的設(shè)備上采集音視頻流然后推送到遠(yuǎn)程服務(wù)器再有遠(yuǎn)程服務(wù)器分發(fā)到網(wǎng)絡(luò)中的客戶端爷辙。
這可能是歷史上最粗線條的直播構(gòu)架圖
看上去很簡陋朦促,但是單就直播這個(gè)功能來說,他確實(shí)就是這么工作的务冕,但是為了讓大家看到更加高清的畫面同時(shí)又能最大限度的滿足部分用戶可憐的帶寬,編碼工作就成了視頻直播的重點(diǎn)。其次臊旭,不同的硬件的編碼方式也不同,存在各種兼容性問題离熏。同時(shí),視頻取流的客戶端也需要做各種各樣的播放器來滿足不同設(shè)備撤奸。最要命的還有服務(wù)器端的網(wǎng)絡(luò)分發(fā),怎么尋找最短的路徑用最快的時(shí)間把視頻分發(fā)出去?最后胧瓜,還有視頻延時(shí)怎么才能降到最低,音視頻的同步府喳,直播的錄像和回看和其引出的存儲問題蒲肋,權(quán)限問題钝满,內(nèi)容審核,用戶體驗(yàn)弯蚜,用戶之間的即時(shí)消息,禮物系統(tǒng)等等一系列問題的引出碎捺,最終導(dǎo)致了直播系統(tǒng)變得異常復(fù)雜路鹰,于是就有了下圖:
一個(gè)功能上基本夠用的直播系統(tǒng)(來自知乎網(wǎng)易工程師)
書歸正傳收厨,先來談?wù)勚辈シ?wù)器
目前比較主流的直播協(xié)議有以下幾種:
RTMP(延遲低,適合對實(shí)時(shí)性要求比較高的情況)
FLV OVER HTTP(延遲比RTMP高一點(diǎn)诵叁,來瘋之類在用)
HLS(高延遲,至少9秒左右拧额,適合游戲直播,Twich好像用這個(gè))
怎么選擇協(xié)議是一個(gè)讓人頭疼的問題势腮,RTMP是Adobe開發(fā)出來的一套私有協(xié)議,適用于flash player 在PC端用起來比較爽捎拯,但是到了移動(dòng)端則需要自己單獨(dú)開發(fā)播放器泪幌;HTTP-FLV,同樣依賴于flash player延時(shí)排第二祸泪,同樣不能原生支持移動(dòng)端,但其本質(zhì)上使用的是HTTP協(xié)議傳輸没隘;HLS則可以原生支持手機(jī)端,不過右蒲,延時(shí)較大。
最終瑰妄,盡管Adobe已經(jīng)正是聲明將在2020年停止開發(fā)FLASH,但是這也并不影響我使用rtmp協(xié)議间坐,誰讓網(wǎng)絡(luò)上rtmp的資料比較多呢灾挨。
RTMP服務(wù)器
目前主流的RTMP服務(wù)器又有下面這么幾種(這是要逼死選擇困難戶爸袼巍):
1.開源系統(tǒng):
Red5
Live555
RtmpD
EasyDarwin
FFServer
2.商用系統(tǒng)
NTV Media Server G3
Flash Media Server5
Windows Media Server
商用系統(tǒng),額蜈七,基本上不用考慮了,像我這種個(gè)人開發(fā)者飒硅。溯警。狡相。
然后食磕,開源系統(tǒng)也果斷一個(gè)都沒有選尽棕,最后選擇了nginx-rtmp.因?yàn)槲业闹辈ハ到y(tǒng)并沒有多么復(fù)雜彬伦,說是直播滔悉,實(shí)際上是想做一個(gè)導(dǎo)播臺单绑!
nginx-rtmp安裝
nginx-rtmp 事實(shí)上只是nginx的一個(gè)模塊回官,而且并沒有在nginx官方版本內(nèi)集成搂橙,需要在安裝nginx的時(shí)候同是編譯這個(gè)模塊進(jìn)去。
具體的安裝方法,按照一般的套路苔巨,首先是下載,然后是編譯和安裝侄泽,最后是配置。
首先悼尾,需要分別下載nginx服務(wù)器和對應(yīng)的插件 nginx-rtmp-module.
wget https://nginx.org/download/nginx-1.12.1.tar.gz
git clone git://github.com/arut/nginx-rtmp-module.git
tar xzf nginx-1.12.0.tar.gz
cd nginx-1.12.0
然后,進(jìn)行編譯安裝:
sudo ./configure --with-http_ssl_module --add-module=../nginx-rtmp-module
sudo make
sudo make install
至此闺魏,編譯安裝完成未状!家下來啟動(dòng)nginx服務(wù)器:
sudo /usr/local/nginx/sbin/nginx
設(shè)置nginx服務(wù)器的直播流
sudo vi /usr/local/nginx/conf/nginx.conf
error_log? logs/error.log debug;? ? events {? ? worker_connections1024;}http {? ? include? ? ? mime.types;? ? default_type? application/octet-stream;? ? sendfile? ? ? ? on;? ? keepalive_timeout65;? ? server {? ? ? ? listen8080;? ? ? ? server_name? localhost;# rtmp statlocation /stat {? ? ? ? ? ? rtmp_stat all;? ? ? ? ? ? rtmp_stat_stylesheet stat.xsl;? ? ? ? }? ? ? ? location /stat.xsl {# you can move stat.xsl to a different locationroot /usr/build/nginx-rtmp-module;? ? ? ? }# rtmp controllocation /control {? ? ? ? ? ? rtmp_control all;? ? ? ? }? ? ? ? error_page500502503504/50x.html;? ? ? ? location = /50x.html {? ? ? ? ? ? root? html;? ? ? ? }? ? }}rtmp {? ? server {? ? ? ? listen1935;? ? ? ? ping30s;? ? ? ? notify_method get;? ? ? ? application myapp {? ? ? ? ? ? live on;? ? ? ? }? ? }}
設(shè)置完成之后舷胜,重啟nginx服務(wù)器:
sudo /usr/local/nginx/sbin/nginx -s stop
sudo /usr/local/nginx/sbin/nginx
最后準(zhǔn)備一個(gè)MP4文件進(jìn)行測試:
使用ffmpeg推送視頻文件到服務(wù)器:
ffmpeg -re -i /var/Videos/test.mp4 -c copy -f flv rtmp://localhost/myapp/mystream
最后再訪問我們的直播地址:
ffplay rtmp://localhost/myapp/mystream
作者:一點(diǎn)簡單
鏈接:http://www.reibang.com/p/fad4eb24a9bc
來源:簡書
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)翻伺,非商業(yè)轉(zhuǎn)載請注明出處。