標籤:

Nginx與Nginx-rtmp-module搭建RTMP視頻直播和點播伺服器

開發環境:

Ubuntu 16.04.2 LTS

nginx-1.8.1

nginx-rtmp-module

Nginx本身是一個非常出色的HTTP伺服器,FFMPEG是非常好的音視頻解決方案.這兩個東西通過一個nginx的模塊nginx-rtmp-module,組合在一起即可以搭建一個功能相對比較完善的流媒體伺服器. 這個流媒體伺服器可以支持RTMP和HLS(Live Http Stream)。

1 nginx伺服器的搭建

(1) 下載nginx-rtmp-module和nginx

以root用戶在etc目錄下面創建rtmpServer文件夾,將nginx-rtmp-module和nginx下載到該文件夾下。

下載nginx-rtmp-module

nginx-rtmp-module的官方github地址:github.com/arut/nginx-r

使用命令:

git clone https://github.com/arut/nginx-rtmp-module.gitn

下載nginx並解壓

nginx的官方網站為:nginx.org/en/download.h

wget http://nginx.org/download/nginx-1.8.1.tar.gzntar -zxvf nginx-1.8.1.tar.gzn

(2)安裝nginx的依賴庫配置並編譯nginx

安裝nginx的依賴庫

sudo apt-get updatensudo apt-get install libpcre3 libpcre3-devnsudo apt-get install openssl libssl-devn

配置並編譯nginx

進入到nginx-1.8.1安裝目錄, 使用nginx的默認配置,添加nginx的rtmp模塊。 add-module為下載的nginx-rtmp-module文件路徑。

cd nginx-1.8.1n./configure --add-module=../nginx-rtmp-modulenmakensudo make installn

(3)運行測試nginx

進入安裝目錄/usr/local/nginx,運行命令./sbin/nginx

注意:以後所有的命令都在/usr/local/nginx目錄運行,也nginx配置文件的相對目錄。

打開瀏覽器在地址欄輸入:localhost。如果,如下圖顯示那樣就證明您的nginx伺服器搭建成功了。

2 點播視頻伺服器的配置

通過上一步nginx伺服器已經搭建完成,然後我們就可以開啟一個視頻點播的服務了。打開配置文件nginx.conf,添加RTMP的配置。

