Ubuntu 中使用 Nginx+rtmp 模組搭建流媒體視訊點播服務

湯青松發表於2019-11-28

1. 背景

不知不覺筆者來到流媒體部門已經一年半多了,積攢了不少的流媒體知識,但平時工作也比較忙,很少進行總結性的梳理,最近準備花幾個週末時間寫一個流媒體系列的實踐文章,也算是給自己做總結的同時幫助有需要的開發者;

在這一節中我們主要是通過nginx+rtmp模組搭建一個點播服務,就是你有很多視訊檔案,想讓其他人觀看就可以參考這篇文章,和筆者之前的一篇文章 使用PHP結合Ffmpeg快速搭建流媒體服務實踐 ,應用場景基本一致,不過這篇文章當中不涉及任何程式碼,相對來說更加簡單。

在這個流媒體系列文章當中,已實踐為主,在文章當中的每一條命令都經過筆者親自執行並提供相關截圖,並說明其中引數的來意,希望能夠更好的幫助到讀者。

2. 執行環境

為了此服務後期部署到生產環境中,筆者採用docker方式來搭建此服務,並且一般在生產環境中我們通常使用Linux系統作為伺服器,所以我選擇了Ubuntu這個系統,其他系統搭建流程基本類似。

2.1 docker容器

rtmp服務預設埠是1935,另外安裝nginx後需要進行驗證,需要開放一個http埠,為了防止和宿主機衝突,這裡我們使用8081埠;我們需要將視訊檔案拷貝到容器中,因此還需要掛載一個目錄,因此docker容器執行命令如下所示

docker run --name video -v /Users/tangqingsong/files:/root/videos -d -i -p 8081:8081  -p 1935:1935 ubuntu:18.04 && docker ps

命令很執行完成之後,docker返回結果如下圖所示
image
在上圖中中可以看到已經有一個容器執行了,接著我們需要進入容器安裝nginx和rtmp模組,進入容器命令如下所示

docker exec -it video bash

命令執行完成之後,返回資訊如下圖所示
image
在上圖中從游標位置的左側可以看到已經顯示了root賬戶名稱,說明已經進入容器成功;

2.2 國內加速源

docker的Ubuntu映象apt軟體源預設使用官方域名,這個域名在國內訪問非常慢,為了後續安裝速度能夠更快,我們將apt的軟體源更換成阿里雲源的地址,執行命令如下所示

echo 'deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
' > /etc/apt/sources.list  && cat /etc/apt/sources.list

命令執行之後,返回的資訊如下圖所示
image
從上圖中可以看到已經執行成功,已經使用阿里雲的軟體源替代了預設的軟體源;

2.3 更新軟體源列表

接下來我們更新一下本地的軟體源資訊,執行命令如下所示

apt update

命令執行之後,返回的資訊如下圖所示
image
從上圖中可以看到已經從阿里雲中更新了軟體源資訊,更新速度也非常快,到此我們已經完成執行環境的基礎準備。

3 Nginx安裝

在我們準備好系統環境之後,我們就需要開始安裝Nginx了,安裝Nginx我們需要先把他的依賴給安裝,然後下載相關的原始碼進行編譯,最後執行編譯安裝

3.1 安裝Nginx依賴

在我們更新apt軟體源完成之後,就可以安裝Nginx等一些軟體的依賴環境,執行的命令如下所示

apt-get install -y libpcre3 libpcre3-dev libssl-dev zlib1g-dev gcc  wget unzip vim make curl

安裝的依賴軟體有點多,會根據你的網速安裝速度也不一樣,命令執行之後,返回的資訊如下圖所示
image
從上圖中可以看到依賴已經安裝完成,接下來我們開始安裝nginx,nginx不能使用apt安裝,需要原始碼編譯安裝才可以,因為需要我們編譯一個模組進去

3.2 下載原始碼

我們首先將需要的模組下載下來,這裡我不準備使用nginx-rtmp-module,而是使用nginx-http-flv-module來替代,因為後者是基於前者開發的,前者擁有的功能後者都有,後者是國內的開發開發,有中文文件,所以就採用它了,首先將它下載下來並解壓,執行的命令如下所示

wget https://github.com/winshining/nginx-http-flv-module/archive/master.zip ; unzip master.zip

命令執行之後,返回的資訊如下圖所示
image
從上圖中可以看出已經下載並解壓完成,接著我們還需要下載nginx本身的原始碼,下載Nginx原始碼並解壓的命令如下所示

wget http://nginx.org/download/nginx-1.17.6.tar.gz  && tar -zxvf nginx-1.17.6.tar.gz

命令執行之後,返回的資訊如下圖所示
image
下載並解壓完成,到此我們兩個所需要的原始碼都準備完成

3.3 編譯安裝

接著我們進入編譯安裝環節,首先進入剛才解壓的nginx目錄當中,執行的命令如下所示

cd  nginx-1.17.6 && ls

