rtmp测试地址_超详细搭建多码率测试环境(成为流媒体高手必经之路)
0.引言
關(guān)注我的朋友,應(yīng)該都知道,前面我們講解了如何搭建srs流媒體服務(wù)器,鏈接如下。由于srs流媒體服務(wù)器是不支持多碼率測試環(huán)境,所以不能在上次的環(huán)境上繼續(xù)演示。那本篇文章就要給出一個(gè)新方案,就是使用Nginx+Rtmp模塊+Hls來演示,在流媒體服務(wù)器上,如何使用多碼率(實(shí)際項(xiàng)目中,也很多這樣使用)。那就跟我一起好好學(xué)吧。也有很多人寫關(guān)于流媒體文章,但干貨的文章太少,我希望把盡量多的干貨,分享給大家,這樣想學(xué)習(xí)的朋友,才會(huì)進(jìn)步更快。
環(huán)境準(zhǔn)備提醒:
如果你還沒有搭建ubuntu系統(tǒng),那請(qǐng)參考第(4)步。如果ubuntu系統(tǒng)搭建好了,還沒有搭建ffmpeg在win和ubuntu的環(huán)境,請(qǐng)參考第(5)步和第(3)步。如果前面幾步都做好了,一般就可以本文的環(huán)境搭建了。至于第(1)和第(2)步,是針對(duì)srs流媒體服務(wù)器環(huán)境搭建,如果要學(xué)習(xí)hls和srs流媒體服務(wù)器,第(1)和第(2)步是必須要學(xué)習(xí)。
在搭建環(huán)境的過程中,也遇到過不少坑,我把這些坑也在文章中整理出來了,希望能夠幫到大家,如果大家覺得有用,可以關(guān)注,后面還會(huì)有更多實(shí)用的流媒體文章,供大家學(xué)習(xí)。遇到問題一定不要慌,需要思考問題出現(xiàn)在哪里,一個(gè)個(gè)排查。
(1) 手把手搭建流媒體服務(wù)器詳細(xì)步驟
(2) 手把手配置HLS流媒體服務(wù)器
(3) 超詳細(xì)手把手搭建在ubuntu系統(tǒng)的FFmpeg環(huán)境
(4) 最快系統(tǒng)搭建:Vmware、ubuntu18.0及常用軟件安裝
(5) 手把手搭建FFmpeg的Windows環(huán)境
1.搭建多碼率流程
要實(shí)現(xiàn)多碼率測試,主要經(jīng)過以下一些流程。
(1)推流端,推流上去,可以使用obs,ffmpeg或其它推流工具都可以。
(2)流媒體服務(wù)器端,對(duì)推上去的流,轉(zhuǎn)碼,實(shí)現(xiàn)超高清,高清,標(biāo)清的碼流。如暫定300kB碼流是超高清,200kB是高清,100Kb是標(biāo)清。同時(shí),帶寬也是需要配置,也就是說,根據(jù)不同的帶寬來拉取不同碼率的流。
(3)使用ffplay或其它播放工具去拉取碼流,在播放端可以自由選擇或單獨(dú)拉取超高清,高清,標(biāo)清。實(shí)現(xiàn)了市面上很多播放器的自適應(yīng)方案。如果使用ffplay播放,ffplay里的快捷鍵使用如下,如按鍵盤的“C”鍵可以切換碼流。ffplay快捷鍵,如下圖所示:
master列表,代表有不同碼率。
根據(jù)master列表,找到真正的playlist,如下圖:
2 搭建nginx-rtmp開源項(xiàng)?
(1) 關(guān)于項(xiàng)目搭建,一定要知道這個(gè)地址,可以在原生的基礎(chǔ)上,支持flv-module。相當(dāng)于(1)是在(2)的基礎(chǔ)上做的二次開發(fā)。如下:
nginx-http-flv-module(增加新功能)地址:https://github.com/winshining/nginx-http-flv-module
其github界面如下:
(2)關(guān)于nginx-rtmp-module(功能要少),原來的官網(wǎng)地址如下。
nginx-rtmp-module(功能要少)地址:https://github.com/arut/nginx-rtmp-module。
其github界面如下:
(3) nginx-http-flv-module的其他功能與nginx-rtmp-module的對(duì)?,對(duì)比看看,在原生的基礎(chǔ)上,增加了哪些新功能。圖中" 根號(hào)"表示新增加功能,"X"表示原生不支持,對(duì)比下,就知道這個(gè)新增加的功能還是很實(shí)用的。如果你有更好的方案,可以告訴我,我們一起交流。如下圖:
3. 安裝依賴庫
安裝系統(tǒng)相關(guān)的依賴庫。如果你的系統(tǒng)都已經(jīng)具備了這些庫,可以不用理會(huì)。也可以先安裝后面的步驟,如果發(fā)現(xiàn)缺少庫,再回來安裝這些庫。命令如下:
sudo apt-get update#安裝依賴:gcc、g++依賴庫sudo apt-get install build-essential libtool #安裝 pcre依賴庫(http://www.pcre.org/) sudo apt-get install libpcre3 libpcre3-dev#安裝 zlib依賴庫(http://www.zlib.net)sudo apt-get install zlib1g-dev#安裝ssl依賴庫sudo apt-get install openssl4. 安裝nginx-http-flv-module
安裝nginx-http-flv-module,也就是前面所說的,增加了很多新功能的版本。
(1)打開ubuntu系統(tǒng),在相應(yīng)的目錄下,創(chuàng)建相應(yīng)的文件,如我創(chuàng)建的如下:
執(zhí)行命令:
mkdir rtmp-nginx
執(zhí)行界面如下:
(2)進(jìn)入上面創(chuàng)建的文件夾,下載nginx-http-flv-module
執(zhí)行命令:
cd rtmp-nginx
執(zhí)行界面如下:
(3)下載nginx-http-flv-module,執(zhí)行命令:
git clone https://github.com/winshining/nginx-http-flv-module.git
執(zhí)行界面如下:
下載完后,界面如下:
注意:如果下載過程中,網(wǎng)絡(luò)較慢,耐心等待。
(4) 查看當(dāng)前目錄是否有,執(zhí)行命令:
ls
界面如下:
(5)在當(dāng)前目錄,下載nginx
在下載nginx之前,一定要安裝ssl,否則會(huì)出錯(cuò)。這里先給出本小節(jié)所有的命令,后面再逐一演示。
#下載nginx 1.19.2版本wget http://nginx.org/download/nginx-1.19.2.tar.gz tar xvzf nginx-1.19.2.tar.gz cd nginx-1.19.2/ # 配置,?定要?持https,安裝目錄可以實(shí)時(shí)修改 ./configure --prefix=/usr/local/rtmp-nginx --with-http_ssl_module--add-module=/home/qaa/share/rtmp-nginx/nginx-http-flv-module # 編譯 make#安裝 sudo make install 最終安裝到?錄:/usr/local/rtmp-nginx/nginx 目的:主要是避免和原有的nginx有沖突(如果你系統(tǒng)還有其它版本)(6)下載nginx 1.19.2版本
執(zhí)行命令:
wget http://nginx.org/download/nginx-1.19.2.tar.gz
界面如下:
(7) 在當(dāng)前目錄下,查看是否有下載到當(dāng)前目錄。
執(zhí)行命令:
ls
界面如下:
(8) 在當(dāng)前目錄下,解壓下載好的nginx,執(zhí)行解壓命令:
tar xvzf nginx-1.19.2.tar.gz
界面如下:
(9) 解壓完成后,執(zhí)行命令:
ls
如下界面:
(10) 進(jìn)入nginx-1.19.2目錄下,執(zhí)行命令:
cd nginx-1.19.2/
如下界面:
(11) 創(chuàng)建nginx安裝目錄,目的是為了與以前默認(rèn)安裝在系統(tǒng)目錄的nginx或其它版本的nginx,做區(qū)分,在如下路徑,執(zhí)行命令:
mkdir rtmp-nginx
如下界面:
(12)回到目錄/home/qaa/share/rtmp-nginx/nginx-1.19.2,并執(zhí)行如下命令:
./configure --prefix=/usr/local/rtmp-nginx --with-http_ssl_module --add-module=/home/qaa/share/rtmp-nginx/nginx-http-flv-module
如下界面:
注意:添加module的目錄,一定要配置正確,否則就有可能出錯(cuò)。
如下界面,就是應(yīng)為目錄指定錯(cuò)誤而出了如下錯(cuò)誤。
(13)繼續(xù)在當(dāng)前目錄,編譯,執(zhí)行命令:
make
執(zhí)行界面如下:
編譯過程,耐心等待。
編譯完成后,如下提示:
(14)繼續(xù)在當(dāng)前目錄,執(zhí)行命令:
sudo make install
執(zhí)行界面:
注意這個(gè)安裝目錄就是之前創(chuàng)建的目錄(/usr/local/rtmp-nginx),如下:
如果出現(xiàn)如下界面,就代表安裝成功了,并且與以前的nginx版本不沖突。具體的執(zhí)行的路徑就在sbin目錄下。
(15) 在當(dāng)前目錄下,修改配置文件。
執(zhí)行如下命令
vim conf/nginx.conf
修改為如下:
目前是測試環(huán)境,可以配置為前臺(tái)運(yùn)行,查看相關(guān)log信息。如果需要后臺(tái)運(yùn)行可以不修改。
新增 daemon off,就可以配置為前臺(tái)運(yùn)行。
(16) 在當(dāng)前目錄,啟動(dòng)nginx。
執(zhí)行如下命令:
sudo sbin/nginx -c conf/nginx.conf
如下界面:
(17) 啟動(dòng)成功后,我們測試nginx是否安裝成功,在瀏覽器這里測試下。
輸入地址:
http://172.16.204.133:80/
成功安裝nginx后的界面如下:
如果出現(xiàn)如下錯(cuò)誤,表示端口號(hào)被占用,需要修改配置文件的端口號(hào)。
錯(cuò)誤提示如下:
修改配置文件的端口為8081。
(18)Nginx命令相關(guān)
如果需要停止nginx,可以執(zhí)行如下命令:
sudo /usr/local/nginx/rtmp-nginx/sbin/nginx -s stop
如果要重新加載配置文件,可以執(zhí)行如下命令:
sudo /usr/local/rtmp-nginx/nginx/sbin/nginx -s reload
5.配置?件
(1)配置文件,這一步很關(guān)鍵,我先把配置文件(實(shí)測可行)給出來,如下,后面再做詳細(xì)解釋。在ubuntu下一定要注意nginx.conf文件書寫格式,否則可能沒辦法拉流。我就碰到過一個(gè)坑,就是能夠拉取rtmp流,不能拉取hls流,后來發(fā)現(xiàn)就是格式問題。
daemon off;# 如果開啟off對(duì)應(yīng)的ts文件不并刪除# master_process off; user root;error_log /tmp/error.log debug;events{ worker_connections 1024;}rtmp{ server { listen 1935; chunk_size 4000; #live application live { live on; exec /root/bin/ffmpeg -i rtmp://localhost/live/$name -c:a copy -c:v libx264 -b:v 300K -g 30 -f flv rtmp://localhost/hls/$name_hi-c:a copy -c:v libx264 -b:v 200K -g 30 -s 462x254 -f flv rtmp://localhost/hls/$name_mid-c:a copy -c:v libx264 -b:v 100K -g 30 -s 230x128 -f flv rtmp://localhost/hls/$name_low; } application hls { live on; hls on; hls_path /tmp/hls; hls_nested on; hls_fragment 2s; hls_playlist_length 6s; hls_variant _hi BANDWIDTH=350000; hls_variant _mid BANDWIDTH=250000; hls_variant _low BANDWIDTH=150000; } }}#HTTPhttp{ server { listen 8081; #welcome location / { root html; index index.html index.htm; } #hls location /hls { types { application/vnd.apple.mpegusr m3u8; video/mp2t ts; } #root /tmp; alias /tmp/hls; add_header Cache-Control no-cache; } }}(2)解析配置文件,上面這些配置文件,究竟是干什么呢?作用是什么呢?
首先來看看rtmp模塊的配置,如下圖:
用不同顏色的線連接起來的都是一一對(duì)應(yīng)。
listen 1935:表示rtmp服務(wù)默認(rèn)監(jiān)聽的端口號(hào)。
application live:表示直播應(yīng)用。這里面就是使用ffmpeg做的轉(zhuǎn)碼,不停地把視頻轉(zhuǎn)碼為超高清,高清,標(biāo)清,三份碼流。
$name:表示節(jié)目名稱,這里指的是livestream。
application hls:表示hls應(yīng)用,與application live中的rtmp://localhost/hls/$name_xxx,一一對(duì)應(yīng)。其中hls_variant _hi與application live中的rtmp://localhost/hls/$name_hi也是一一對(duì)應(yīng)。hls應(yīng)用中BANDWIDTH=350000,這里與m3u8文件的BANDWIDTH=350000是一一對(duì)應(yīng)。
(3)然后,再看看HTTP模塊,配置文件如下圖所示:
listen 8081:http模塊監(jiān)聽的端口號(hào),默認(rèn)是80,這里做了修改。
location /:這是使用瀏覽器訪問http,出現(xiàn)默認(rèn)的網(wǎng)頁(html和index.html),比如如下圖所示:
location /hls:這里與流地址http://xxx:端口號(hào)/hls/livestream.m3u8是一一對(duì)應(yīng)。
types:表示m3u8和ts文件類型。
alias /tmp/hls:表示存放m3u8和ts文件路徑。
(4) 進(jìn)入當(dāng)前如下目錄
/usr/local/rtmp-nginx/conf
執(zhí)行命令
vim nginx.conf
參照上面的配置文件,對(duì)nginx.conf進(jìn)行修改。
界面如下:
注意:由于修改前后的配置文件,還是有些差別,所以為了保險(xiǎn)起見,就把原來的配置文件,進(jìn)行備份。源文件和備份文件,分別是,如下界面。
通過ffmpeg命令行去轉(zhuǎn)碼,轉(zhuǎn)成不同的碼率。這里的音頻并沒有做修改,只是把視頻做了三份不同碼率的,來模擬超高清,高清,標(biāo)清。
關(guān)于分片需要說明下,如果源碼流,幀率是15幀,gop為30,這個(gè)時(shí)候ts分片至少2秒,因?yàn)榉制辽偈且粋€(gè)完整的gop。下面參數(shù)僅僅供參考,所有參數(shù)都需要根據(jù)實(shí)際的需求去配置。
(5)下面參數(shù)的$name就是livestream,在后面超高清,高清,標(biāo)清的名字就拼接成livestream_hi,livestream_mid,livestream_low。其中rtmp://localhost/hls/$name_low,其中hls對(duì)應(yīng)的就是下面配置的application hls。其中rtmp://localhost/live/$name,其中live對(duì)應(yīng)的就是上面配置的application live。
注意:ffmepg的路徑一定要指定對(duì),否則可能無法生效。我這里ffmpeg的路徑在/root/bin/ffmpeg。
application hls中,大括號(hào)中,hls_path /tmp/hls,表示hls的路徑。如下界面:
注意:如果沒有hls文件夾,那就需要再創(chuàng)建一個(gè)。
(6) 修改好上述配置文件后,那就再重新執(zhí)行nginx。
在如下路徑:
/usr/local/rtmp-nginx
執(zhí)行命令:
sudo sbin/nginx -c conf/nginx.conf
注意:這里修改后配置文件,不能再使用80端口,重新修改端口為8081,再啟動(dòng)。否則會(huì)端口被占用的錯(cuò)誤。
修改端口后正確執(zhí)行:
前臺(tái)啟動(dòng)界面:
6.測試
(1)經(jīng)過前面一番折騰,終于可以測試了。客戶端使用ffmpeg推流。
這里需要搭建win下的ffmpeg開發(fā)環(huán)境,可以看看這篇文章,手把手搭建FFmpeg的Windows環(huán)境
執(zhí)行推流命令:
ffmpeg -re -i time.flv -vcodec copy -acodec copy -f flv -y rtmp://172.16.204.133/live/livestream注意:IP也需要換成你自己的才行。
執(zhí)行界面如下:
(2) RTMP流地址為:
rtmp://172.16.204.133/live/livestream(3) HLS流地址為:
http://172.16.204.133/hls/livestream.m3u8http://172.16.204.133/hls/livestream_hi/index.m3u8(4) 拉流端,可以使用ffplay和vlc進(jìn)行測試。
我這里就使用ffplay拉流,可以拉取到rtmp流。其中命令為:
ffplay rtmp://172.16.204.133/live/livestream
界面如下:
(5) 拉取hls流:
ffplay http://172.16.204.133/hls/livestream.m3u8
超高清界面如下:
高清界面如下:
標(biāo)清界面如下:
可以看到這里超高清,高清,標(biāo)清以及master列表。
注意:使用ffplay拉流,可以按下鍵盤“C”鍵,然后自由切換超高清,高清,標(biāo)清。
執(zhí)行命令:
cd /tmp/hls
ls
界面如下:
(6) 現(xiàn)在隨便進(jìn)入一個(gè)文件。
執(zhí)行命令:
cd livestream_hi
ls
可以看到這里很多ts文件,這里ts的文件是及時(shí)更新,個(gè)數(shù)與上面配置的切片個(gè)數(shù)有關(guān)系,這里設(shè)置的6個(gè)。界面如下:
(7) 再看看其它目錄
執(zhí)行命令
cd livestream_mid
ls
界面如下:
(8) 再看看其它目錄
執(zhí)行命令
cd livestream_low
ls
界面如下:
ffplay拉取的日志界面如下:
(9) 服務(wù)器使用ffmpeg查看轉(zhuǎn)碼命令,實(shí)時(shí)查看ffmpeg是否有在運(yùn)行。
執(zhí)行命令:
sudo ps -ef | grep ffmpeg
要看到如下界面,才說明成功了。否則就是不成功。
使用如下命令,單獨(dú)拉取超高清碼流,也是可以:
執(zhí)行命令:
ffplay http://172.16.204.133/hls/livestream_hi/index.m3u8
拉取的日志界面:
注意:這個(gè)時(shí)候,再按鍵盤"C"鍵是不生效的,因?yàn)槟阋呀?jīng)選定了超高清了,不能再換了。如果要自由切換,那需要上上面的方式。
(10) 如果推流結(jié)束,那么/tmp/hls下的就為空了,ts文件都會(huì)被及時(shí)刪除,也可以配置不刪除。
如下界面:
(11) 在前面配置文件的章節(jié)中,有配置流媒體服務(wù)器日志的路徑,通過命令行可以查看。通過日志文件可以排查和定位問題。
執(zhí)行命令:
tail -f error.log
界面如下:
注意:這里就是上面所說的坑的問題,因?yàn)楦袷綄戝e(cuò),而無法拉取hls流。如果使用右邊書寫有誤的配置文件,ffplay拉流就會(huì)出現(xiàn)如下圖404錯(cuò)誤。
7.碼流切換建議
關(guān)于自適應(yīng)碼率切換,我的建議是,由用戶來選擇,不要幫用戶選擇。當(dāng)網(wǎng)絡(luò)不好時(shí),需要提醒用戶,建議用戶去切換碼流,當(dāng)網(wǎng)絡(luò)良好的時(shí)候嗎,再切換回來。如果幫用戶去切換,通過日志發(fā)現(xiàn),碼流會(huì)頻繁切換,有時(shí)會(huì)造成卡頓的現(xiàn)象。
8.模擬丟包測試
如果需要模擬丟包和延遲測試,作些debug,可以按照如下命令去測試:
//1. 延遲設(shè)置//延遲 300ms ± 100ms sudo tc qdisc add dev eth0 root netem delay 300ms 100mssudo tc qdisc del dev eth0 root netem delay 300ms 100ms// 2. 丟包 //丟包率 5%sudo tc qdisc add dev eth0 root netem loss 30% sudo tc qdisc del dev eth0 root netem loss 5%界面如下:
9.總結(jié)
本文搭建環(huán)境是在前面環(huán)境的基礎(chǔ)上做的,所以需要前面的基礎(chǔ)作為鋪墊。整理這些文章是為了幫助更多想學(xué)流媒體,而又遇到很多困難,而放棄的人。希望能夠幫助更多的人,各位朋友的喜歡,才是我分享的動(dòng)力。
創(chuàng)作、整理實(shí)戰(zhàn)型文章不易,如果覺得對(duì)你或你的朋友有用,可以關(guān)注,轉(zhuǎn)發(fā),點(diǎn)贊,收藏,分享,評(píng)論區(qū)討論。
后期關(guān)于項(xiàng)目的知識(shí),會(huì)在微信公眾號(hào)上更新,如果想要學(xué)習(xí)項(xiàng)目,可以關(guān)注微信公眾號(hào)“記錄世界 from antonio”
總結(jié)
以上是生活随笔為你收集整理的rtmp测试地址_超详细搭建多码率测试环境(成为流媒体高手必经之路)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python字符串添加_python字符
- 下一篇: glibc升级_CentOS7下升级GL