手把手搭建一套簡單的直播系統

本來,這段時間是不打算寫博客的,因爲生生買了個教訓。這段時間,被市場好好的上了一課,三天時間,我成爲了韭菜,多餘的話,這裏就不說了,等完全下車之後,再好好的寫一次體會。

今天可是四年一遇的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

即可大功告成!!!

那這次就先這樣了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章