注意:這裏不會講到nginx流媒體模塊如何安裝的問題,只研究rtmp,hls直播和錄製相關的nginx服務器配置文件的詳細用法和說明。能夠對照這些命令詳解配置nginx -rtmp服務html
注: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; } } } }
是一個用於保存全部rtmp配置的塊網絡
在這裏就是rtmp直播錄播配置的根併發
server塊裏面放服務器實例,好比配置裏的三個application(application在第6個解釋)app
listen比較好理解,監聽某個端口,讓nginx監聽並接收rtmp鏈接ide
接收網絡流的塊大小,接觸過NIO的應該比較清楚,基於塊比基於流效率要高,chunk_size默認值是4096,至少128,數字越大服務器負載越高,服務器調優這裏較爲重要spa
nginx配置文件裏使用‘#’做爲註釋code
見名知意,建立一個應用/實例,後面接上應用實例類型,如上配置,建立了三個應用,好比上面配置的三個服務器應用實例:(1)rtmp錄播(vod),(2)rtmp直播(live),(3)hls直播(hls)orm
重要:rtmp模塊的配置與nginx的http模塊是兩種不一樣的配置指令,二者不要混淆
play 錄播的播放目錄
直播模式,一對多廣播
最大鏈接數,rtmp直播流協議屬於長鏈接協議,服務器能開多少鏈接要把握好,hls協議是基於http的協議,因此理論上要比rtmp協議併發量要高不少
容許來自指定的地址/全部地址播放和發佈
好比上面配置使用allow play all容許全部地址播放實時流,若是設置成allow play 127.0.0.1 就是隻容許本地播放;
再舉個例子:allow publish 127.0.0.1就是容許本機發布實時流,其餘地址都不能發佈。
用來指定錄製文件的目錄,默認是/tmp
record off:什麼都不錄製
record all:錄製全部
record video:只錄制視頻
record audio:只錄制音頻
record keyframes:只錄制關鍵幀
record maual:經過接口控制錄製的啓動中止
能夠進行組合,好比:record video keyframes:就是隻錄製視頻關鍵幀
錄製文件的文件名後綴,默認是.flv
好比上面的配置 record suffix -%d-%b-%y-%T.flv,錄製文件生成文件名就是這樣(舉例):應用名-24-Jul-04-17:07:45.flv
上面配置:record_size 5120k,錄製文件的最大值是5M
配置裏的:record_interval 15s,就是錄製文件的間隔,間隔15秒開始下一個片斷的錄製;
設置成 record_interval 0就是錄製視頻文件沒有間隔;
設置成record-interval off就會把全部視頻流全都寫到一個文件裏去。
重要:想要把流媒體保存文件,這個能夠用來作文件分片,能夠按天或者按小時生成新的文件,很實用的功能
這個參考 live on就好了,很簡單,就是開不開啓hls,hls off就是不開啓
就是錄製視頻文件的目錄/路徑
hls播放列表長度,默認30分鐘,這裏設置成30秒:hls_playlist_length 30s
設置hls時間戳同步閾值,通俗一點就是強制的音/視頻同步,能夠防止音畫不一樣步的現象,默認是2ms,
切換髮送視頻元數據到客戶端,默認就是meta on,若是想要用修改後的視頻得用meta off了
建立錄製塊,能夠在application塊中添加多個recorder記錄,recorder塊中可使用全部錄製指令,recorder塊繼承application塊中的錄製指令。(全部record開頭的都是錄製指令)。
wait_key指令是否等待視頻從一個關鍵幀開始(錄播想要實現視頻的進度隨意控制就須要視頻中存在關鍵幀),
默認是off:不開啓,設置爲on:開啓。
終止指定時間內空閒的發佈鏈接,默認是不開啓,如
同步音頻和視頻,默認是 sync 300ms。
這是很常見的問題,若是用戶的帶寬不足就會自動丟掉一些幀,這時就會產生同步問題;
sync指令做用就是隔一段時間發送一個時間戳來同步音頻和視頻。
發送元數據到客戶端,默認是 meta on;meta off就是不發送元數據,通常不須要更改。
(音視頻的元數據包含一些視頻的基本信息,好比標題,文件大小,關鍵幀,視頻長度等等信息)
是否添加時間戳到錄製文件,默認是 record_unique off:不添加
不開啓的效果就是一樣的錄製文件每次錄製的時候都會被覆蓋重寫,固然能夠經過給文件名添加時間後綴的形式避免,其實兩個效果是同樣的,一個能夠控制格式,一個不能控制格式的問題
切換文件的附加模式,默認是record_append off
若是設置成on開啓的話錄製的時候就會在老文件後面追加視頻,不開啓的效果就是上面講到的覆蓋重寫
錄製的時候鎖定文件,默認是off;
不鎖定的話,客戶端能夠實時播放錄製的視頻,能夠達到跟直播同樣的效果了
錄製文件的最大視頻幀數量,好比record_max_frames 20 就是這個錄製文件最大20個視頻幀(視頻幀的做用上面已經解釋過了,用來控制進度拖放的)
未完待續