worker_processes 1;nevents {n worker_connections 1024;n}nrtmp { #RTMP服務n server {n listen 1935; #//服務埠n chunk_size 4096; #//數據傳輸塊的大小nnn application vod {n play /opt/video/vod; #//視頻文件存放位置。n }n }n}nhttp {n include mime.types;n default_type application/octet-stream;n sendfile on;n keepalive_timeout 65;n server {n listen 80;n server_name localhost;n location / {n root html;n index index.html index.htm;n }n error_page 500 502 503 504 /50x.html;n location = /50x.html {n root html;n }n }n}n

配置目錄/opt/video/vod為存放視頻文件的位置了,那我們就往裡面放一個文件吧。我放了一個girl.mp4文件。 文件放好之後,那就讓我們重新啟動一下nginx

sudo ./sbin/nginx -s reloadn

打開視頻播放軟體選用的是VLC media-> open network stream

如圖填寫我們要點播的節目地址rtmp://localhost/vod/girl.mp4 如圖

點擊play就可以播放了。

當然點播不使用RTMP插件nginx自身也是可以實現點播服務的。那就是配置location部分,由於下面我們要配置直播和回看功能所以選用了RTMP服務。

3 直播視頻伺服器的配置

接著我們就在點播伺服器配置文件的基礎之上添加直播伺服器的配置。一共2個位置,第一處就是給RTMP服務添加一個application這個名字可以任意起,也可以起多個名字,由於是直播我就叫做它live吧,如果打算弄多個頻道的直播就可以live_cctv1、live_cctv2名字任意。第二處就是添加兩個location欄位,欄位的內容請直接看文件吧。

worker_processes 1;nnevents {n worker_connections 1024;n}nnrtmp {n server {n listen 1935;n chunk_size 4096;nn application vod {n play /opt/video/vod;n }nn application live{ #第一處添加的直播欄位n live on;n }n }nn}nnhttp {n include mime.types;n default_type application/octet-stream;n sendfile on;n keepalive_timeout 65;n server {n listen 80;n server_name localhost;nn location /stat { #第二處添加的location欄位。n rtmp_stat all;n rtmp_stat_stylesheet stat.xsl;n }nn location /stat.xsl { #第二處添加的location欄位。n root /etc/rtmpServer/nginx-rtmp-module/;n }nn location / {n root html;n index index.html index.htm;n }nn error_page 500 502 503 504 /50x.html;n location = /50x.html {n root html;n }n }n}n

添加完這兩處之後,重新啟動nginx打開瀏覽器看看,是否有如下圖顯示:

有沒有看到紅框框的live字樣呢?如果可以顯示出來,證明你的配置生效了。

還等什麼讓我們推送一個節目看看(其實專業詞叫錄製,後面將會使用錄製這個詞。)吧。

安裝配置OBS(Open Broadcaster Software)

首先需要安裝ffmpeg,從Ubuntu 15.x開始,ffmpeg就已經納入了官方鏡像源中,所以安裝也很簡單:

sudo apt install ffmpegn

接著來安裝OBS:

sudo add-apt-repository ppa:obsproject/obs-studio //添加源nsudo apt-get update //更新源nsudo apt install obs-studio //安裝n

配置OBS如圖:

(1)點擊紅圈添加「Media Source」,會彈出一個框框,裡面的內容就按照圖片顯示配置就可以了。點擊「OK」就能在你的屏幕上播放了。

(2)配置節目的輸出流如圖所示:

首先點擊紅圈「setting」進入設置界面。記得要正確填寫要錄製的伺服器路徑啊。配置好就可以點擊OK了。退出後點擊藍圈,就開始錄製節目了。

(3)查看我們錄製的節目,伺服器有沒有接收到呢?打開我的伺服器地址「localhost/stat」查看一下 ,你的顯示是否和我的相同呢?如果相同證明伺服器已經接收到了錄製的節目,客戶端可以進行播放了。

播放的地址就是「rtmp://localhost/live/test」,如果您本地有支持rtmp協議的播放器就可以試試了。最後奉上一張觀看直播的屏幕截圖。

4 實時回看視頻伺服器的配置

我們想一想如果直播服務能夠把節目錄製在本地,我們不就可以直接進行回看先前的節目了嗎?回看一分鐘、一小時甚至一天的。想想就興奮不用寫代碼有現成的可以使用。怎麼用呢?繼續看nginx的配置吧。

1.添加完成後需要重新啟動nginx,由於這次nginx需要向伺服器寫切片視頻文件,但nginx我又沒有給nginx指定用戶名只能走默認的nobody用戶和nogroup用戶組,其實就是沒有組。所以我對需要寫入的目錄做了增大許可權的修改。

如下圖,這樣做就是為了避免由於許可權問題而無法寫文件。

2.如何給伺服器錄製視頻,在上一節已經說過,這裡就不再說了。

3.查看視頻文件是否真的錄製上沒有,繼續看圖:

已經產生切片視頻文件了。其中還有一個index.m3u8。

5.已經可以播放了,如何回看呢?其實這個index.m3u8文件僅僅是目錄。想回看哪個就播放哪個.ts文件就可以了。

Reference:

blog.csdn.net/kingroc/a

blog.csdn.net/luyaran/a

guoziweb.com/archive/17


如果文章對更多的朋友有益,請分享到朋友圈。【視音頻圖像技術乾貨,流媒體、圖像演算法、人工智慧、機器人技術探索,開源項目推薦,還有更多職場規劃】歡迎關注我的微信公眾號,公眾號添加DaveBobo,更多乾貨等著你喲~~~

推薦閱讀:

TAG:rtmp |