配置Nginx.conf_說明和示例

Application 創建一個RTMP應用,這裏有點區別於http的location
Timeout 60s 
stocket超時,可以配合keepalive和ping值來實現不讓服務器端長期處於監聽連接客戶端狀態,實現快速關掉socket
Ping 3m
ping_timeout 30s
RTMP ping用於檢查活動連接的協議。發送一個特殊的包遠程連接,在ping_timeout指定時間內期待一個回覆,如果沒有收到回覆,連接斷開
max_streams 32
設置RTMP流的最大數目,單一流數據最大限制,一般默認的32就可以了
ack_window 5000000
設置RTMP窗口的大小
chunk_size 4096
數據塊大小 設置值越大CPU負載就越小
max_queue
最大隊列數,一般默認即可
max_message 1M
輸入數據消息的最大大小。所有輸入數據消息都會保存在內存中,等待完成流媒體轉發。在理論上傳入的消息可以是非常大,對服務器穩定性影響較大,所以一般默認即可。
out_queue
out_cork
Buflen 5s
設置默認緩衝區長度。通常客戶端發送播放前RTMP set_buflen命令並重置該設置

訪問控制
Access
Allow/deny
允許來自指定地址或者所有地址發佈/播放
Allow public 127.0.0.1
Deny publish all;
Allow play 192.168.0.0/24
Deny play all;

Exec命令
Exce 
exec_options on;
啓動一些exec指令選項,通過一些exec事件來干預整個RTMP流
可以仔細一些外部編解碼功能
Exec ffmpeg -i rtmp://localhost?src/$name -vcodec libx264 -vprofile baseline -g 10 -s 300x200 -acodec libfaac -ar 44100 -ac 1 -f flv rtmp://localhost/hls/$name 2>> /var/log/ffmpeg-$name.log;
Exce_statc 
類似exce,屬於靜態命令,不支持傳遞上下文參數
Exec_kill_signal term;
Exec_kill_signal user1;
Exec_kill_signal 3;
Exec_pull 
Exec_push
Exec_publish
指定與參數外部命令要在發佈事件執行。
Exec_play
指定與要在打開事件執行外部命令
Exec_play_done
指定要在打開完成事件執行外部命令
Exec_publish_done
Exec_record_done
例子
exec_play bash -c “echo $addr $pageurl >> /tmp/clients”
Exec_publish base -c “echo $addr $flashver >> /tmp/publishers”
轉錄
Exec_record_done ffmpeg -y -i $path -acodec libmp31ame -ar 44100 -ac 1 -vcodec libx264 $dirname/$basename.mp4

Live 模式
Live on
切換直播模式,即一對多廣播
Meta on/copy/off
奇幻發送元數據到客戶端 默認on
Interleave on/off
切換交叉模式。在該模式下,音視頻會在同一個RTMPchunk流中傳輸。默認爲off
wait_key on|off
使視頻流從一個關鍵幀開始,默認爲off
wait_video on|off
在一個視頻幀發送前禁用音頻。默認off
通過wait_key/wait_video進行組合以使客戶端可以收到具有所有其他數據的視頻關鍵幀。但這樣會增加連接延遲。不過可以通過編解碼器中調整關鍵幀間隔來減少延遲。
Publish_notify on
發送NetStream.Publish.Start和NetStream.Publish.Stop給用戶,默認off
Drop_idle_publisher 10s
終止指定時間內閒置(沒有音頻、視頻)的發佈連接,默認爲off。注意這個僅僅對於發佈模式的連接起作用(發送publish命令之後)
Sync 10ms
同步音視頻流。如果用戶帶寬不足以接收發布率,服務器會丟棄一些幀。這將導致同步問題。當時間戳差超過sync指定值,將會發送一個絕對幀來解決這個問題,默認爲300ms
Play_restart off
使nginx-rtmp能夠在發佈啓動或者停止時發送NetStream.Play.Start 和 NetStrem.Play.Stop到每個用戶。如果關閉的話,那麼每個用戶就只能在回放的開始結束時收到該通知了。默認爲on

Record 模式
Record off|all|audio|video|keyframes|manual
切換錄製模式,流可以被記錄到flv文件
Off 不錄製
All 錄製音頻和視頻
Audio
Video
Keyframes 只錄制關鍵視頻幀
Manual 不自動啓動錄製,使用控制接口來進行啓動和停止
Record_path /tmp/rec
指定錄製的flv文件存放目錄
Record_suffix -%d-%b-%y-%T.flv
錄製後綴strftime格式
Record_unique on|off
是否添加時間戳到錄製文件,防止文件被覆蓋,默認off
record_append on|off
切換文件附加模式。開啓後,錄製時將新數據附加到舊文件後面。默認off
record_lock on|off
鎖定文件,調用系統的fcntl
record_max_size 128K
設置錄製文件的最大值
Record_max_frames 2
設置每個錄製文件的視頻幀最大數量
Record_interval 1s/15m
在這個指令指定的時間之後重啓錄製。默認off設置爲0表示錄製中無延遲。如果record_unique爲off時所有的記錄都會被寫到同一個文件中。否則就會以時間戳區分在不同文件
Record_notify on|off
奇幻當定義錄製啓動或者停止文件時發送NetStream.Record.Start和NetStream.Record.Stop狀態信息onStatus到發佈者。

應用
Application rtmp{
Live on;
Record all;
Record_path /var/rec;

Recorder audio{
Record audio;
Record_suffix .audio.flv;
}
Recorder chunked{
Record all;
Record_interval 15s;
Record_path /var/rec/chunked;
}
}
創建錄製塊。可以在單個application中創建多個記錄 。

