Nginx rtmp模塊nginx-rtmp-module指令詳解

指令
Core
rtmp
語法:rtmp { ... }
上下文:根
描述:保存全部 RTMP 配置的塊。
server
語法:server { ... }
上下文:rtmp
描述:聲明一個 RTMP 實例。
rtmp {
  server {
  }
}

listen
語法:listen (addr[:port]|port|unix:path) [bind] [ipv6only=on|off] [so_keepalive=on|off|keepidle:keepintvl:keepcnt]
上下文:server
描述:給 NGINX 添加一個監聽端口以接收 RTMP 鏈接。
server {
    listen 1935;
}

application
語法:application name { ... }
上下文:server
描述:建立一個 RTMP 應用。application 名的模式並不相似於 http location。
server {
    listen 1935;
    application myapp {
    }
}

timeout
語法:timeout value
上下文:rtmp, server
描述:Socket 超時。這個值主要用於寫數據時。大多數狀況下,RTMP 模塊並不指望除 publisher 端口以外的其餘端口處於活動狀態。若是你想要快速關掉 socket 能夠用 keepalive 或者 RTMP ping 等。timeout 默認值爲 1 分鐘。
timeout 60s;
ping
語法:ping value
上下文:rtmp, server
描述:RTMP ping 間隔。零值的話將 ping 關掉。RTMP ping 是一個用於檢查活動鏈接的協議功能。發送一個特殊的包到遠程鏈接,而後在 ping_timeout 指令指定的時間內期待一個回覆。若是在這個時間裏沒有收到 ping 回覆,鏈接斷開。ping 默認值爲一分鐘。ping_timeout 默認值爲 30 秒。
ping 3m;
ping_timeout 30s;

ping_timeout
語法:ping_timeout value
上下文:rtmp, server
描述:請參考上文 ping 描述。
max_streams
語法:max_streams value
上下文:rtmp, server
描述:設置 RTMP 流的最大數目。數據流被整合到一個單一的數據流裏。不一樣的頻道用於發送命令、音頻、視頻等。默認值爲 32,適用於大多數狀況。
max_streams 32;
ack_window
語法:ack_window value
上下文:rtmp, server
描述:設置 RTMP 確認視窗大小。這是對端發送確認包到遠端後應該收到的字節數量。默認值爲 5000000。
ack_window 5000000;
chunk_size
語法:chunk_size value
上下文:rtmp, server
描述:流整合的最大的塊大小。默認值爲 4096。這個值設置的越大 CPU 負載就越小。這個值不能低於 128。
chunk_size 4096;
max_queue
語法:max_queue value
上下文:rtmp, server
描述:輸入數據報文最大尺寸。全部輸入數據會被分割成報文(而後進一步分割爲塊)。報文在處理結束以前會放在內存裏。理論上講,接收到的報文很大的話對於服務器的穩定性可能會有影響。默認值 1M 對於大多數狀況就足夠了。
max_message 1M;
out_queue
out_cork

Access
allow
語法:allow [play|publish] address|subnet|all
上下文:rtmp, server, application
容許來自指定地址或者全部地址發佈/播放。allow 和 deny 指令的前後順序可選。
allow publish 127.0.0.1;
deny publish all;
allow play 192.168.0.0/24;
deny play all;

deny
語法:deny [play|publish] address|subnet|all
上下文:rtmp, server, application
描述:參考 allow 的描述。
Exec
exec
語法:exec command arg*
上下文:rtmp, server, application
描述:定義每一個流發佈時要執行的帶有參數的外部命令。發佈結束時進程終止。第一個參數應該是二進制可執行文件的完整路徑。關於這個進程將會作些什麼事沒有 任何假定。但這一特色在使用 ffmpeg 進行流轉換時是頗有用的。FFmpeg 被假定做爲客戶端鏈接到 nginx-rtmp 而後做爲發佈者輸出轉換流到 nginx-rtmp。相似於 $var/${var} 形式的替換能夠在命令行使用:
* $name - 流的名字。
* $app - 應用名。
* $addr - 客戶端地址。
* $flashver - 客戶端 flash 版本。
* $swfurl - 客戶端 swf url。
* $tcurl - 客戶端 tc url。
* $pageurl - 客戶端頁面 url。
能夠在 exec 指令中定義 Shell 格式的轉向符用於寫輸出和接收輸入。支持以下
* 截斷輸出 >file
* 附加輸出 >>file。
* 重定向描述符相似於 1>&2。
* 輸入 <file。
如下 ffmpeg 調用將輸入流轉碼爲 HLS-ready 流(H264/AAC)。運行這個示例,FFmpeg 須編譯爲支持 libx264 & libfaac。
application src {
    live on;
    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;
}


