Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
著5G網絡的悄然到來,視頻服務獲將成為下一個流量風口,作為程序員的我們當然也不能落后,下面開始學習如何搭建一個視頻服務器吧。
本教程是基于window10 X 64位系統的
nginx nginx-rtmp-module obs sublime vlc播放器
windows 版的nginx 直接解壓至文件夾即可
cmd 進入nginx 啟動nginx
nginx.exe -c conf\nginx-win.conf
默認配置是
listen 80;#監聽80端口 server_name 127.0.0.1;
啟動后訪問 127.0.0.1 出現如下頁面,說明啟動成功
用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; #對視頻切片進行保護,這樣就不會產生馬賽克了。 hls_playlist_length 60s; #總共可以回看的事件,這里設置的是1分鐘。 hls_continuous on; #連續模式。 hls_cleanup on; #對多余的切片進行刪除。 hls_nested on; #嵌套模式。 hls_fragment_naming system;#設置切片時間戳 } } }
在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; }
保存配置文件
重新啟動nginx
nginx.exe -c conf\nginx-win-rtmp.conf
打開obs軟件調試好場景后,進入設置頁面
設置推流地址
關閉windows防火墻,防止推流端口被屏蔽
點擊主頁開始推流
我們使用vlc視頻播放器進行拉流測試
1、設置拉流地址
rtmp://127.0.0.1:1935/live/home
設置成功后點擊播放視頻能正常播放則說明視頻服務器搭建成功
播放成功
至此視頻直播服務器搭建完成了
配置好的nginx 服務已打包上傳至網盤
關注后,私信回復“視頻服務”即可獲取
下載后直接解壓,cmd進入nginx目錄,輸入 nginx.exe -c conf\nginx-win-rtmp.conf 啟動服務
服務啟動后訪問相關web頁面,直接訪問即可播放直播視頻
近,國家政策開始鼓勵“地攤經濟”,一時間各家企業平臺紛紛推出地攤扶持政策,地攤概念股順勢大漲,地攤生態及配套商品也開始走俏,甚至在網絡上也涌現出各種“新攤主速成攻略”,萬億的煙火經濟儼然已經走上風口。
實際上,早就有人已經在網上“擺地攤”了,那就是直播帶貨!受到疫情的影響,線下實體紛紛停擺,直播帶貨受到了前所未有的追捧,企業們紛紛選擇通過直播的形式,來提升品牌形象、保持與用戶的互動并完成商品的銷售。
那么問題就來了,在搭建直播平臺或者應用的過程中,都需要關注哪些技術呢?CDN又對直播起到什么作用呢?
通常整個直播的系統可能包括:推流端經過一次邊緣節點的加速,將視頻直播流推到直播中心,在直播中心完成一系列轉碼、截圖、錄制、水印等處理,然后視頻流再經過CDN分發,分發到不同的播放端,播放端有不同的SDK進行秒開、弱網等優化動作。
對于視頻直播來講,最重要的兩個環節,一個是推流,一個是播放。推流一般采用RTMP協議,常用的推流端包括OBS、手機APP、FFmpeg等。播放除了采用RTMP協議,還可以采用HTTP FLV和HLS協議,RTMP和HTTP FLV是流式傳輸,HLS是文件加速傳輸,常見的播放端包括:Flash / VLC / HTML5 / 手機App等等。對于阿里云直播系統來講,大部分直播分發都是通過流式傳輸完成的,只有一少部分量是使用文件加速分發完成的。
其實在直播場景中,不管是推流還是播放,流式分發都是長連接的,一場直播可能5個小時,推流在這5小時內不會中斷。對于播放器來講,服務器端獲取到的是一幀一幀的音視頻數據,不管是什么傳輸協議,都是采用FLV tag來封裝。每一幀音頻或者視頻,都會有一個時間戳的屬性。
視頻直播流會傳輸音頻幀和視頻幀,對于音頻幀來講,它每一幀都可以獨立解碼,播放器從服務器獲取到任何一幀音頻幀之后,都可以獨立渲染,聽到聲音。而視頻分為視頻關鍵幀和非關鍵幀,關鍵幀可以獨立解碼渲染,播放器拿到后可以直接看到畫面,一般10K以上甚至幾十K;其他非關鍵幀解碼依賴于前面的一些視頻幀,播放器會根據前面的幀和這一幀來解碼產生畫面,非關鍵幀一般大小是幾K甚至不到1K。對于播放器來說,服務器一般會從視頻關鍵幀開始發送,這樣才不會產生花屏。
對于節點上直播服務器存儲的內容,如果是文件加速,節點上存儲的內容很明確,就是文件數據, URL不變的話文件數據內容也不變。但是對于直播來講,傳輸的就是幀數據,緩存的也是不斷變化的幀序列數據。下面的圖里可以看到,當前的服務器緩存了V1-V3五幀數據,當V4這個關鍵幀出現了,服務器把之前的丟掉,開始緩存V4開始的音視頻數據,以這個策略保證過來的播放端都是當前最新的數據。一般直播服務器都是用這個策略來進行服務器緩存的。
1、 前面也說了,直播系統包含推流、轉碼、分發、播放等各個環境,經歷了冗長復雜的網絡環境,尤其是當業務場景逐漸豐富起來之后,功能需求也越來越多2、 一些關鍵指標的提升,比如:卡頓率、打開速度、流暢度、回源率等,任何指標的下降都可能會導致整個應用的用戶體驗下降,影響直播效果3、 直播平臺經常會面臨業務突發,數十萬甚至數百萬用戶的同時在線,對服務器和帶寬考驗十分巨大
直播,尤其是電商直播,對網絡抖動十分敏感,稍有問題就會出現卡頓、花屏等問題,嚴重影響用戶體驗,甚至直接掉線影響銷售。CDN借助負載均衡系統能夠將內容推送到接近用戶的邊緣節點,使得用戶就近取得資源,可以大大提升訪問效率。
在確保直播流暢度上,全球覆蓋的CDN節點和精準調度系統缺一不可。CDN節點是采用分布式架構,節點資源與帶寬儲備就代表了能夠覆蓋的用戶的量級和廣度。當突發峰值特別高的時候,CDN系統會確保用更精準的調度策略,比如DNS、IP調度,來降低對直播的影響。打比方有一個裝了很多冰塊和水的杯子,如果我們要把杯子里面的狹小空間全部用上,我們先要把冰塊放進去,再倒液態水。在智能調度的場景里,把“固體”和“液體”結合起來考慮,才能做到所有的節點、水位的精準控制,實現更精準的調度。
所以,選擇節點和帶寬資源覆蓋廣泛,綜合實力強,質量有保證,具備大型項目最佳實踐的CDN服務提供商對直播帶貨平臺來說至關重要。想要在云上開啟“地攤經濟”,阿里云CDN,了解一下~
阿里云全速重構年中大促中,CDN/全站加速、視頻直播、視頻點播等多款產品都推出限時折扣,點擊登陸活動頁面了解優惠詳情
ffmpeg音視頻編解碼
ffplay音視頻播放工具
準備流媒體服務器linux
準備并安裝Nginx服務
配置RTMP并啟動Nginx服務
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; #監聽的端口
chunk_size 4000;
application hls { #rtmp推流請求路徑
live on;
hls on;
hls_path /usr/local/nginx/html/hls;
hls_fragment 5s;
}
}
}
sudo service nginx restart
用netstat -an | grep 1935
出現以下信息代表則代表啟動nginx/rtmp成功
netstat -an| grep 1935
tcp 0 0 0.0.0.0:1935 0.0.0.0:* LISTEN
16: 使用 客戶端,使用 rtmp協議進行視頻實時采集
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: 關于 nginx-rtmp 更多配置
https://github.com/arut/nginx-rtmp-module/wiki/Directives
flashplay播放器地址
http://bbs.chinaffmpeg.com/1.swf
*請認真填寫需求信息,我們會在24小時內與您取得聯系。