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