application hls {
    live on;
    hls on;
    hls_path /tmp/hls;
    hls_fragment 15s;
}

exec_static
語法:exec_static command arg*
上下文:rtmp, server, application
描述:相似於 exec 指令,但在 nginx 啓動時將運行定義的命令。由於(啓動時)尚無會話上下文,不支持替換。
exec_static ffmpeg -i http://example.com/video.ts -c copy -f flv rtmp://localhost/myapp/mystream;
exec_kill_signal
語法:exec_kill_signal signal
上下文:rtmp, server, application
描述:設置進程終止信號。默認爲 kill(SIGKILL)。你能夠定義爲數字或者符號名(POSIX.1-1990 信號)。
exec_kill_signal term;
exec_kill_signal usr1;
exec_kill_signal 3;

respawn
語法:respawn on|off
上下文:rtmp, server, application
描述:若是打開 respawn 子進程,進程終止時發佈會仍然繼續。默認爲打開。
respawn off;
respawn_timeout
語法:respawn_timeout timeout
上下文:rtmp, server, application
描述:啓動新的子實例以前,設置 respawn 超時時間。默認爲五秒。
respawn_timeout 10s;
exec_publish
語法:exec_publish command arg*
上下文:rtmp, server, application
描述:指定發佈事件觸發的帶有參數的外部命令。返回碼是未解析的。這裏能夠用 exec 替換。另外,args 變量支持持有查詢字符串參數。
exec_play
語法:exec_play command arg*
上下文:rtmp, server, application
描述:指定播放事件觸發的帶有參數的外部命令。返回碼是未解析的。替換列表同 exec_publish。
exec_play_done
語法:exec_play_done command arg*
上下文:rtmp, server, application
描述:指定播放結束事件觸發的帶有參數的外部命令。返回碼是未解析的。替換列表同 exec_publish。
exec_publish_done
語法:exec_publish_done command arg*
上下文:rtmp, server, application
描述:指定發佈結束事件觸發的帶有參數的外部命令。返回碼是未解析的。替換列表同 exec_publish。
exec_record_done
語法:exec_record_done command arg*
上下文:rtmp, server, application, recorder
描述:指定錄製結束時觸發的帶有參數的外部命令。這裏支持 exec_publish 的替代以及額外的變量 path 和 recorder。
# track client info
exec_play bash -c "echo $addr $pageurl >> /tmp/clients";
exec_publish bash -c "echo $addr $flashver >> /tmp/publishers";


# convert recorded file to mp4 format
exec_record_done ffmpeg -y -i $path -acodec libmp3lame -ar 44100 -ac 1 -vcodec libx264 $path.mp4;

