Application 創(chuàng)建一個(gè)RTMP應(yīng)用,這里有點(diǎn)區(qū)別于http的location
Timeout 60s
stocket超時(shí),可以配合keepalive和 ping 值來實(shí)現(xiàn)不讓服務(wù)器端長期處于監(jiān)聽連接客戶端狀態(tài),實(shí)現(xiàn)快速關(guān)掉socket
Ping 3m
ping_timeout 30s
RTMP ping 用于檢查活動(dòng)連接的協(xié)議。發(fā)送一個(gè)特殊的包遠(yuǎn)程連接,在ping_timeout指定時(shí)間內(nèi)期待一個(gè)回復(fù),如果沒有收到回復(fù),連接斷開
max_streams 32
設(shè)置RTMP流的最大數(shù)目,單一流數(shù)據(jù)最大限制,一般默認(rèn)的32就可以了
ack_window 5000000
設(shè)置RTMP窗口的大小
chunk_size 4096
數(shù)據(jù)塊大小 設(shè)置值越大CPU負(fù)載就越小
max_queue
最大隊(duì)列數(shù),一般默認(rèn)即可
max_message 1M
輸入數(shù)據(jù)消息的最大大小。所有輸入數(shù)據(jù)消息都會(huì)保存在內(nèi)存中,等待完成流媒體轉(zhuǎn)發(fā)。在理論上傳入的消息可以是非常大,對服務(wù)器穩(wěn)定性影響較大,所以一般默認(rèn)即可。
out_queue
out_cork
Buflen 5s
設(shè)置默認(rèn)緩沖區(qū)長度。通常客戶端發(fā)送播放前RTMP set_buflen命令并重置該設(shè)置
訪問控制
Access
Allow /deny
允許來自指定地址或者所有地址發(fā)布/播放
Allow public 127.0.0.1
Deny publish all;
Allow play 192.168.0.0 /24
Deny play all;
Exec命令
Exce
exec_options on;
啟動(dòng)一些 exec 指令選項(xiàng),通過一些 exec 事件來干預(yù)整個(gè)RTMP流
可以仔細(xì)一些外部編解碼功能
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,屬于靜態(tài)命令,不支持傳遞上下文參數(shù)
Exec_kill_signal term;
Exec_kill_signal user1;
Exec_kill_signal 3;
Exec_pull
Exec_push
Exec_publish
指定與參數(shù)外部命令要在發(fā)布事件執(zhí)行。
Exec_play
指定與要在打開事件執(zhí)行外部命令
Exec_play_done
指定要在打開完成事件執(zhí)行外部命令
Exec_publish_done
Exec_record_done
例子
exec_play bash -c “ echo $addr $pageurl >> /tmp/clients ”
Exec_publish base -c “ echo $addr $flashver >> /tmp/publishers ”
轉(zhuǎn)錄
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
奇幻發(fā)送元數(shù)據(jù)到客戶端 默認(rèn)on
Interleave on /off
切換交叉模式。在該模式下,音視頻會(huì)在同一個(gè)RTMPchunk流中傳輸。默認(rèn)為off
wait_key on|off
使視頻流從一個(gè)關(guān)鍵幀開始,默認(rèn)為off
wait_video on|off
在一個(gè)視頻幀發(fā)送前禁用音頻。默認(rèn)off
通過wait_key /wait_video 進(jìn)行組合以使客戶端可以收到具有所有其他數(shù)據(jù)的視頻關(guān)鍵幀。但這樣會(huì)增加連接延遲。不過可以通過編解碼器中調(diào)整關(guān)鍵幀間隔來減少延遲。
Publish_notify on
發(fā)送NetStream.Publish.Start和NetStream.Publish.Stop給用戶,默認(rèn)off
Drop_idle_publisher 10s
終止指定時(shí)間內(nèi)閑置(沒有音頻、視頻)的發(fā)布連接,默認(rèn)為off。注意這個(gè)僅僅對于發(fā)布模式的連接起作用(發(fā)送publish命令之后)
Sync 10ms
同步音視頻流。如果用戶帶寬不足以接收發(fā)布率,服務(wù)器會(huì)丟棄一些幀。這將導(dǎo)致同步問題。當(dāng)時(shí)間戳差超過 sync 指定值,將會(huì)發(fā)送一個(gè)絕對幀來解決這個(gè)問題,默認(rèn)為300ms
Play_restart off
使nginx-rtmp能夠在發(fā)布啟動(dòng)或者停止時(shí)發(fā)送NetStream.Play.Start 和 NetStrem.Play.Stop到每個(gè)用戶。如果關(guān)閉的話,那么每個(gè)用戶就只能在回放的開始結(jié)束時(shí)收到該通知了。默認(rèn)為on
Record 模式
Record off|all|audio|video|keyframes|manual
切換錄制模式,流可以被記錄到flv文件
Off 不錄制
All 錄制音頻和視頻
Audio
Video
Keyframes 只錄制關(guān)鍵視頻幀
Manual 不自動(dòng)啟動(dòng)錄制,使用控制接口來進(jìn)行啟動(dòng)和停止
Record_path /tmp/rec
指定錄制的flv文件存放目錄
Record_suffix -%d-%b-%y-%T.flv
錄制后綴strftime格式
Record_unique on|off
是否添加時(shí)間戳到錄制文件,防止文件被覆蓋,默認(rèn)off
record_append on|off
切換文件附加模式。開啟后,錄制時(shí)將新數(shù)據(jù)附加到舊文件后面。默認(rèn)off
record_lock on|off
鎖定文件,調(diào)用系統(tǒng)的fcntl
record_max_size 128K
設(shè)置錄制文件的最大值
Record_max_frames 2
設(shè)置每個(gè)錄制文件的視頻幀最大數(shù)量
Record_interval 1s /15m
在這個(gè)指令指定的時(shí)間之后重啟錄制。默認(rèn)off設(shè)置為0表示錄制中無延遲。如果record_unique為off時(shí)所有的記錄都會(huì)被寫到同一個(gè)文件中。否則就會(huì)以時(shí)間戳區(qū)分在不同文件
Record_notify on|off
奇幻當(dāng)定義錄制啟動(dòng)或者停止文件時(shí)發(fā)送NetStream.Record.Start和NetStream.Record.Stop狀態(tài)信息onStatus到發(fā)布者。
應(yīng)用
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 ;
}
}
創(chuàng)建錄制塊??梢栽趩蝹€(gè)application中創(chuàng)建多個(gè)記錄 。
VOD媒體
Play dir |http: //loc
播放指定目錄或者HTTP地址的flv或者mp4文件。注意HTTP播放是要在整個(gè)文件下載完后才開始播放。同一個(gè)play可以播放多個(gè)視頻地址(用于負(fù)載)。MP4格式要在編解碼都被RTMP支持才可以播放。一般常見的就是H264 /AAC
Application vod{
Play /var/flvs ;
}
Application vod_http{
Play http: //localhost/vod ;
}
Play_temp_path /www
設(shè)置遠(yuǎn)程VOD文件完全下載之后復(fù)制于play_temp_path之后的路徑。空值的話禁用此功能。
Play_local_path dir
在播放前設(shè)置遠(yuǎn)程存儲(chǔ)VOD文件路徑,默認(rèn) /tmp
Play_local_path /tmp/videos ;
Paly /tmp/videos http: //localhost/videos
表示播放視頻,先播放本地緩存,如果沒有的話,從localhost /videos 下載到本地 /tmp/videos 后,在進(jìn)行播放
Relay模式
Pull url [key=value]
創(chuàng)建pull中繼。主要是從遠(yuǎn)程服務(wù)器拉取流媒體。并進(jìn)行重新發(fā)布。
Url語法 [rtmp: // ]host[:port][ /app [ /playpath ]] 如果application找不到那么將會(huì)使用本地application名,如果找不到playpath那么久用當(dāng)前流名稱。
參數(shù)如下(使用Key=Value方式)
app 明確application名
Name 捆綁到relay的bending流名稱。如果為空,那么會(huì)使用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推送發(fā)布流到遠(yuǎn)程服務(wù)器。
Push_reconnect 1s
在斷開連接后,在push重新連接錢等待的時(shí)間,默認(rèn)3秒
Session_relay on;
切換會(huì)話relay模式。在這種情況下關(guān)閉時(shí)relay銷毀。
Notify 模式
這個(gè)功能主要是提供HTTP回調(diào)。當(dāng)發(fā)送一些連接操作是,一個(gè)HTTP請求異步發(fā)送。命令處理會(huì)被暫停掛起,知道它返回結(jié)果代碼。當(dāng)HTTP返回2xx成功狀態(tài)碼時(shí),RTMP會(huì)話繼續(xù)。3xx狀態(tài)碼會(huì)使RTMP重定向到另一個(gè)從HTTP返回頭獲取到的application,否則連接丟失。其他狀態(tài)碼,連接斷開。目前用來做簡單的鑒權(quán)。
On_connect url
設(shè)置HTTP連接回調(diào)。當(dāng)客戶分發(fā)連接命令時(shí)。
例子:
On_connect http: //localhost/my_auth ;
Location /on_connect {
If($arg_flashver != “my_secret_flashver”){
Rewrite ^.*$ fallback?permanent;
}
}
On_play url
設(shè)置HTTP播放回調(diào)。分發(fā)客戶分發(fā)播放命令時(shí)。
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
設(shè)置on_update回調(diào)時(shí)間
Notify_update_strict on|off
Notify_relay_redirect on
Notify_method get
設(shè)置HTTP方法通知,默認(rèn)是application /x-www-form-urlencodeed 的POST內(nèi)容類型。有時(shí)候可能會(huì)需要GET方法,在nginx的http{}部分處理調(diào)用。在這種情況下可以使用arg_*變量去訪問參數(shù)。
例如如果是method為get時(shí)
Location /on_play {
If($arg_pageUrl ~* localhost){
Return 200;
}
Return 500;
}
HLS 模式
Hls on|off
使application 切換HLS協(xié)議直播
Hls_path /tmp/hls ;
設(shè)置HLS播放列表和分段目錄。這一目錄必須在nginx啟動(dòng)前就已經(jīng)存在。
Hls_fragment 15s;
設(shè)置HLS分段長度,默認(rèn)5秒,這個(gè)跟直播延遲有比較大的影響
Hls_playlist_length 20m;
設(shè)置HLS播放列表長度,默認(rèn)30秒。這個(gè)跟直播緩存有關(guān)。
Hls_sync time
設(shè)置HLS時(shí)間戳同步閾值。默認(rèn)2ms。這個(gè)功能防止由低分辨率RTMP(1KHz)轉(zhuǎn)換到高分辨率MPEG-TS(90KHz)之后出現(xiàn)的噪音。
Hls_continuous on|off
切換HLS連續(xù)模式,默認(rèn)off。
Hls_nested on|off
切換HLS嵌套模式。默認(rèn)off。
Hls_cleanup on|off;
切換HLS清理。默認(rèn)on
AccessLog日志
Access_log off|path [format_name]
Log_format new_format ‘$remote_addr';
Access_log logs /rtmp_access .log new_format;
Log_format 指定日志格式
創(chuàng)建指定的日志格式。日志格式看起來很像 nginx HTTP 日志格式。日志格式里支持的幾個(gè)變量有:
* connection - 連接數(shù)。
* remote_addr - 客戶端地址。
* app - application 名。
* name - 上一個(gè)流名。
* args - 上一個(gè)流播放/發(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é)束的本地時(shí)間。
* session_time - 持續(xù)連接的秒數(shù)。
* session_readable_time - 在可讀格式下的持續(xù)時(shí)間。
默認(rèn)的日志格式叫做 combined。這里是這一格式的定義:
$remote_addr [$time_local] $ command "$app" "$name" "$args" -
$bytes_received $bytes_sent "$pageurl" "$flashver" ($session_readable_time)
Limits限制
max_connections number;
設(shè)置rtmp引擎最大連接數(shù),默認(rèn)off
Application hls{
Live on;
Hls on;
Hls_path /tmp/hls ;
Hls_fragment 15s;
}
|