命令執行之後,返回的資訊如下圖所示
image
從上圖中可以看到解壓出來的目錄結構,我們執行./configure便可以配置編譯引數,這個地方我們需要將剛才下載的外掛nginx-http-flv-module加入進來,執行的命令如下所示

./configure --add-module=../nginx-http-flv-module-master

命令執行之後,返回的資訊如下圖所示
image
在上圖中可以看到準備編譯已經完成,但在編譯的過程當中有可能會出現一些意外因素,nginx預設編譯非常嚴格,只要遇到一些意外就會中斷編譯,因此我們將一些非致命的意外設定為警告模式,執行命令如下所示

vim objs/Makefile

在當前資料夾下有一個objs/Makefile檔案,我們將裡面的-Werror刪除,用vim開啟檔案後如下所示

命令執行之後,返回的資訊如下圖所示
image

刪除之後,儲存並退出,接著就可以進行編譯Nginx了,編譯的過程稍微有點長,執行的命令如下所示

make 

命令執行之後,返回的資訊如下圖所示
image
在上圖中可以看到一些Nginx的一些日誌存放路徑資訊,當我們執行安裝命令後,就會往這些檔案裡寫入相應資訊,執行安裝命令如下所示

make install

安裝命令執行之後,返回的資訊如下圖所示
image
在上圖中可以可以看到安裝過程大致執行了哪些命令,安裝完成後接下來需要進行一些簡單的配置就可以使用了

4. 配置rtmp服務

在完成Nginx的安裝之後,我們需要對Nginx進行一番配置,並啟動Nginx服務

4.1 新增rtmp服務

我們直接使用vim命令去編輯Nginx的配置檔案,執行命令如下所示

vim /usr/local/nginx/conf/nginx.conf

vim命令執行之後,開啟的編輯視窗如下所示
image
我們將以下配置資訊複製並貼上到配置檔案資訊裡面,放在http配置上面

rtmp {                #RTMP服務
   server {
       listen 1935;  #//服務埠
        chunk_size 4096;   #//資料傳輸塊的大小

        application vod {
                play /opt/video/vod; #//視訊檔案存放位置。
        }
   }
}

4.2 驗證配置

貼上完成並儲存之後,我們在終端執行nginx -t命令,來測試一下配置檔案是否有異常,執行命令如下所示

/usr/local/nginx/sbin/nginx -t

命令執行之後,返回的資訊如下圖所示
image
在上圖中可以看出Nginx提示我們配置檔案沒有異常,說明我們配置沒有語法錯誤,我們啟動一下Nginx並使用curl命令來測試啟動是否成功,執行命令如下所示

/usr/local/nginx/sbin/nginx && curl http://127.0.0.1

命令執行之後,返回的資訊如下圖所示
image
從上圖中Nginx返回的資訊可以看出我們Nginx服務已經啟動成功

5 視訊播放

在上述環節都操作完畢之後,此時基本都處於正常,現在我們就可以開始來播放視訊了,不過我們還需要在視訊目錄下放一個視訊檔案,這樣才能播放到這個視訊

5.1 新增視訊檔案

接著我們建立一個存放視訊的資料夾,並將許可權設定設定為777,防止因為許可權問題導致無法播放,執行命令如下所示

mkdir -p /opt/video/vod  && chmod -R 777 /opt/video/vod

命令執行之後,返回的資訊如下圖所示
image
在上圖中可以看出,建立資料夾和設定許可權命令已經執行完成,接著我們需要將我們準備好的視訊檔案複製到我們之前配置指定的目錄下,執行命令如下所示

cp /root/videos/out.mp4 /opt/video/vod &&  ls /opt/video/vod

命令執行之後,返回的資訊如下圖所示
image
在上圖中可以看出,已經將視訊檔案out.mp4檔案複製到此目錄中,接著我們就可以測試播放了;不過在測試播放之前我們需要安裝一個視訊播放器,因為瀏覽器是不支援rtmp協議。

5.2 安裝VLC播放器

一般用於除錯流媒體我們習慣使用vlc播放器,我們去官網下載一下他,官網地址如下

https://www.videolan.org/

使用瀏覽器開啟官網後,我們在首頁能看到下載按鈕,同時也可以看出支援各種平臺,預設下載當前系統的版本,如下圖所示

image

下載並安裝vlc播放器完成後,我們需要在選單中找到File->Open Network,如下圖所示

image

點選Open Network選項後,會開啟一個新的視窗,在這個視窗中我們可以輸入我們的播放地址,我剛才複製過去的視訊播放地址對應如下所示

rtmp://localhost/vod/out.mp4

image

在上圖中可以看到視窗中有一個輸入框,將播放地址複製進去之後,點選右下方的open按鈕,就可以開始播放了,點選後成功播放效果下圖所示

image
此次通過Nginx+rtmp模組搭建點播服務已經成功了,在下一篇文章中我將搭建直播服務,歡迎關注我的部落格~


作者:湯青松

日期:2019-11-28

微信:songboy8888

相關文章