Live
live
語法:live on|off
上下文:rtmp, server, application
描述:切換直播模式,即一對多廣播。
live on;
meta
語法:meta on|off
上下文:rtmp, server, application
描述:切換髮送元數據到客戶端。默認爲 on。
meta off;
interleave
語法:interleave on|off
上下文:rtmp, server, application
描述:切換交叉模式。在這個模式下,音頻和視頻數據會在同一個 RTMP chunk 流中傳輸。默認爲 off。
interleave on;
wait_key
語法:wait_key on|off
上下文:rtmp, server, application
描述:使視頻流從一個關鍵幀開始。默認爲 off。
wait_key on;
wait_video
語法:wait_video on|off
上下文:rtmp, server, application
描述:在第一個視頻幀發送以前禁用音頻。默認爲 off。能夠和 wait_key 進行組合以使客戶端能夠收到具備全部其餘數據的視頻關鍵幀。然而這一般增長鏈接延遲。您能夠經過在編碼器中調整關鍵幀間隔來減小延遲。
wait_video on;
publish_notify
語法:publish_notify on|off
上下文:rtmp, server, application
描述:發送 NetStream.Publish.Start 和 NetStream.Publish.Stop 給用戶。默認爲 off。
publish_notify on;
drop_idle_publisher
語法:drop_idle_publisher timeout
上下文:rtmp, server, application
描述:終止指定時間內閒置(沒有音頻/視頻數據)的發佈鏈接。默認爲 off。注意這個僅僅對於發佈模式的鏈接起做用(發送 publish 命令以後)。
drop_idle_publisher 10s;
sync
語法:sync timeout
上下文:rtmp, server, application
描述:同步音頻和視頻流。若是用戶帶寬不足以接收發布率,服務器會丟棄一些幀。這將致使同步問題。當時間戳差超過 sync 指定的值,將會發送一個絕對幀來解決這個問題。默認爲 300 ms。
sync 10ms;
play_restart
語法:play_restart on|off
上下文:rtmp, server, application
描述:使 nginx-rtmp 可以在發佈啓動或中止時發送 NetStream.Play.Start 和 NetStream.Play.Stop 到每一個用戶。若是關閉的話,那麼每一個用戶就只能在回放的開始和結束時收到這些通知了。默認爲 on。
play_restart off;
Record
record
語法:record [off|all|audio|video|keyframes|manual]*
上下文:rtmp, server, application, recorder
描述:切換錄製模式。流能夠被記錄到 flv 文件。本指令指定應該被記錄的:
* off - 什麼也不錄製
* all - 音頻和視頻(全部)
* audio - 音頻
* video - 視頻
* keyframes - 只錄制關鍵視頻幀
* manual - 用不自動啓動錄製,使用控制接口來啓動/中止
在單個記錄指令中能夠有任何兼容的組合鍵。
record all;


record audio keyframes;

record_path
語法:record_path path
上下文:rtmp, server, application, recorder
描述:指定錄製的 flv 文件存放目錄。
record_path /tmp/rec;
record_suffix
語法:record_suffix value
上下文:rtmp, server, application, recorder
描述:設置錄製文件後綴名。默認爲 '.flv'。
record_suffix _recorded.flv;
錄製後綴能夠匹配 strftime 格式。如下指令
record_suffix -%d-%b-%y-%T.flv
將會產生形如 mystream-24-Apr-13-18:23:38.flv 的文件。全部支持 strftime 格式的選項能夠在 strftime man page 裏進行查找。
record_unique
語法:record_unique on|off
上下文:rtmp, server, application, recorder
描述:是否添加時間戳到錄製文件。不然的話一樣的文件在每一次新的錄製發生時將被重寫。默認爲 off。
record_unique on;
record_append
語法:record_append on|off
上下文:rtmp, server, application, recorder
描述:切換文件附加模式。當這一指令爲開啓是,錄製時將把新數據附加到老文件,若是老文件丟失的話將從新建立一個。文件中的老數據和新數據沒有時間差。默認爲 off。
record_append on;
record_lock
語法:record_lock on|off
上下文:rtmp, server, application, recorder
描述:當這一指令開啓時,當前錄製文件將被 fcntl 調用鎖定。那樣能夠在其餘地方來覈實哪一個文件正在進行錄製。默認爲 off。
record_lock on;
在 FreeBSD 上你可使用 flock 工具檢查。在 Linux 上 flock 和 fcntl 無關,所以你須要去寫一個簡單的腳原本檢查文件的鎖定狀態。如下 isunlocked.py 是一個這樣的腳本的示例。html

#!/usr/bin/python import fcntl, sys sys.stderr.close() fcntl.lockf(open(sys.argv[1], "a"), fcntl.LOCK_EX|fcntl.LOCK_NB)

record_max_size
語法:record_max_size size
上下文:rtmp, server, application, recorder
描述:設置錄製文件的最大值。
record_max_size 128K;
record_max_frames
語法:record_max_frames nframes
上下文:rtmp, server, application, recorder
描述:設置每一個錄製文件的視頻幀的最大數量。
record_max_frames 2;
record_interval
語法:record_interval time
上下文:rtmp, server, application, recorder
描述:在這個指令指定數量的(毫秒)秒以後重啓錄製。默認爲 off。設置爲 0 的話意味着錄製中無延遲。若是 record_unique 爲 off 的話全部記錄片斷會被寫到同一個文件。不然(文件名)將附以時間戳以區分不一樣文件(給定的 record_interval 要大於 1 秒)。
record_interval 1s;


record_interval 15m;

