實時監控、直播流、流媒體、視頻網站開發方案流媒體服務器搭建及配置詳解:使用nginx搭建rtmp直播、rtmp點播、,hls直播服務配置詳解

注意:這裏不會講到nginx流媒體模塊如何安裝的問題,只研究rtmp,hls直播和錄製相關的nginx服務器配置文件的詳細用法和說明。能夠對照這些命令詳解配置nginx -rtmp服務html

1、nginx的hls配置實例

注:nginx採用nginx1.9.x版本nginx

實例配置以下(下面會講解每一個指令的含義和用法):服務器

rtmp
{
 
  server
  {
     listen 1935;
     chunk_size 8192;

   #vod config

     application vod
     {
        play /var/vod/flv;
     }

   #live config

     application live
     {
        live on;
        max_connections 1024;
        allow play all;
        
        record_path /var/live;

        recorder audio
        {
           record audio;
           record_suffix -%d-%b-%y-%T.flv;
        } 
        recorder chunked
        {
           record all;
          #record_max_size 5120K;
           record_interval 15s;
           record_path /var/live/chunked;
        }
     }

   #hls

      application hls
      {
        live on;
        hls on;
        hls_path /var/hls;
        hls_playlist_length 30s;
        hls_sync 100ms;        
        meta on;
        recorder chunked
        {
           record all;
          #record_max_size 5120K;
           record_interval 15s;
           record_path /var/hls/Chunked;
        }
        recorder audio 
        {
           record audio;
           record_suffix -%d-%b-%y-%T.flv;
        }
      }

   }
}


2、配置詳解

注:配置指令的解釋基於nginx官方的2013年nginx-rtmp-model文檔

一、rtmp{}

是一個用於保存全部rtmp配置的塊網絡

在這裏就是rtmp直播錄播配置的根併發

二、server{}

server塊裏面放服務器實例,好比配置裏的三個application(application在第6個解釋)app

三、listen

listen比較好理解,監聽某個端口,讓nginx監聽並接收rtmp鏈接ide

四、chunk_size

接收網絡流的塊大小,接觸過NIO的應該比較清楚,基於塊比基於流效率要高,chunk_size默認值是4096,至少128,數字越大服務器負載越高,服務器調優這裏較爲重要spa

五、註釋:#

nginx配置文件裏使用‘#’做爲註釋code

六、application

見名知意,建立一個應用/實例,後面接上應用實例類型,如上配置,建立了三個應用,好比上面配置的三個服務器應用實例:(1)rtmp錄播(vod),(2)rtmp直播(live),(3)hls直播(hls)orm

重要:rtmp模塊的配置與nginx的http模塊是兩種不一樣的配置指令,二者不要混淆

七、vod(錄播)配置詳解

play  錄播的播放目錄

八、live(直播)配置詳解

(1)live   on/off

直播模式,一對多廣播

(2)max_connections

最大鏈接數,rtmp直播流協議屬於長鏈接協議,服務器能開多少鏈接要把握好,hls協議是基於http的協議,因此理論上要比rtmp協議併發量要高不少

(3)allow play/publish all/ip地址

容許來自指定的地址/全部地址播放和發佈

好比上面配置使用allow play all容許全部地址播放實時流,若是設置成allow play 127.0.0.1 就是隻容許本地播放;

再舉個例子:allow publish 127.0.0.1就是容許本機發布實時流,其餘地址都不能發佈。

(4)record_path

用來指定錄製文件的目錄,默認是/tmp

(5)record  off/all/video/audio/keyframes/maual

record off:什麼都不錄製

record all:錄製全部

record video:只錄制視頻

record audio:只錄制音頻

record keyframes:只錄制關鍵幀

record maual:經過接口控制錄製的啓動中止

能夠進行組合,好比:record video keyframes:就是隻錄製視頻關鍵幀

(6)record suffix

錄製文件的文件名後綴,默認是.flv

好比上面的配置 record suffix -%d-%b-%y-%T.flv,錄製文件生成文件名就是這樣(舉例):應用名-24-Jul-04-17:07:45.flv

(7)record_max_size

上面配置:record_size 5120k,錄製文件的最大值是5M

(8)record_interval

配置裏的:record_interval 15s,就是錄製文件的間隔,間隔15秒開始下一個片斷的錄製;

設置成 record_interval 0就是錄製視頻文件沒有間隔;

設置成record-interval off就會把全部視頻流全都寫到一個文件裏去。

重要:想要把流媒體保存文件,這個能夠用來作文件分片,能夠按天或者按小時生成新的文件,很實用的功能

九、hls直播配置詳解

(1)hls on 

這個參考 live on就好了,很簡單,就是開不開啓hls,hls off就是不開啓

(2)hls_path

就是錄製視頻文件的目錄/路徑

(3)hls_playlist_length

hls播放列表長度,默認30分鐘,這裏設置成30秒:hls_playlist_length 30s

(4)hls_sync

設置hls時間戳同步閾值,通俗一點就是強制的音/視頻同步,能夠防止音畫不一樣步的現象,默認是2ms,

(5)meta on

切換髮送視頻元數據到客戶端,默認就是meta on,若是想要用修改後的視頻得用meta off了



3、本篇文章的配置文件就只有上面那麼多,下面補充一些經常使用到的nginx rtmp指令

一、recorder塊

建立錄製塊,能夠在application塊中添加多個recorder記錄,recorder塊中可使用全部錄製指令,recorder塊繼承application塊中的錄製指令。(全部record開頭的都是錄製指令)。


live指令補充:

二、wait_key 

wait_key指令是否等待視頻從一個關鍵幀開始(錄播想要實現視頻的進度隨意控制就須要視頻中存在關鍵幀),

默認是off:不開啓,設置爲on:開啓。

三、drop_idle_publisher

終止指定時間內空閒的發佈鏈接,默認是不開啓,如

drop_idle_publisher 10s; 推薦開啓該功能

四、sync

同步音頻和視頻,默認是 sync 300ms。

這是很常見的問題,若是用戶的帶寬不足就會自動丟掉一些幀,這時就會產生同步問題;

sync指令做用就是隔一段時間發送一個時間戳來同步音頻和視頻。

五、meta

發送元數據到客戶端,默認是 meta on;meta off就是不發送元數據,通常不須要更改。

(音視頻的元數據包含一些視頻的基本信息,好比標題,文件大小,關鍵幀,視頻長度等等信息)


record指令補充:

一、record_unique

是否添加時間戳到錄製文件,默認是 record_unique off:不添加

不開啓的效果就是一樣的錄製文件每次錄製的時候都會被覆蓋重寫,固然能夠經過給文件名添加時間後綴的形式避免,其實兩個效果是同樣的,一個能夠控制格式,一個不能控制格式的問題

二、record_append

切換文件的附加模式,默認是record_append off

若是設置成on開啓的話錄製的時候就會在老文件後面追加視頻,不開啓的效果就是上面講到的覆蓋重寫

三、record_lock

錄製的時候鎖定文件,默認是off;

不鎖定的話,客戶端能夠實時播放錄製的視頻,能夠達到跟直播同樣的效果了

四、record_max_frames

錄製文件的最大視頻幀數量,好比record_max_frames 20 就是這個錄製文件最大20個視頻幀(視頻幀的做用上面已經解釋過了,用來控制進度拖放的)


HLS指令補充:

未完待續

相關文章
相關標籤/搜索