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

1. 背景

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

在這一節中咱們主要是經過nginx+rtmp模塊搭建一個點播服務,就是你有不少視頻文件,想讓其餘人觀看就能夠參考這篇文章,和筆者以前的一篇文章 使用PHP結合Ffmpeg快速搭建流媒體服務實踐 ,應用場景基本一致,不過這篇文章當中不涉及任何代碼,相對來講更加簡單。git

在這個流媒體系列文章當中,已實踐爲主,在文章當中的每一條命令都通過筆者親自運行並提供相關截圖,並說明其中參數的來意,但願可以更好的幫助到讀者。github

2. 運行環境

爲了此服務後期部署到生產環境中,筆者採用docker方式來搭建此服務,而且通常在生產環境中咱們一般使用Linux系統做爲服務器,因此我選擇了Ubuntu這個系統,其餘系統搭建流程基本相似。docker

2.1 docker容器

rtmp服務默認端口是1935,另外安裝nginx後須要進行驗證,須要開放一個http端口,爲了防止和宿主機衝突,這裏咱們使用8081端口;咱們須要將視頻文件拷貝到容器中,所以還須要掛載一個目錄,所以docker容器運行命令以下所示ubuntu

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

命令很執行完成以後,docker返回結果以下圖所示 vim

image
在上圖中中能夠看到已經有一個容器運行了,接着咱們須要進入容器安裝nginx和rtmp模塊,進入容器命令以下所示

docker exec -it video bash
複製代碼

命令執行完成以後,返回信息以下圖所示 segmentfault

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
複製代碼

命令執行以後,返回的信息以下圖所示 bash

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

相關文章
相關標籤/搜索