recorder
語法:recorder name {...}
上下文:application
描述:建立錄製塊。能夠在單個 application 中建立多個記錄。上文提到的全部錄製相關的指令均可以在 recorder{} 塊中進行定義。繼承高層次中的全部設置。
application {
    live on;


    # default recorder
    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;
    }
}

record_notify
語法:record_notify on|off
上下文:rtmp, server, application, recorder
描述:切換當定義錄製啓動或中止文件時發送 NetStream.Record.Start 和 NetStream.Record.Stop 狀態信息(onStatus)到發佈者。狀態描述字段保存錄制的名字(默認錄製的話爲空)。默認爲 off。
recorder myrec {
    record all manual;
    record_path /var/rec;
    record_notify on;
}

VOD
play
語法:lay dir|http://loc [dir|http://loc]*
上下文:rtmp, server, application
描述:播放指定目錄或者 HTTP 地址的 flv 或者 mp4 文件。若是此參數前綴是 http:// 那麼就認爲文件能夠在播放前從遠程 http 地址下載下來。注意播放是在整個文件下載完畢以後纔開始。你可使用本地 nginx 在本地機器緩存文件。
同一個 play 指令能夠定義多個播放地址。當多個 play 指令定義時,地址列表將被合併,並進行從更高域中繼承。嘗試播放每個地址,直到發現一個成功的地址。若是沒有找到成功地址,將發送錯誤狀態到客戶端。
索引的 FLV 播放具備隨機查找能力。沒有索引的 FLV 則不具有查找/暫停能力(重播模式)。使用 FLV 索引器(好比 yamdi)來編索引。
mp4 文件只有在音頻和視頻編碼都被 RTMP 支持時才能夠播放。最多見的狀況是 H264/AAC。
application vod {
    play /var/flvs;
}


application vod_http {
    play http://myserver.com/vod;
}


application vod_mirror {
    # try local location first, then access remote location
    play /var/local_mirror http://myserver.com/vod;
}

播放 /var/flvs/dir/file.flv:python

[plain]  view plain copy print ?
  1. ffplay rtmp://localhost/vod/dir/file.flv  


play_temp_path
語法:play_temp_path dir
上下文:rtmp, server, application
描述:在播放以前設置遠程存儲的 VOD 文件路徑。默認爲 /tmp。
play_temp_path /www;
play http://example.com/videos;

play_local_path
語法:play_local_path dir
上下文:rtmp, server, application
描述:設置遠程 VOD 文件徹底下載以後複製於 play_temp_path 以後的路徑。空值的話禁用此功能。默認爲控制。這個功能能夠用於緩存遠程文件在本地。
這一路徑應該和 play_temp_path 處於同一設備。
# search file in /tmp/videos.
# if not found play from remote location
# and store in /tmp/videos


play_local_path /tmp/videos;
play /tmp/videos http://example.com/videos;

