nginx-rtmp 配置詳解

譯序:截至 Jul 8th,2013 官方公布的最新 Nginx RTMP 模塊 nginx-rtmp-module 指令詳解蜒犯。
原文地址:https://www.cnblogs.com/lidabo/p/7099501.html
指令
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 添加一個監(jiān)聽端口以接收 RTMP 連接。
server {
listen 1935;
}

application
語法:application name { ... }
上下文:server
描述:創(chuàng)建一個 RTMP 應用梨水。application 名的模式并不類似于 http location。
server {
listen 1935;
application myapp {
}
}

timeout
語法:timeout value
上下文:rtmp, server
描述:Socket 超時。這個值主要用于寫數(shù)據(jù)時迄薄。大多數(shù)情況下,RTMP 模塊并不期望除 publisher 端口之外的其他端口處于活動狀態(tài)煮岁。如果你想要快速關(guān)掉 socket 可以用 keepalive 或者 RTMP ping 等讥蔽。timeout 默認值為 1 分鐘。
timeout 60s;
ping
語法:ping value
上下文:rtmp, server
描述:RTMP ping 間隔画机。零值的話將 ping 關(guān)掉冶伞。RTMP ping 是一個用于檢查活動連接的協(xié)議功能。發(fā)送一個特殊的包到遠程連接步氏,然后在 ping_timeout 指令指定的時間內(nèi)期待一個回復响禽。如果在這個時間里沒有收到 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
描述:設(shè)置 RTMP 流的最大數(shù)目梗肝。數(shù)據(jù)流被整合到一個單一的數(shù)據(jù)流里。不同的頻道用于發(fā)送命令铺董、音頻巫击、視頻等。默認值為 32精续,適用于大多數(shù)情況坝锰。
max_streams 32;
ack_window
語法:ack_window value
上下文:rtmp, server
描述:設(shè)置 RTMP 確認視窗大小。這是對端發(fā)送確認包到遠端后應該收到的字節(jié)數(shù)量重付。默認值為 5000000顷级。
ack_window 5000000;
chunk_size
語法:chunk_size value
上下文:rtmp, server
描述:流整合的最大的塊大小。默認值為 4096确垫。這個值設(shè)置的越大 CPU 負載就越小弓颈。這個值不能低于 128。
chunk_size 4096;
max_queue
語法:max_queue value
上下文:rtmp, server
描述:輸入數(shù)據(jù)報文最大尺寸删掀。所有輸入數(shù)據(jù)會被分割成報文(然后進一步分割為塊)翔冀。報文在處理結(jié)束之前會放在內(nèi)存里。理論上講披泪,接收到的報文很大的話對于服務(wù)器的穩(wěn)定性可能會有影響纤子。默認值 1M 對于大多數(shù)情況就足夠了。
max_message 1M;
out_queue
out_cork
Access
allow
語法:allow [play|publish] address|subnet|all
上下文:rtmp, server, application
允許來自指定地址或者所有地址發(fā)布/播放。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
描述:定義每個流發(fā)布時要執(zhí)行的帶有參數(shù)的外部命令。發(fā)布結(jié)束時進程終止卡乾。第一個參數(shù)應該是二進制可執(zhí)行文件的完整路徑翼悴。關(guān)于這個進程將會做些什么事沒有任何假定。但這一特點在使用 ffmpeg 進行流轉(zhuǎn)換時是很有用的说订。FFmpeg 被假定作為客戶端連接到 nginx-rtmp 然后作為發(fā)布者輸出轉(zhuǎn)換流到 nginx-rtmp抄瓦。類似于 var/{var} 形式的替換可以在命令行使用:

  • $name - 流的名字潮瓶。
  • $app - 應用名陶冷。
  • $addr - 客戶端地址。
  • $flashver - 客戶端 flash 版本毯辅。
  • $swfurl - 客戶端 swf url埂伦。
  • $tcurl - 客戶端 tc url。
  • $pageurl - 客戶端頁面 url思恐。
    可以在 exec 指令中定義 Shell 格式的轉(zhuǎn)向符用于寫輸出和接收輸入沾谜。支持如下
  • 截斷輸出 >file。
  • 附加輸出 >>file胀莹。
  • 重定向描述符類似于 1>&2基跑。
  • 輸入 <file。
    以下 ffmpeg 調(diào)用將輸入流轉(zhuǎn)碼為 HLS-ready 流(H264/AAC)描焰。運行這個示例媳否,F(xiàn)Fmpeg 須編譯為支持 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
