日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

rtmp测试地址_超详细搭建多码率测试环境(成为流媒体高手必经之路)

發(fā)布時(shí)間:2023/12/18 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 rtmp测试地址_超详细搭建多码率测试环境(成为流媒体高手必经之路) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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 openssl

4. 安裝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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。