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傳回結果如下圖所示
在上圖中中可以看到已經有一個容器運作了,接着我們需要進入容器安裝nginx和rtmp子產品,進入容器指令如下所示
docker exec -it video bash
指令執行完成之後,傳回資訊如下圖所示
在上圖中從光标位置的左側可以看到已經顯示了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
指令執行之後,傳回的資訊如下圖所示
從上圖中可以看到已經執行成功,已經使用阿裡雲的軟體源替代了預設的軟體源;
2.3 更新軟體源清單
接下來我們更新一下本地的軟體源資訊,執行指令如下所示
apt update
從上圖中可以看到已經從阿裡雲中更新了軟體源資訊,更新速度也非常快,到此我們已經完成運作環境的基礎準備。
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
安裝的依賴軟體有點多,會根據你的網速安裝速度也不一樣,指令執行之後,傳回的資訊如下圖所示
從上圖中可以看到依賴已經安裝完成,接下來我們開始安裝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
從上圖中可以看出已經下載下傳并解壓完成,接着我們還需要下載下傳nginx本身的源碼,下載下傳Nginx源碼并解壓的指令如下所示
wget http://nginx.org/download/nginx-1.17.6.tar.gz && tar -zxvf nginx-1.17.6.tar.gz
下載下傳并解壓完成,到此我們兩個所需要的源碼都準備完成
3.3 編譯安裝
接着我們進入編譯安裝環節,首先進入剛才解壓的nginx目錄當中,執行的指令如下所示
cd nginx-1.17.6 && ls
從上圖中可以看到解壓出來的目錄結構,我們執行
./configure
便可以配置編譯參數,這個地方我們需要将剛才下載下傳的插件
nginx-http-flv-module
加入進來,執行的指令如下所示
./configure --add-module=../nginx-http-flv-module-master
在上圖中可以看到準備編譯已經完成,但在編譯的過程當中有可能會出現一些意外因素,nginx預設編譯非常嚴格,隻要遇到一些意外就會中斷編譯,是以我們将一些非緻命的意外設定為警告模式,執行指令如下所示
vim objs/Makefile
在目前檔案夾下有一個
objs/Makefile
檔案,我們将裡面的
-Werror
删除,用vim打開檔案後如下所示
删除之後,儲存并退出,接着就可以進行編譯Nginx了,編譯的過程稍微有點長,執行的指令如下所示
make
在上圖中可以看到一些Nginx的一些日志存放路徑資訊,當我們執行安裝指令後,就會往這些檔案裡寫入相應資訊,執行安裝指令如下所示
make install
安裝指令執行之後,傳回的資訊如下圖所示
在上圖中可以可以看到安裝過程大緻執行了哪些指令,安裝完成後接下來需要進行一些簡單的配置就可以使用了
4. 配置rtmp服務
在完成Nginx的安裝之後,我們需要對Nginx進行一番配置,并啟動Nginx服務
4.1 添加rtmp服務
我們直接使用
vim
指令去編輯Nginx的配置檔案,執行指令如下所示
vim /usr/local/nginx/conf/nginx.conf
vim指令執行之後,打開的編輯視窗如下所示
我們将以下配置資訊複制并粘貼到配置檔案資訊裡面,放在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
在上圖中可以看出Nginx提示我們配置檔案沒有異常,說明我們配置沒有文法錯誤,我們啟動一下Nginx并使用curl指令來測試啟動是否成功,執行指令如下所示
/usr/local/nginx/sbin/nginx && curl http://127.0.0.1
從上圖中Nginx傳回的資訊可以看出我們Nginx服務已經啟動成功
5 視訊播放
在上述環節都操作完畢之後,此時基本都處于正常,現在我們就可以開始來播放視訊了,不過我們還需要在視訊目錄下放一個視訊檔案,這樣才能播放到這個視訊
5.1 添加視訊檔案
接着我們建立一個存放視訊的檔案夾,并将權限設定設定為777,防止因為權限問題導緻無法播放,執行指令如下所示
mkdir -p /opt/video/vod && chmod -R 777 /opt/video/vod
在上圖中可以看出,建立檔案夾和設定權限指令已經執行完成,接着我們需要将我們準備好的視訊檔案複制到我們之前配置指定的目錄下,執行指令如下所示
cp /root/videos/out.mp4 /opt/video/vod && ls /opt/video/vod
在上圖中可以看出,已經将視訊檔案
out.mp4
檔案複制到此目錄中,接着我們就可以測試播放了;不過在測試播放之前我們需要安裝一個視訊播放器,因為浏覽器是不支援
rtmp
協定。
5.2 安裝VLC播放器
一般用于調試流媒體我們習慣使用vlc播放器,我們去官網下載下傳一下他,官網位址如下
https://www.videolan.org/
使用浏覽器打開官網後,我們在首頁能看到下載下傳按鈕,同時也可以看出支援各種平台,預設下載下傳目前系統的版本,如下圖所示
下載下傳并安裝vlc播放器完成後,我們需要在菜單中找到
File
->
Open Network
,如下圖所示
點選
Open Network
選項後,會打開一個新的視窗,在這個視窗中我們可以輸入我們的播放位址,我剛才複制過去的視訊播放位址對應如下所示
rtmp://localhost/vod/out.mp4
在上圖中可以看到視窗中有一個輸入框,将播放位址複制進去之後,點選右下方的
open
按鈕,就可以開始播放了,點選後成功播放效果下圖所示
此次通過Nginx+rtmp子產品搭建點播服務已經成功了,在下一篇文章中我将搭建直播服務,歡迎關注我的部落格~
作者:湯青松
日期:2019-11-28
微信:songboy8888