描述:設(shè)置進程終止信號掺逼。默認為 kill(SIGKILL)。你可以定義為數(shù)字或者符號名(POSIX.1-1990 信號)瓤介。
exec_kill_signal term;
exec_kill_signal usr1;
exec_kill_signal 3;

respawn
語法:respawn on|off
上下文:rtmp, server, application
描述:如果打開 respawn 子進程吕喘,進程終止時發(fā)布會仍然繼續(xù)。默認為打開刑桑。
respawn off;
respawn_timeout
語法:respawn_timeout timeout
上下文:rtmp, server, application
描述:啟動新的子實例之前氯质,設(shè)置 respawn 超時時間。默認為五秒漾月。
respawn_timeout 10s;
exec_publish
語法:exec_publish command arg*
上下文:rtmp, server, application
描述:指定發(fā)布事件觸發(fā)的帶有參數(shù)的外部命令病梢。返回碼是未解析的。這里可以用 exec 替換。另外蜓陌,args 變量支持持有查詢字符串參數(shù)觅彰。
exec_play
語法:exec_play command arg*
上下文:rtmp, server, application
描述:指定播放事件觸發(fā)的帶有參數(shù)的外部命令。返回碼是未解析的钮热。替換列表同 exec_publish填抬。
exec_play_done
語法:exec_play_done command arg*
上下文:rtmp, server, application
描述:指定播放結(jié)束事件觸發(fā)的帶有參數(shù)的外部命令。返回碼是未解析的隧期。替換列表同 exec_publish飒责。
exec_publish_done
語法:exec_publish_done command arg*
上下文:rtmp, server, application
描述:指定發(fā)布結(jié)束事件觸發(fā)的帶有參數(shù)的外部命令。返回碼是未解析的仆潮。替換列表同 exec_publish宏蛉。
exec_record_done
語法:exec_record_done command arg*
上下文:rtmp, server, application, recorder
描述:指定錄制結(jié)束時觸發(fā)的帶有參數(shù)的外部命令。這里支持 exec_publish 的替代以及額外的變量 path 和 recorder性置。
**# track client info
exec_play bash -c "echo addrpageurl >> /tmp/clients";
exec_publish bash -c "echo addrflashver >> /tmp/publishers";

convert recorded file to mp4 format

exec_record_done ffmpeg -y -i path -acodec libmp3lame -ar 44100 -ac 1 -vcodec libx264path.mp4;**
Live
live
語法:live on|off
上下文:rtmp, server, application
描述:切換直播模式拾并,即一對多廣播。
live on;
meta
語法:meta on|off
上下文:rtmp, server, application
描述:切換發(fā)送元數(shù)據(jù)到客戶端鹏浅。默認為 on嗅义。
meta off;
interleave
語法:interleave on|off
上下文:rtmp, server, application
描述:切換交叉模式。在這個模式下隐砸,音頻和視頻數(shù)據(jù)會在同一個 RTMP chunk 流中傳輸之碗。默認為 off。
interleave on;
wait_key
語法:wait_key on|off
上下文:rtmp, server, application
描述:使視頻流從一個關(guān)鍵幀開始季希。默認為 off褪那。
wait_key on;
wait_video
語法:wait_video on|off
上下文:rtmp, server, application
描述:在第一個視頻幀發(fā)送之前禁用音頻。默認為 off胖眷∥渫ǎ可以和 wait_key 進行組合以使客戶端可以收到具有所有其他數(shù)據(jù)的視頻關(guān)鍵幀。然而這通常增加連接延遲珊搀。您可以通過在編碼器中調(diào)整關(guān)鍵幀間隔來減少延遲冶忱。
wait_video on;
publish_notify
語法:publish_notify on|off
上下文:rtmp, server, application
描述:發(fā)送 NetStream.Publish.Start 和 NetStream.Publish.Stop 給用戶。默認為 off境析。
publish_notify on;
drop_idle_publisher
語法:drop_idle_publisher timeout
上下文:rtmp, server, application
描述:終止指定時間內(nèi)閑置(沒有音頻/視頻數(shù)據(jù))的發(fā)布連接囚枪。默認為 off。注意這個僅僅對于發(fā)布模式的連接起作用(發(fā)送 publish 命令之后)劳淆。
drop_idle_publisher 10s;
sync
語法:sync timeout
上下文:rtmp, server, application
描述:同步音頻和視頻流链沼。如果用戶帶寬不足以接收發(fā)布率,服務(wù)器會丟棄一些幀沛鸵。這將導致同步問題括勺。當時間戳差超過 sync 指定的值缆八,將會發(fā)送一個絕對幀來解決這個問題。默認為 300 ms疾捍。
sync 10ms;
play_restart
語法:play_restart on|off
上下文:rtmp, server, application
描述:使 nginx-rtmp 能夠在發(fā)布啟動或停止時發(fā)送 NetStream.Play.Start 和 NetStream.Play.Stop 到每個用戶奈辰。如果關(guān)閉的話,那么每個用戶就只能在回放的開始和結(jié)束時收到這些通知了乱豆。默認為 on奖恰。
play_restart off;
Record
record
語法:record [off|all|audio|video|keyframes|manual]*
上下文:rtmp, server, application, recorder
描述:切換錄制模式。流可以被記錄到 flv 文件宛裕。本指令指定應該被記錄的:

  • off - 什么也不錄制
  • all - 音頻和視頻(所有)
  • audio - 音頻
  • video - 視頻
  • keyframes - 只錄制關(guān)鍵視頻幀
  • 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
