著5G網(wǎng)絡(luò)的悄然到來,視頻服務(wù)獲將成為下一個(gè)流量風(fēng)口,作為程序員的我們當(dāng)然也不能落后,下面開始學(xué)習(xí)如何搭建一個(gè)視頻服務(wù)器吧。
本教程是基于window10 X 64位系統(tǒng)的
nginx nginx-rtmp-module obs sublime vlc播放器
windows 版的nginx 直接解壓至文件夾即可
cmd 進(jìn)入nginx 啟動(dòng)nginx
nginx.exe -c conf\nginx-win.conf
默認(rèn)配置是
listen 80;#監(jiān)聽80端口 server_name 127.0.0.1;
啟動(dòng)后訪問 127.0.0.1 出現(xiàn)如下頁(yè)面,說明啟動(dòng)成功
用sublime打開nginx\conf目錄下的nginx-win-rtmp.conf配置文件
添加如下配置
rtmp { server { listen 1935; chunk_size 4000; application live { live on; hls on; #開啟hls hls_path D:\\temp;#視頻切片地址 hls_fragment 15s ; wait_key on; #對(duì)視頻切片進(jìn)行保護(hù),這樣就不會(huì)產(chǎn)生馬賽克了。 hls_playlist_length 60s; #總共可以回看的事件,這里設(shè)置的是1分鐘。 hls_continuous on; #連續(xù)模式。 hls_cleanup on; #對(duì)多余的切片進(jìn)行刪除。 hls_nested on; #嵌套模式。 hls_fragment_naming system;#設(shè)置切片時(shí)間戳 } } }
在http server中添加如下配置
location /live { #這里也是需要添加的字段。 types { application/x-mpegURL video/mp2t ts; } alias D:\\temp; expires -1; add_header Cache-Control no-cache; } location /stat { rtmp_stat all; rtmp_stat_stylesheet stat.xsl; } location /stat.xsl { root nginx-rtmp-module/; } location /control { rtmp_control all; }
保存配置文件
重新啟動(dòng)nginx
nginx.exe -c conf\nginx-win-rtmp.conf
打開obs軟件調(diào)試好場(chǎng)景后,進(jìn)入設(shè)置頁(yè)面
設(shè)置推流地址
關(guān)閉windows防火墻,防止推流端口被屏蔽
點(diǎn)擊主頁(yè)開始推流
我們使用vlc視頻播放器進(jìn)行拉流測(cè)試
1、設(shè)置拉流地址
rtmp://127.0.0.1:1935/live/home
設(shè)置成功后點(diǎn)擊播放視頻能正常播放則說明視頻服務(wù)器搭建成功
播放成功
至此視頻直播服務(wù)器搭建完成了
配置好的nginx 服務(wù)已打包上傳至網(wǎng)盤
關(guān)注后,私信回復(fù)“視頻服務(wù)”即可獲取
下載后直接解壓,cmd進(jìn)入nginx目錄,輸入 nginx.exe -c conf\nginx-win-rtmp.conf 啟動(dòng)服務(wù)
服務(wù)啟動(dòng)后訪問相關(guān)web頁(yè)面,直接訪問即可播放直播視頻
近,國(guó)家政策開始鼓勵(lì)“地?cái)偨?jīng)濟(jì)”,一時(shí)間各家企業(yè)平臺(tái)紛紛推出地?cái)偡龀终撸財(cái)偢拍罟身槃?shì)大漲,地?cái)偵鷳B(tài)及配套商品也開始走俏,甚至在網(wǎng)絡(luò)上也涌現(xiàn)出各種“新攤主速成攻略”,萬億的煙火經(jīng)濟(jì)儼然已經(jīng)走上風(fēng)口。
實(shí)際上,早就有人已經(jīng)在網(wǎng)上“擺地?cái)偂绷耍蔷褪侵辈ж洠∈艿揭咔榈挠绊懀€下實(shí)體紛紛停擺,直播帶貨受到了前所未有的追捧,企業(yè)們紛紛選擇通過直播的形式,來提升品牌形象、保持與用戶的互動(dòng)并完成商品的銷售。
那么問題就來了,在搭建直播平臺(tái)或者應(yīng)用的過程中,都需要關(guān)注哪些技術(shù)呢?CDN又對(duì)直播起到什么作用呢?
通常整個(gè)直播的系統(tǒng)可能包括:推流端經(jīng)過一次邊緣節(jié)點(diǎn)的加速,將視頻直播流推到直播中心,在直播中心完成一系列轉(zhuǎn)碼、截圖、錄制、水印等處理,然后視頻流再經(jīng)過CDN分發(fā),分發(fā)到不同的播放端,播放端有不同的SDK進(jìn)行秒開、弱網(wǎng)等優(yōu)化動(dòng)作。
對(duì)于視頻直播來講,最重要的兩個(gè)環(huán)節(jié),一個(gè)是推流,一個(gè)是播放。推流一般采用RTMP協(xié)議,常用的推流端包括OBS、手機(jī)APP、FFmpeg等。播放除了采用RTMP協(xié)議,還可以采用HTTP FLV和HLS協(xié)議,RTMP和HTTP FLV是流式傳輸,HLS是文件加速傳輸,常見的播放端包括:Flash / VLC / HTML5 / 手機(jī)App等等。對(duì)于阿里云直播系統(tǒng)來講,大部分直播分發(fā)都是通過流式傳輸完成的,只有一少部分量是使用文件加速分發(fā)完成的。
其實(shí)在直播場(chǎng)景中,不管是推流還是播放,流式分發(fā)都是長(zhǎng)連接的,一場(chǎng)直播可能5個(gè)小時(shí),推流在這5小時(shí)內(nèi)不會(huì)中斷。對(duì)于播放器來講,服務(wù)器端獲取到的是一幀一幀的音視頻數(shù)據(jù),不管是什么傳輸協(xié)議,都是采用FLV tag來封裝。每一幀音頻或者視頻,都會(huì)有一個(gè)時(shí)間戳的屬性。
視頻直播流會(huì)傳輸音頻幀和視頻幀,對(duì)于音頻幀來講,它每一幀都可以獨(dú)立解碼,播放器從服務(wù)器獲取到任何一幀音頻幀之后,都可以獨(dú)立渲染,聽到聲音。而視頻分為視頻關(guān)鍵幀和非關(guān)鍵幀,關(guān)鍵幀可以獨(dú)立解碼渲染,播放器拿到后可以直接看到畫面,一般10K以上甚至幾十K;其他非關(guān)鍵幀解碼依賴于前面的一些視頻幀,播放器會(huì)根據(jù)前面的幀和這一幀來解碼產(chǎn)生畫面,非關(guān)鍵幀一般大小是幾K甚至不到1K。對(duì)于播放器來說,服務(wù)器一般會(huì)從視頻關(guān)鍵幀開始發(fā)送,這樣才不會(huì)產(chǎn)生花屏。
對(duì)于節(jié)點(diǎn)上直播服務(wù)器存儲(chǔ)的內(nèi)容,如果是文件加速,節(jié)點(diǎn)上存儲(chǔ)的內(nèi)容很明確,就是文件數(shù)據(jù), URL不變的話文件數(shù)據(jù)內(nèi)容也不變。但是對(duì)于直播來講,傳輸?shù)木褪菐瑪?shù)據(jù),緩存的也是不斷變化的幀序列數(shù)據(jù)。下面的圖里可以看到,當(dāng)前的服務(wù)器緩存了V1-V3五幀數(shù)據(jù),當(dāng)V4這個(gè)關(guān)鍵幀出現(xiàn)了,服務(wù)器把之前的丟掉,開始緩存V4開始的音視頻數(shù)據(jù),以這個(gè)策略保證過來的播放端都是當(dāng)前最新的數(shù)據(jù)。一般直播服務(wù)器都是用這個(gè)策略來進(jìn)行服務(wù)器緩存的。
1、 前面也說了,直播系統(tǒng)包含推流、轉(zhuǎn)碼、分發(fā)、播放等各個(gè)環(huán)境,經(jīng)歷了冗長(zhǎng)復(fù)雜的網(wǎng)絡(luò)環(huán)境,尤其是當(dāng)業(yè)務(wù)場(chǎng)景逐漸豐富起來之后,功能需求也越來越多2、 一些關(guān)鍵指標(biāo)的提升,比如:卡頓率、打開速度、流暢度、回源率等,任何指標(biāo)的下降都可能會(huì)導(dǎo)致整個(gè)應(yīng)用的用戶體驗(yàn)下降,影響直播效果3、 直播平臺(tái)經(jīng)常會(huì)面臨業(yè)務(wù)突發(fā),數(shù)十萬甚至數(shù)百萬用戶的同時(shí)在線,對(duì)服務(wù)器和帶寬考驗(yàn)十分巨大
直播,尤其是電商直播,對(duì)網(wǎng)絡(luò)抖動(dòng)十分敏感,稍有問題就會(huì)出現(xiàn)卡頓、花屏等問題,嚴(yán)重影響用戶體驗(yàn),甚至直接掉線影響銷售。CDN借助負(fù)載均衡系統(tǒng)能夠?qū)?nèi)容推送到接近用戶的邊緣節(jié)點(diǎn),使得用戶就近取得資源,可以大大提升訪問效率。
在確保直播流暢度上,全球覆蓋的CDN節(jié)點(diǎn)和精準(zhǔn)調(diào)度系統(tǒng)缺一不可。CDN節(jié)點(diǎn)是采用分布式架構(gòu),節(jié)點(diǎn)資源與帶寬儲(chǔ)備就代表了能夠覆蓋的用戶的量級(jí)和廣度。當(dāng)突發(fā)峰值特別高的時(shí)候,CDN系統(tǒng)會(huì)確保用更精準(zhǔn)的調(diào)度策略,比如DNS、IP調(diào)度,來降低對(duì)直播的影響。打比方有一個(gè)裝了很多冰塊和水的杯子,如果我們要把杯子里面的狹小空間全部用上,我們先要把冰塊放進(jìn)去,再倒液態(tài)水。在智能調(diào)度的場(chǎng)景里,把“固體”和“液體”結(jié)合起來考慮,才能做到所有的節(jié)點(diǎn)、水位的精準(zhǔn)控制,實(shí)現(xiàn)更精準(zhǔn)的調(diào)度。
所以,選擇節(jié)點(diǎn)和帶寬資源覆蓋廣泛,綜合實(shí)力強(qiáng),質(zhì)量有保證,具備大型項(xiàng)目最佳實(shí)踐的CDN服務(wù)提供商對(duì)直播帶貨平臺(tái)來說至關(guān)重要。想要在云上開啟“地?cái)偨?jīng)濟(jì)”,阿里云CDN,了解一下~
阿里云全速重構(gòu)年中大促中,CDN/全站加速、視頻直播、視頻點(diǎn)播等多款產(chǎn)品都推出限時(shí)折扣,點(diǎn)擊登陸活動(dòng)頁(yè)面了解優(yōu)惠詳情
ffmpeg音視頻編解碼
ffplay音視頻播放工具
準(zhǔn)備流媒體服務(wù)器linux
準(zhǔn)備并安裝Nginx服務(wù)
配置RTMP并啟動(dòng)Nginx服務(wù)
sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev
mkdir ~/working
cd ~/working
wget http://nginx.org/download/nginx-1.7.5.tar.gz
wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
sudo apt-get install unzip
tar -zxvf nginx-1.7.5.tar.gz
unzip master.zip
cd nginx-1.7.5
./configure --with-http_ssl_module --add-module=../nginx-rtmp-module-master
make
sudo make install
sudo wget https://raw.github.com/JasonGiedymin/nginx-init-ubuntu/master/nginx -O /etc/init.d/nginx
sudo chmod +x /etc/init.d/nginx
sudo update-rc.d nginx defaults
sudo service nginx start
sudo service nginx stop
sudo apt-add-repository ppa:jon-severinsson/ffmpeg
sudo apt-get update
sudo apt-get install ffmpeg
原文PPA不可用,源碼安裝參見
http://blog.csdn.net/redstarofsleep/article/details/45092145
打開 /usr/local/nginx/conf/nginx.conf
在末尾添加如下 配置
rtmp {
server {
listen 1935; #監(jiān)聽的端口
chunk_size 4000;
application hls { #rtmp推流請(qǐng)求路徑
live on;
hls on;
hls_path /usr/local/nginx/html/hls;
hls_fragment 5s;
}
}
}
sudo service nginx restart
用netstat -an | grep 1935
出現(xiàn)以下信息代表則代表啟動(dòng)nginx/rtmp成功
netstat -an| grep 1935
tcp 0 0 0.0.0.0:1935 0.0.0.0:* LISTEN
16: 使用 客戶端,使用 rtmp協(xié)議進(jìn)行視頻實(shí)時(shí)采集
ffmpeg直播命令:
推流:ffmpeg -re -i 1.mp4 -c copy -f flv rtmp://xxx.xxx.xxx.xxx:1935/hls/1.mp4
拉流:ffmpeg -i rtmp://xxx.xxx.xxx.xxx/1.mp4 -c copy dump.flv
播放音視頻:ffplay rtmp://xxx.xxx.xxx.xxx/hls
ffplay rtmp://xxx.xxx.xxx.xxx/hls
18: 關(guān)于 nginx-rtmp 更多配置
https://github.com/arut/nginx-rtmp-module/wiki/Directives
flashplay播放器地址
http://bbs.chinaffmpeg.com/1.swf
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。