VOD媒體
Play dir|http://loc 
播放指定目錄或者HTTP地址的flv或者mp4文件。注意HTTP播放是要在整個文件下載完後纔開始播放。同一個play可以播放多個視頻地址(用於負載)。MP4格式要在編解碼都被RTMP支持纔可以播放。一般常見的就是H264/AAC
Application vod{
Play /var/flvs;
}
Application vod_http{
Play http://localhost/vod;
}
Play_temp_path /www
設置遠程VOD文件完全下載之後複製於play_temp_path之後的路徑。空值的話禁用此功能。
Play_local_path dir
在播放前設置遠程存儲VOD文件路徑,默認/tmp
Play_local_path /tmp/videos;
Paly /tmp/videos http://localhost/videos
表示播放視頻,先播放本地緩存,如果沒有的話,從localhost/videos下載到本地/tmp/videos後,在進行播放


Relay模式
Pull url [key=value]
創建pull中繼。主要是從遠程服務器拉取流媒體。並進行重新發布。
Url語法 [rtmp://]host[:port][/app[/playpath]] 如果application找不到那麼將會使用本地application名,如果找不到playpath那麼久用當前流名稱。
參數如下(使用Key=Value方式)
app 明確application名
Name 捆綁到relay的bending流名稱。如果爲空,那麼會使用application中所有本地流
tcUrl
pageUrl
swfUrl
flashVer
playPath
Live
Start
Stop
Static
Pull rtmp://cdn.example.com/main/ch?id=1234 name=channel;
Push url [key=value]
與pull類似,只是push推送發佈流到遠程服務器。
Push_reconnect 1s
在斷開連接後,在push重新連接錢等待的時間,默認3秒
Session_relay on;
切換會話relay模式。在這種情況下關閉時relay銷燬。

Notify 模式
這個功能主要是提供HTTP回調。當發送一些連接操作是,一個HTTP請求異步發送。命令處理會被暫停掛起,知道它返回結果代碼。當HTTP返回2xx成功狀態碼時,RTMP會話繼續。3xx狀態碼會使RTMP重定向到另一個從HTTP返回頭獲取到的application,否則連接丟失。其他狀態碼,連接斷開。目前用來做簡單的鑑權。
On_connect url
設置HTTP連接回調。當客戶分發連接命令時。
例子:
On_connect http://localhost/my_auth;
Location /on_connect{
If($arg_flashver != “my_secret_flashver”){
Rewrite ^.*$ fallback?permanent;
}
}
On_play url
設置HTTP播放回調。分發客戶分發播放命令時。
http {
Location /redirect {
Rewrite ^.*$ newname?permanent;
}
}
Rtmp{
Application myqpp{
Live on;
On_play http://localhost/redirect;
}
}
On_publish
On_doone
On_play_done
On_publish_done
On_record_done
On_update
Notify_update_timeout
設置on_update回調時間
Notify_update_strict on|off
Notify_relay_redirect on
Notify_method get
設置HTTP方法通知,默認是application/x-www-form-urlencodeed 的POST內容類型。有時候可能會需要GET方法,在nginx的http{}部分處理調用。在這種情況下可以使用arg_*變量去訪問參數。
例如如果是method爲get時
Location /on_play{
If($arg_pageUrl ~* localhost){
Return 200;
}
Return 500;
}

HLS 模式
Hls on|off
使application 切換HLS協議直播
Hls_path /tmp/hls;
設置HLS播放列表和分段目錄。這一目錄必須在nginx啓動前就已經存在。
Hls_fragment 15s;
設置HLS分段長度,默認5秒,這個跟直播延遲有比較大的影響
Hls_playlist_length 20m;
設置HLS播放列表長度,默認30秒。這個跟直播緩存有關。
Hls_sync time
設置HLS時間戳同步閾值。默認2ms。這個功能防止由低分辨率RTMP(1KHz)轉換到高分辨率MPEG-TS(90KHz)之後出現的噪音。
Hls_continuous on|off
切換HLS連續模式,默認off。
Hls_nested on|off
切換HLS嵌套模式。默認off。
Hls_cleanup on|off;
切換HLS清理。默認on

AccessLog日誌
Access_log off|path [format_name]
Log_format new_format ‘$remote_addr;
Access_log logs/rtmp_access.log new_format;
Log_format 指定日誌格式
創建指定的日誌格式。日誌格式看起來很像 nginx HTTP 日誌格式。日誌格式裏支持的幾個變量有:
* connection - 連接數。
* remote_addr - 客戶端地址。
* app - application 名。
* name - 上一個流名。
* args - 上一個流播放/發佈參數。
* flashver - 客戶端 flash 版本。
* swfurl - 客戶端 swf url。
* tcurl - 客戶端 tcUrl。
* pageurl - 客戶端頁面 url。
* command - 客戶端發送的播放/發佈命令:NONE、PLAY、PUBLISH、PLAY+PUBLISH。
* bytes_sent - 發送到客戶端的字節數。
* bytes_received - 從客戶端接收到的字節數。
* time_local - 客戶端連接結束的本地時間。
* session_time - 持續連接的秒數。
* session_readable_time - 在可讀格式下的持續時間。
默認的日誌格式叫做 combined。這裏是這一格式的定義:
$remote_addr [$time_local] $command "$app" "$name" "$args" - 
$bytes_received $bytes_sent "$pageurl" "$flashver" ($session_readable_time)

Limits限制
max_connections number;
設置rtmp引擎最大連接數,默認off

Application hls{
Live on;
Hls on;
Hls_path /tmp/hls;
Hls_fragment 15s;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章