描述:設(shè)置錄制文件后綴名蛹屿。默認為 '.flv'。
record_suffix _recorded.flv;
錄制后綴可以匹配 strftime 格式疲酌。以下指令
record_suffix -%d-%b-%y-%T.flv
將會產(chǎn)生形如 mystream-24-Apr-13-18:23:38.flv 的文件蜡峰。所有支持 strftime 格式的選項可以在 strftime man page 里進行查找。
record_unique
語法:record_unique on|off
上下文:rtmp, server, application, recorder
描述:是否添加時間戳到錄制文件朗恳。否則的話同樣的文件在每一次新的錄制發(fā)生時將被重寫。默認為 off载绿。
record_unique on;
record_append
語法:record_append on|off
上下文:rtmp, server, application, recorder
描述:切換文件附加模式粥诫。當這一指令為開啟是,錄制時將把新數(shù)據(jù)附加到老文件崭庸,如果老文件丟失的話將重新創(chuàng)建一個怀浆。文件中的老數(shù)據(jù)和新數(shù)據(jù)沒有時間差。默認為 off怕享。
record_append on;
record_lock
語法:record_lock on|off
上下文:rtmp, server, application, recorder
描述:當這一指令開啟時执赡,當前錄制文件將被 fcntl 調(diào)用鎖定。那樣可以在其他地方來核實哪個文件正在進行錄制函筋。默認為 off沙合。
record_lock on;
在 FreeBSD 上你可以使用 flock 工具檢查。在 Linux 上 flock 和 fcntl 無關(guān)跌帐,因此你需要去寫一個簡單的腳本來檢查文件的鎖定狀態(tài)首懈。以下 isunlocked.py 是一個這樣的腳本的示例。

[python] view plain copy

  1. !/usr/bin/python

  2. import fcntl, sys

  3. sys.stderr.close()

  4. fcntl.lockf(open(sys.argv[1], "a"), fcntl.LOCK_EX|fcntl.LOCK_NB)

record_max_size
語法:record_max_size size
上下文:rtmp, server, application, recorder
描述:設(shè)置錄制文件的最大值谨敛。
record_max_size 128K;
record_max_frames
語法:record_max_frames nframes
上下文:rtmp, server, application, recorder
描述:設(shè)置每個錄制文件的視頻幀的最大數(shù)量究履。
record_max_frames 2;
record_interval
語法:record_interval time
上下文:rtmp, server, application, recorder
描述:在這個指令指定數(shù)量的(毫秒)秒之后重啟錄制。默認為 off脸狸。設(shè)置為 0 的話意味著錄制中無延遲最仑。如果 record_unique 為 off 的話所有記錄片段會被寫到同一個文件。否則(文件名)將附以時間戳以區(qū)分不同文件(給定的 record_interval 要大于 1 秒)。
**record_interval 1s;

