本來,這段時間是不打算寫博客的,因爲生生買了個教訓。這段時間,被市場好好的上了一課,三天時間,我成爲了韭菜,多餘的話,這裏就不說了,等完全下車之後,再好好的寫一次體會。
今天可是四年一遇的2.29,所以這次還是要寫一篇,紀念一下這個日子,順便從被當韭菜的身份中,逃離出來。
本次用ngix+rtmp+ffmpeg
搭建一個流媒體服務器
,實現簡單的直播效果
。
Nginx
是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器。 nginx-rmtp-module
是Nginx服務器的流媒體插件。nginx
通過rtmp
模塊提供rtmp
服務,ffmpeg
推送一個rtmp
流到nginx
, 然後客戶端通過訪問nginx
來收看實時視頻流
不管怎麼樣,還是要微笑的面對呀!
一、目前直播產品的種類
- 泛娛樂化直播
- 花椒、映客等娛樂主播,還有鬥魚等遊戲直播 - 實時互動直播
- 音視頻會議、教育直播等,像釘釘,騰訊會議
1.目前泛娛樂化直播架構
2.實時互動直播架構
補充知識:CDN網絡
1.網站的一般訪問模式
首先看一下網站的一般訪問模式。
當一個用戶想訪問一個網站的時候,指定這個網站的域名,DNS 就會將這個域名解析爲地址,然後用戶請求這個地址,返回一個網頁。就像你要買個東西,首先要查找商店的位置,然後去商店裏面找到自己想要的東西,最後拿着東西回家。
CDN,Content Delivery Network,內容提供(分發)網。
2.使用“中間倉庫”來優化
例如你去電商網站下單買個東西,這個東西一定要從電商總部的中心倉庫送過來嗎?原來基本是這樣的,每一單都是單獨配送,所以你可能要很久才能收到你的寶貝。但是後來電商網站的物流系統學聰明瞭,他們在全國各地建立了很多倉庫,而不是隻有總部的中心倉庫纔可以發貨。
電商網站根據統計大概知道,北京、上海、廣州、深圳、杭州等地,每天能夠賣出去多少書籍、衛生紙、包、電器等存放期比較長的物品。這些物品用不着從中心倉庫發出,所以平時就可以將它們分佈在各地倉庫裏,客戶一下單,就近的倉庫發出,第二天就可以收到了。
這樣,用戶體驗大大提高。
3.網絡中的“就近配送”
全球有這麼多的數據中心,無論在哪裏上網,臨近不遠的地方基本上都有數據中心。是不是可以在這些數據中心裏部署幾臺機器,形成一個緩存的集羣來緩存部分數據,那麼用戶訪問數據的時候,就可以就近訪問了呢?
當然是可以的。這些分佈在各個地方的各個數據中心的節點,就稱爲邊緣節點。
由於邊緣節點數目比較多,但是每個邊緣節點的集羣規模比較小,不可能緩存下來所有東西,因而可能無法命中。這樣就會在邊緣節點之上,會有區域節點,規模就要更大,緩存的數據會更多,命中的概率也就更大。在區域節點之上是中心節點,規模更大,緩存數據更多。如果還不命中,就只好回源網站訪問了。
二、ngix+rtmp+ffmpeg搭建簡單的流服務器
Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器。 nginx-rmtp-module是Nginx服務器的流媒體插件。nginx通過rtmp模塊提供rtmp服務, ffmpeg推送一個rtmp流到nginx, 然後客戶端通過訪問nginx來收看實時視頻流
那麼,接下來就是搭建環境了,go,go,go!!!!
爲了快速下載,可替換一下鏡像源。 Ubuntu apt-get 國內鏡像源替換 https://blog.csdn.net/qq_21095573/article/details/99736630
1.基於nginx的Linux rtmp服務搭建
- a.下載nginx
wget http://nginx.org/download/nginx-1.15.3.tar.gz
- b.解壓nginx
tar xvf nginx-1.15.3.tar.gz
- **c.下載nginx rtmp模塊 **
wget https://github.com/arut/nginx-rtmp-module/archive/v1.2.1.tar.gz
- d.解壓
tar xvf v1.2.1.tar.gz
- e… 安裝編譯 nginx 所需要的庫
sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev
- f.進行nginx目錄
cd nginx-1.15.3
- g.執行 #–add-module 指向rtmp模塊目錄
./configure --prefix=./bin --add-module=../nginx-rtmp-module-1.2.1
- h.編譯安裝在當前目錄的bin目錄下
make&&make install
在當前目錄 執行 bin/sbin/nginx
即可啓動
bin/sbin/nginx -s stop
停止
在瀏覽器輸入 【IP】:8080
注意:
需要注意的是目錄與端口是否被佔用,比如如果8080端口被佔用,可改爲8081,然後需要開放端口。
端口占用檢查: lsof -i:8080
2.FFmpeg
FFmpeg的安裝有兩種方式:一種是簡單的,另外一種是稍微複雜點。
a.簡單安裝方式
先來簡單的,三步走
第一步:添加源。
sudo add-apt-repository ppa:djcj/hybrid
第二步:更新源。
sudo apt-get update
第三步:下載安裝。
sudo apt-get install ffmpeg
b.複雜安裝方式
第一步,支持庫的安裝
sudo apt-get install -y autoconf automake build-essential git libass-dev libfreetype6-dev libsdl2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo wget zlib1g-dev
apt install libavformat-dev
apt install libavcodec-dev
apt install libswresample-dev
apt install libswscale-dev
apt install libavutil-dev
apt install libsdl1.2-dev
sudo apt-get install yasm
第二步,x264
gir clone https://github.com/qupai/x264
cd x264
./configure --enable-shared --enable-pthread --enable-pic
make
make install
第三步,ffmpeg
官網下載:http://www.ffmpeg.org/download.html
tar -jxvf ffmpeg-4.1.tar.bz2
cd ffmpeg-4.1
./configure --enable-libx264 --enable-gpl --enable-shared --extra-cflags=-I/usr/local/include --extra-ldflags=-L/usr/local/lib --enable-pic
make
sudo make install
export LD_LIBRARY_PATH=/usr/local/ffmpeg/lib:$LD_LIBRARY_PATH
ldd ffmpeg
問題:
如果遇到這個問題:
ffmpeg: error while loading shared libraries: libavdevice.so.58: cannot open shared object file: No such file or directory
- sudo find / -name libavdevice.so.58 # 找到文件對應地址
- sudo vim /etc/ld.so.conf # 文件尾添加一行 /usr/local/lib
- sudo ldconfig # 執行該句,使上面的文件生效
重新運行ffmpeg -encoders | grep x264會發現安裝成功
安裝成功之後,驗證一下效果,ffmpeg -version
3.推流拉流開始
推流,指的是把採集階段封包好的內容傳輸到服務器的過程,主播端把本地採集的語音視頻流推送到媒體服務器。就是將現場的視頻信號傳到網絡的過程。
接下來演示一下
將主機windows中的媒體文件1.mp4推流到虛擬機Ubuntu的流媒體服務器nginx中,然後在ubuntu下拉流通過ffplayer播放出來這一流程。
Windows下推流:
ffmpeg -i 1.mp4 -f flv rtmp://192.168.8.169/live/room
ubuntu開啓nginx服務
在nginx.conf文件中新增加的下面的內容,增加rtmp功能以及使nginx能具有直播狀態監聽的功能
之後,啓動服務
bin/sbin/nginx
ubuntu拉流播放
ffplay rtmp://192.168.8.169:1935/live/room
即可大功告成!!!
那這次就先這樣了。