Relay
pull
語法:pull url [key=value]*
上下文:application
描述:建立 pull 中繼。流將從遠程服務器上拉下來,成爲本地可用的。僅當至少有一個播放器正在播放本地流時發生。
Url 語法:[rtmp://]host[:port][/app[/playpath]]。若是 application 找不着那麼將會使用本地 application 名。若是找不着 playpath 那麼就是用當前流的名字。
支持如下參數:
* app - 明確 application 名。
* name - 捆綁到 relay 的本地流名字。若是爲空或者沒有定義,那麼將會使用 application 中的全部本地流。
* tcUrl - 若是爲空的話自動構建。
* pageUrl - 模擬頁面 url。
* swfUrl - 模擬 swf url。
* flashVer - 模擬 flash 版本,默認爲 'LNX.11,1,102,55'。
* playPath - 遠程播放地址。
* live - 切換直播特殊行爲,值:0,1。
* start - 開始時間。
* stop - 結束時間。
* static - 建立靜態 pull,這樣的 pull 在 nginx 啓動時建立。
若是某參數的值包含空格,那麼你應該在整個 key=value 對周圍使用引號,好比:'pageUrl=FAKE PAGE URL'。
pull rtmp://cdn.example.com/main/ch?id=12563 name=channel_a;


pull rtmp://cdn2.example.com/another/a?b=1&c=d pageUrl=http://www.example.com/video.html swfUrl=http://www.example.com/player.swf live=1;


pull rtmp://cdn.example.com/main/ch?id=12563 name=channel_a static;

push
語法:push url [key=value]*
上下文:application
描述:push 的語法和 pull 同樣。不一樣於 pull 指令的是 push 推送發佈流到遠程服務器。
push_reconnect
語法:push_reconnect time
上下文:rtmp, server, application
描述:在斷開鏈接後,在 push 從新鏈接前等待的時間。默認爲 3 秒。
push_reconnect 1s;
session_relay
語法:session_relay on|off
上下文:rtmp, server, application
描述:切換會話 relay 模式。在這種模式下鏈接關閉時 relay 銷燬。當設置爲 off 時,流關閉,relay 銷燬,這樣子之後另外一個 relay 能夠被建立。默認爲 off。
session_relay on;
Notify
on_connect
語法:on_connect url
上下文:rtmp, server
描述:設置 HTTP 鏈接回調。當客戶分發鏈接命令一個鏈接命令時,一個 HTTP 請求異步發送,命令處理將被暫停,直到它返回結果代碼。當 HTTP 2XX 碼(成功狀態碼)返回時,RTMP 會話繼續。返回碼 3XX (重定向狀態碼)會使 RTMP 重定向到另外一個從 HTTP 返回頭裏獲取到的 application。不然(其餘狀態碼)鏈接丟棄。
注意這一指令在 application 域是不容許的,由於 application 在鏈接階段仍是未知的。
HTTP 請求接收到一些參數。在 application/x-www-form-urlencoded MIME 類型下使用 POST 方法。如下參數將被傳給調用者:
* call=connect。
* addr - 客戶端 IP 地址。
* app - application 名。
* flashVer - 客戶端 flash 版本。
* swfUrl - 客戶端 swf url。
* tcUrl - tcUrl。
* pageUrl - 客戶端頁面 url。
除了上述參數之外,全部顯式傳遞給鏈接命令的參數也由回調發送。你應該將鏈接參數和 play/publish 參數區分開。播放器經常有獨特的方式設置鏈接字符串不一樣於 play/publish 流名字。這裏是 JWPayer 是如何設置這些參數的一個示例:linux

... streamer: "rtmp://localhost/myapp?connarg1=a&connarg2=b", file: "mystream?strarg1=c&strarg2=d", ...

Ffplay(帶有 librtmp)示例:nginx

ffplay "rtmp://localhost app=myapp?connarg1=a&connarg2=b playpath=mystream?strarg1=c&strarg2=d"

使用例子:
on_connect http://example.com/my_auth;
重定向例子:
location /on_connect {
    if ($arg_flashver != "my_secret_flashver") {
        rewrite ^.*$ fallback? permanent;
    }
    return 200;
}

on_play
語法:on_play url
上下文:rtmp, server, application
描述:設置 HTTP 播放回調。每次一個客戶分發播放命令時,一個 HTTP 請求異步發送,命令處理會掛起 - 直到它返回結果碼。以後再解析 HTTP 結果碼。
* HTTP 2XX 返回碼的話繼續 RTMP 會話。
* HTTP 3XX 返回碼的話 重定向 RTMP 到另外一個流,這個流的名字在 HTTP 返回頭的 Location 獲取。若是新流的名字起始於 rtmp:// 而後遠程 relay 會被建立。relay 要求 IP 地址是指定的而不是域名,而且只工做在 1.3.10 版本以上的 nginx。另請參考 notify_relay_redirect。
* 其餘返回碼的話 RTMP 鏈接丟棄。
重定向例子:
http {
    ...
    location /local_redirect {
        rewrite ^.*$ newname? permanent;
    }
    location /remote_redirect {
        # no domain name here, only ip
        rewrite ^.*$ rtmp://192.168.1.123/someapp/somename? permanent;
    }
    ...
}


rtmp {
    ...
    application myapp1 {
        live on;
        # stream will be redirected to 'newname'
        on_play http://localhost:8080/local_redirect;
    }
    application myapp2 {
        live on;
        # stream will be pulled from remote location
        # requires nginx >= 1.3.10
        on_play http://localhost:8080/remote_redirect;
    }
    ...
}

HTTP 請求接收到一些個參數。在 application/x-www-form-urlencoded MIME 類型下使用 POST 方法。如下參數會被傳送給調用者:
* call=play。
* addr - 客戶端 IP 地址。
* app - application 名。
* flashVer - 客戶端 flash 版本。
* swfUrl - 客戶端 swf url。
* tcUrl - tcUrl。
* pageUrl - 客戶端頁面 url。
* name - 流名。
出了上述參數以外其餘全部播放命令參數顯式地發送回調。例如若是一個流由 url rtmp://localhost/app/movie?a=100&b=face&foo=bar 訪問,而後呢 a,b 和 foo 發送回調。
on_play http://example.com/my_callback;
on_publish
語法:on_publish url
上下文:rtmp, server, application
描述:同上面提到的 on_play 同樣,惟一的不一樣點在於這個指令在發佈命令設置回調。不一樣於遠程 pull,push 在這裏是能夠的。
on_done
語法:on_done url
上下文:rtmp, server, application
描述:設置播放/發佈禁止回調。上述全部適用於此。但這個回調並不檢查 HTTP 狀態碼。
on_play_done
語法:on_publish_done url
上下文:rtmp, server, application
描述:等同於 on_done 的表現,但只適用於播放結束事件。
on_publish_done
語法:on_publish_done url
上下文:rtmp, server, application
描述:等同於 on_done 的表現,但只適用於發佈結束事件。
on_record_done
語法:on_record_done url
上下文:rtmp, server, application, recorder
描述:設置 record_done 回調。除了普通 HTTP 回調參數它接受錄製文件路徑。
on_record_done http://example.com/recorded;
on_update
語法:on_update url
上下文:rtmp, server, application
描述:設置 update 回調。這個回調會在 notify_update_timeout 期間調用。若是一個請求返回結果不是 2XX,鏈接禁止。這能夠用來同步過時的會話。追加 time 參數即播放/發佈調用後的秒數會被髮送給處理程序。
on_update http://example.com/update;
notify_update_timeout
語法:notify_update_timeout timeout
上下文:rtmp, server, application
描述:在 on_update 回調之間的超時設置。默認爲 30 秒。
notify_update_timeout 10s;
on_update http://example.com/update;

notify_update_strict
語法:notify_update_strict on|off
上下文:rtmp, server, application
描述:切換 on_update 回調嚴格模式。默認爲 off。當設置爲 on 時,全部鏈接錯誤,超時以及 HTTP 解析錯誤和空返回會被視爲更新失敗並致使鏈接終止。當設置爲 off 時只有 HTTP 返回碼不一樣於 2XX 時致使失敗。
notify_update_strict on;
on_update http://example.com/update;

notify_relay_redirect
語法:notify_relay_redirect on|off
上下文:rtmp, server, application
描述:使本地流能夠重定向爲 on_play 和 on_publish 遠程重定向。新的流名字是 RTMP URL 用於遠程重定向。默認爲 off。
notify_relay_redirect on;
notify_method
語法:notify_method get|post
上下文:rtmp, server, application, recorder
描述:設置 HTTP 方法通知。默認是帶有 application/x-www-form-urlencoded 的 POST 內容類型。在一些狀況下 GET 更好,例如若是你打算在 nginx 的 http{} 部分處理調用。在這種狀況下你可使用 arg_* 變量去訪問參數。
notify_method get;
在 http{} 部分使用 GET 方法處理通知可使用這種方法:
location /on_play {
    if ($arg_pageUrl ~* localhost) {
        return 200;
    }
    return 500;
}

HLS
hls
語法:hls on|off
上下文:rtmp, server, application
描述:在 application 切換 HLS。
hls on;
hls_path /tmp/hls;
hls_fragment 15s;

在 http{} 段爲客戶端播放 HLS 設置在如下位置設置:
http {
    ...
    server {
        ...
        location /hls {
            types {
                application/vnd.apple.mpegurl m3u8;
            }
            alias /tmp/hls;
        }
    }
}

hls_path
語法:hls_path path
上下文:rtmp, server, application
描述:設置 HLS 播放列表和分段目錄。這一目錄必須在 NGINX 啓動前就已存在。
hls_fragment
語法:hls_fragment time
上下文:rtmp, server, application
描述:設置 HLS 分段長度。默認爲 5 秒鐘。
hls_playlist_length
語法:hls_playlist_length time
上下文:rtmp, server, application
描述:設置 HLS 播放列表長度。默認爲 30 秒鐘。
hls_playlist_length 10m;
hls_sync
語法:hls_sync time
上下文:rtmp, server, application
描述:設置 HLS 時間戳同步閾值。默認爲 2 ms。這一功能能夠防止由低分辨率 RTMP (1KHz) 轉換到高分辨率 MPEG-TS (90KHz) 以後出現噪音。
hls_sync 100ms;
hls_continuous
語法:hls_continuous on|off
上下文:rtmp, server, application
描述:切換 HLS 連續模式。這一模式下 HLS 序列號由其上次中止的最後時間開始。老的分段保留下來。默認爲 off。
hls_continuous on;
hls_nested
語法:hls_nested on|off
上下文:rtmp, server, application
描述:切換 HLS 嵌套模式。這一模式下爲每一個流建立了一個 hls_path 的子目錄。播放列表和分段在那個子目錄中建立。默認爲 off。
hls_nested on;
hls_cleanup
語法:hls_cleanup on|off
上下文:rtmp, server, application
描述:切換 HLS 清理。這一功能默認爲開啓的。在這一模式下 nginx 緩存管理進程將老的 HLS 片斷和播放列表由 HLS 清理掉。
hls_cleanup off;
Access log
access_log
語法:access_log off|path [format_name]
上下文:rtmp, server, application
描述:設置訪問日誌參數。日誌默認是開啓的。關閉日誌可使用 access_log off 指令。默認狀況下訪問日誌和 HTTP 訪問日誌 logs/access.log 放到同一文件。你也可使用 access_log 指令將其定義到其餘日誌文件。第二個參數是可選的。能夠根據名字來定義日誌格式。請參考 log_format 指令來獲取更多關於格式的詳細信息。
log_format new '$remote_addr';
access_log logs/rtmp_access.log new;
access_log logs/rtmp_access.log;
access_log off;

log_format
語法:log_format format_name format
上下文:rtmp
描述:建立指定的日誌格式。日誌格式看起來很像 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
語法:max_connections number
上下文:rtmp, server, application
描述:爲 rtmp 引擎設置最大鏈接數。默認爲 off。
max_connections 100;
Statistics
statistics 模塊不一樣於本文列舉的其餘模塊,它是 NGINX HTTP 模塊。所以 statistics 指令應該位於 http{} 塊內部。
rtmp_stat
語法:rtmp_stat all
上下文:http, server, location
描述:爲當前 HTTP location 設置 RTMP statistics 處理程序。RTMP statistics 是一個靜態的 XML 文檔。可使用 rtmp_stat_stylesheet 指令在瀏覽器中做爲 XHTML 頁面查看這個文檔。
http {
    server {
        location /stat {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }
        location /stat.xsl {
            root /path/to/stat/xsl/file;
        }
    }
}

rtmp_stat_stylesheet
語法:rtmp_stat_stylesheet path
上下文:http, server, location
描述:添加 XML 樣式表引用到 statistics XML 使其能夠在瀏覽器中可視。更多信息請參考 rtmp_stat 描述和例子。
Multi-worker live streaming
多 worker 直播流是經過推送流到剩餘的 nginx worker 實現的。
rtmp_auto_push
語法:rtmp_auto_push on|off
上下文:root
描述:切換自動推送(多 worker 直播流)模式。默認爲 off。
rtmp_auto_push_reconnect
語法:rtmp_auto_push_reconnect timeout
上下文:root
描述:當 worker 被幹掉時設置自動推送鏈接超時時間。默認爲 100 毫秒。
rtmp_socket_dir
語法:rtmp_socket_dir dir
上下文:root
描述:設置用於流推送的 UNIX 域套接字目錄。默認爲 /tmp。
rtmp_auto_push on;
rtmp_auto_push_reconnect 1s;
rtmp_socket_dir /var/sock;


rtmp {
    server {
        listen 1935;
        application myapp {
            live on;
        }
    }
}

Control
control 模塊是 NGINX HTTP 模塊,應該放在 http{} 塊以內。
rtmp_control
語法:rtmp_control all
上下文:http, server, location
描述:爲當前 HTTP location 設置 RTMP 控制程序。
http {
    server {
        location /control {
            rtmp_control all;
        }
    }
}

轉自:http://blog.csdn.net/defonds/article/details/9274479瀏覽器

相關文章
相關標籤/搜索