record_interval 15m;**
recorder
語法:recorder name {...}
上下文:application
描述:創(chuàng)建錄制塊泥彤∥商拢可以在單個 application 中創(chuàng)建多個記錄。上文提到的所有錄制相關(guān)的指令都可以在 recorder{} 塊中進行定義全景。繼承高層次中的所有設(shè)置耀石。
**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
描述:切換當定義錄制啟動或停止文件時發(fā)送 NetStream.Record.Start 和 NetStream.Record.Stop 狀態(tài)信息(onStatus)到發(fā)布者。狀態(tài)描述字段保存錄制的名字(默認錄制的話為空)爸黄。默認為 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 文件。如果此參數(shù)前綴是 http:// 那么就認為文件可以在播放前從遠程 http 地址下載下來炕贵。注意播放是在整個文件下載完畢之后才開始梆奈。你可以使用本地 nginx 在本地機器緩存文件。
同一個 play 指令可以定義多個播放地址称开。當多個 play 指令定義時亩钟,地址列表將被合并,并進行從更高域中繼承鳖轰。嘗試播放每一個地址清酥,直到發(fā)現(xiàn)一個成功的地址。如果沒有找到成功地址蕴侣,將發(fā)送錯誤狀態(tài)到客戶端焰轻。
索引的 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:

[plain] view plain copy

  1. ffplay rtmp://localhost/vod/dir/file.flv

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

play_local_path
語法:play_local_path dir
上下文:rtmp, server, application
描述:設(shè)置遠程 VOD 文件完全下載之后復制于 play_temp_path 之后的路徑挽封∫亚颍空值的話禁用此功能。默認為控制场仲。這個功能可以用于緩存遠程文件在本地和悦。
這一路徑應該和 play_temp_path 處于同一設(shè)備。
**# 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
描述:創(chuàng)建 pull 中繼渠缕。流將從遠程服務(wù)器上拉下來鸽素,成為本地可用的。僅當至少有一個播放器正在播放本地流時發(fā)生亦鳞。
Url 語法:[rtmp://]host[:port][/app[/playpath]]馍忽。如果 application 找不著那么將會使用本地 application 名棒坏。如果找不著 playpath 那么就是用當前流的名字。
支持以下參數(shù):

  • app - 明確 application 名遭笋。
  • name - 捆綁到 relay 的本地流名字坝冕。如果為空或者沒有定義,那么將會使用 application 中的所有本地流瓦呼。
  • tcUrl - 如果為空的話自動構(gòu)建喂窟。
  • pageUrl - 模擬頁面 url。
  • swfUrl - 模擬 swf url央串。
  • flashVer - 模擬 flash 版本磨澡,默認為 'LNX.11,1,102,55'。
  • playPath - 遠程播放地址质和。
  • live - 切換直播特殊行為稳摄,值:0,1。
  • start - 開始時間饲宿。
  • stop - 結(jié)束時間厦酬。
  • static - 創(chuàng)建靜態(tài) pull,這樣的 pull 在 nginx 啟動時創(chuàng)建瘫想。
    如果某參數(shù)的值包含空格仗阅,那么你應該在整個 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 推送發(fā)布流到遠程服務(wù)器。
push_reconnect
語法:push_reconnect time
上下文:rtmp, server, application
描述:在斷開連接后支竹,在 push 重新連接前等待的時間。默認為 3 秒鸠按。
push_reconnect 1s;
session_relay
語法:session_relay on|off
上下文:rtmp, server, application
描述:切換會話 relay 模式礼搁。在這種模式下連接關(guān)閉時 relay 銷毀。當設(shè)置為 off 時目尖,流關(guān)閉馒吴,relay 銷毀,這樣子以后另一個 relay 可以被創(chuàng)建瑟曲。默認為 off饮戳。
session_relay on;
Notify
on_connect
語法:on_connect url
上下文:rtmp, server
描述:設(shè)置 HTTP 連接回調(diào)。當客戶分發(fā)連接命令一個連接命令時洞拨,一個 HTTP 請求異步發(fā)送扯罐,命令處理將被暫停,直到它返回結(jié)果代碼。當 HTTP 2XX 碼(成功狀態(tài)碼)返回時烦衣,RTMP 會話繼續(xù)歹河。返回碼 3XX (重定向狀態(tài)碼)會使 RTMP 重定向到另一個從 HTTP 返回頭里獲取到的 application掩浙。否則(其他狀態(tài)碼)連接丟棄。
注意這一指令在 application 域是不允許的秸歧,因為 application 在連接階段還是未知的厨姚。
HTTP 請求接收到一些參數(shù)。在 application/x-www-form-urlencoded MIME 類型下使用 POST 方法键菱。以下參數(shù)將被傳給調(diào)用者:

  • call=connect谬墙。
  • addr - 客戶端 IP 地址。
  • app - application 名经备。
  • flashVer - 客戶端 flash 版本拭抬。
  • swfUrl - 客戶端 swf url。
  • tcUrl - tcUrl弄喘。
  • pageUrl - 客戶端頁面 url玖喘。
    除了上述參數(shù)以外,所有顯式傳遞給連接命令的參數(shù)也由回調(diào)發(fā)送蘑志。你應該將連接參數(shù)和 play/publish 參數(shù)區(qū)分開累奈。播放器常常有獨特的方式設(shè)置連接字符串不同于 play/publish 流名字。這里是 JWPayer 是如何設(shè)置這些參數(shù)的一個示例:

[plain] view plain copy

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

Ffplay(帶有 librtmp)示例:

[plain] view plain copy

  1. 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
描述:設(shè)置 HTTP 播放回調(diào)急但。每次一個客戶分發(fā)播放命令時澎媒,一個 HTTP 請求異步發(fā)送,命令處理會掛起 - 直到它返回結(jié)果碼波桩。之后再解析 HTTP 結(jié)果碼戒努。

  • HTTP 2XX 返回碼的話繼續(xù) RTMP 會話。
  • HTTP 3XX 返回碼的話 重定向 RTMP 到另一個流镐躲,這個流的名字在 HTTP 返回頭的 Location 獲取储玫。如果新流的名字起始于 rtmp:// 然后遠程 relay 會被創(chuàng)建。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 請求接收到一些個參數(shù)端礼。在 application/x-www-form-urlencoded MIME 類型下使用 POST 方法。以下參數(shù)會被傳送給調(diào)用者:

  • call=play入录。
  • addr - 客戶端 IP 地址蛤奥。
  • app - application 名。
  • flashVer - 客戶端 flash 版本僚稿。
  • swfUrl - 客戶端 swf url凡桥。
  • tcUrl - tcUrl。
  • pageUrl - 客戶端頁面 url贫奠。
  • name - 流名唬血。
    出了上述參數(shù)之外其他所有播放命令參數(shù)顯式地發(fā)送回調(diào)望蜡。例如如果一個流由 url rtmp://localhost/app/movie?a=100&b=face&foo=bar 訪問,然后呢 a,b 和 foo 發(fā)送回調(diào)拷恨。
    on_play http://example.com/my_callback;
    on_publish
    語法:on_publish url
    上下文:rtmp, server, application
    描述:同上面提到的 on_play 一樣脖律,唯一的不同點在于這個指令在發(fā)布命令設(shè)置回調(diào)。不同于遠程 pull腕侄,push 在這里是可以的小泉。
    on_done
    語法:on_done url
    上下文:rtmp, server, application
    描述:設(shè)置播放/發(fā)布禁止回調(diào)。上述所有適用于此冕杠。但這個回調(diào)并不檢查 HTTP 狀態(tài)碼微姊。
    on_play_done
    語法:on_publish_done url
    上下文:rtmp, server, application
    描述:等同于 on_done 的表現(xiàn),但只適用于播放結(jié)束事件分预。
    on_publish_done
    語法:on_publish_done url
    上下文:rtmp, server, application
    描述:等同于 on_done 的表現(xiàn)兢交,但只適用于發(fā)布結(jié)束事件。
    on_record_done
    語法:on_record_done url
    上下文:rtmp, server, application, recorder
    描述:設(shè)置 record_done 回調(diào)笼痹。除了普通 HTTP 回調(diào)參數(shù)它接受錄制文件路徑配喳。
    on_record_done http://example.com/recorded;
    on_update
    語法:on_update url
    上下文:rtmp, server, application
    描述:設(shè)置 update 回調(diào)。這個回調(diào)會在 notify_update_timeout 期間調(diào)用凳干。如果一個請求返回結(jié)果不是 2XX晴裹,連接禁止。這可以用來同步過期的會話救赐。追加 time 參數(shù)即播放/發(fā)布調(diào)用后的秒數(shù)會被發(fā)送給處理程序涧团。
    on_update http://example.com/update;
    notify_update_timeout
    語法:notify_update_timeout timeout
    上下文:rtmp, server, application
    描述:在 on_update 回調(diào)之間的超時設(shè)置。默認為 30 秒经磅。
    notify_update_timeout 10s;
    on_update http://example.com/update;

    notify_update_strict
    語法:notify_update_strict on|off
    上下文:rtmp, server, application
    描述:切換 on_update 回調(diào)嚴格模式泌绣。默認為 off。當設(shè)置為 on 時预厌,所有連接錯誤赞别,超時以及 HTTP 解析錯誤和空返回會被視為更新失敗并導致連接終止。當設(shè)置為 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
    描述:設(shè)置 HTTP 方法通知。默認是帶有 application/x-www-form-urlencoded 的 POST 內(nèi)容類型鞠绰。在一些情況下 GET 更好腰埂,例如如果你打算在 nginx 的 http{} 部分處理調(diào)用。在這種情況下你可以使用 arg_* 變量去訪問參數(shù)蜈膨。
    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 設(shè)置在以下位置設(shè)置: **http { ... server { ... location /hls { types { application/vnd.apple.mpegurl m3u8; } alias /tmp/hls; } } }** hls_path 語法:hls_path path 上下文:rtmp, server, application 描述:設(shè)置 HLS 播放列表和分段目錄牺荠。這一目錄必須在 NGINX 啟動前就已存在。 hls_fragment 語法:hls_fragment time 上下文:rtmp, server, application 描述:設(shè)置 HLS 分段長度驴一。默認為 5 秒鐘休雌。 hls_playlist_length 語法:hls_playlist_length time 上下文:rtmp, server, application 描述:設(shè)置 HLS 播放列表長度。默認為 30 秒鐘肝断。 **hls_playlist_length 10m;** hls_sync 語法:hls_sync time 上下文:rtmp, server, application 描述:設(shè)置 HLS 時間戳同步閾值杈曲。默認為 2 ms疏虫。這一功能可以防止由低分辨率 RTMP (1KHz) 轉(zhuǎn)換到高分辨率 MPEG-TS (90KHz) 之后出現(xiàn)噪音绽乔。 **hls_sync 100ms;** hls_continuous 語法:hls_continuous on|off 上下文:rtmp, server, application 描述:切換 HLS 連續(xù)模式龄广。這一模式下 HLS 序列號由其上次停止的最后時間開始洛口。老的分段保留下來治专。默認為 off语婴。 **hls_continuous on;** hls_nested 語法:hls_nested on|off 上下文:rtmp, server, application 描述:切換 HLS 嵌套模式榜田。這一模式下為每個流創(chuàng)建了一個 hls_path 的子目錄填大。播放列表和分段在那個子目錄中創(chuàng)建首有。默認為 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 描述:設(shè)置訪問日志參數(shù)。日志默認是開啟的低矮。關(guān)閉日志可以使用 access_log off 指令印叁。默認情況下訪問日志和 HTTP 訪問日志 logs/access.log 放到同一文件。你也可以使用 access_log 指令將其定義到其他日志文件军掂。第二個參數(shù)是可選的轮蜕。可以根據(jù)名字來定義日志格式蝗锥。請參考 log_format 指令來獲取更多關(guān)于格式的詳細信息跃洛。 **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
    描述:創(chuàng)建指定的日志格式。日志格式看起來很像 nginx HTTP 日志格式终议。日志格式里支持的幾個變量有:
  • connection - 連接數(shù)汇竭。
  • remote_addr - 客戶端地址。
  • app - application 名穴张。
  • name - 上一個流名细燎。
  • args - 上一個流播放/發(fā)布參數(shù)。
  • flashver - 客戶端 flash 版本皂甘。
  • swfurl - 客戶端 swf url玻驻。
  • tcurl - 客戶端 tcUrl。
  • pageurl - 客戶端頁面 url偿枕。
  • command - 客戶端發(fā)送的播放/發(fā)布命令:NONE璧瞬、PLAY户辫、PUBLISH、PLAY+PUBLISH嗤锉。
  • bytes_sent - 發(fā)送到客戶端的字節(jié)數(shù)渔欢。
  • bytes_received - 從客戶端接收到的字節(jié)數(shù)。
  • time_local - 客戶端連接結(jié)束的本地時間档冬。
  • session_time - 持續(xù)連接的秒數(shù)膘茎。
  • session_readable_time - 在可讀格式下的持續(xù)時間。
    默認的日志格式叫做 combined酷誓。這里是這一格式的定義:
    remote_addr [time_local] command "app" "name" "args" -
    bytes_receivedbytes_sent "pageurl" "flashver" ($session_readable_time)

    Limits
    max_connections
    語法:max_connections number
    上下文:rtmp, server, application
    描述:為 rtmp 引擎設(shè)置最大連接數(shù)披坏。默認為 off。
    max_connections 100;
    Statistics
    statistics 模塊不同于本文列舉的其他模塊盐数,它是 NGINX HTTP 模塊棒拂。因此 statistics 指令應該位于 http{} 塊內(nèi)部。
    rtmp_stat
    語法:rtmp_stat all
    上下文:http, server, location
    描述:為當前 HTTP location 設(shè)置 RTMP statistics 處理程序玫氢。RTMP statistics 是一個靜態(tài)的 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 實現(xiàn)的生逸。
    rtmp_auto_push
    語法:rtmp_auto_push on|off
    上下文:root
    描述:切換自動推送(多 worker 直播流)模式牢屋。默認為 off。
    rtmp_auto_push_reconnect
    語法:rtmp_auto_push_reconnect timeout
    上下文:root
    描述:當 worker 被干掉時設(shè)置自動推送連接超時時間槽袄。默認為 100 毫秒烙无。
    rtmp_socket_dir
    語法:rtmp_socket_dir dir
    上下文:root
    描述:設(shè)置用于流推送的 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{} 塊之內(nèi)。
rtmp_control
語法:rtmp_control all
上下文:http, server, location
描述:為當前 HTTP location 設(shè)置 RTMP 控制程序乾戏。
http {
server {
location /control {
rtmp_control all;
}
}
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末迂苛,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鼓择,更是在濱河造成了極大的恐慌灾部,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惯退,死亡現(xiàn)場離奇詭異,居然都是意外死亡从藤,警方通過查閱死者的電腦和手機催跪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門锁蠕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人懊蒸,你說我怎么就攤上這事荣倾。” “怎么了骑丸?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵舌仍,是天一觀的道長。 經(jīng)常有香客問我通危,道長铸豁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任菊碟,我火速辦了婚禮节芥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘逆害。我一直安慰自己头镊,他們只是感情好,可當我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布魄幕。 她就那樣靜靜地躺著相艇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪纯陨。 梳的紋絲不亂的頭發(fā)上坛芽,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天,我揣著相機與錄音队丝,去河邊找鬼靡馁。 笑死,一個胖子當著我的面吹牛机久,可吹牛的內(nèi)容都是我干的臭墨。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼膘盖,長吁一口氣:“原來是場噩夢啊……” “哼胧弛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起侠畔,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤结缚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后软棺,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體红竭,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了茵宪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片最冰。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖稀火,靈堂內(nèi)的尸體忽然破棺而出暖哨,到底是詐尸還是另有隱情,我是刑警寧澤凰狞,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布篇裁,位于F島的核電站,受9級特大地震影響赡若,放射性物質(zhì)發(fā)生泄漏达布。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一斩熊、第九天 我趴在偏房一處隱蔽的房頂上張望往枣。 院中可真熱鬧,春花似錦粉渠、人聲如沸分冈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽雕沉。三九已至,卻和暖如春去件,著一層夾襖步出監(jiān)牢的瞬間坡椒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工尤溜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留倔叼,地道東北人。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓宫莱,卻偏偏與公主長得像丈攒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子授霸,可洞房花燭夜當晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容