pingOS監聽拉流和推流的響應事件配置


worker_processes  1;

error_log  logs/error.log debug;

events {
    worker_connections  1024;
}

rtmp {
    server {
        listen 1935;

        application live1 {

            live on;
#           record off;
            sync 300ms;
            on_play    http://127.0.0.1:9990/video/notify/play args=stream=$stream stage=start,done;
            on_publish    http://127.0.0.1:9990/video/notify/publish args=stream=$stream stage=start,done;
        }

        application live2 {
            live on;
            drop_idle_publisher 5s;
           #on_play    http://127.0.0.1:9990/video/notify/play stage=start,done;
        }

        ping 3m;
        ping_timeout 30s;
    }

}

http {
    server {
        listen      80;

        location / {
            root html;

 位置 usr/local/pingos/config/nginx.conf

$domain 客戶端服務器時使用的域名,類似http協議中的host參數
$app 掛載點名
$name 流名
$stream 流標識,serverid/app/name拼接而成
$pargs 推流或播放請求連接后攜帶的自定義參數
$args rtmp協議中,在connection階段攜帶的參數
$flashver rtmp協議中的flashver
$swf_url rtmp協議中的swf_url
$tc_url rtmp協議中的tc_url
$page_url rtmp協議中的page_url
$acodecs 音頻編碼類型
$vcodecs 視頻編碼類型
$scheme 連接使用的協議,如http、rtmp
$serverid 配置中的serverid
$notify_status notify執行結果
$finalize_reason session被銷毀的原因
$stage 當前session所處的階段:
“init”, “handshake_done”, “connect”, “create_stream”, “publish”, “play”, “audio_video”, “close_stream”
$init session被初始化的時間
$handshake_done rtmp握手完成時的時間
$connect 連接建立的時間
$create_stream 流被創建時的時間
$ptime 從推流端獲取到第一幀媒體數據時的時間
$first_data 收到或發送第一幀媒體數據的時間
$first_metadata 收到或發送metadata的時間
$first_audio 收到或發送第一個音頻幀的時間
$first_video 收到或發送第一個視頻幀的時間
$close_stream 流被關閉的時間
$relay_domain relay操作使用的域名,參考domain變量
$relay_app relay操作使用的掛載點名,參考app變量
$relay_name relay操作使用的流名,參考name變量
$relay_args relay操作connection的參數,參考args變量
$relay_pargs relay操作的pages參數,參考pargs變量
$relay_referer relay操作的referer,參考page_url變量
$relay_user_agent relay操作中User-Agent參數
$relay_swf_url 參考swf_url
$relay_acodecs relay操作成功后,拉取到的或推送出去的音頻編碼類型,參考acodecs
$relay_vcodecs relay操作成功后,拉取到的或推送出去的視頻編碼類型,參考vcodecs
$remote_addr 客戶端IP
$remote_port 客戶端端口
$server_addr 客戶端通過服務器的哪個IP連接進來的
$server_port 客戶端通過服務器的哪個端口連接進來的
$nginx_version nginx版本
$pid nginx worker進程的進程號
$msec 精確到微妙的時間戳,標記當前操作的精確時間
$time_iso8601 iso8601標准時間
$time_local 格式化的時間
$ngx_worker worker進程的編號
$parg_ 獲取到pargs參數中的某個參數,例如pargs為k0=0&k1=1,那么$parg_k0的值就是0,$parg_k1是1

 

 

控制事件

  • on_proc

進程啟動時通知,只支持 start 觸發點。

  • on_play

當有拉流時,觸發 on_playstart通知,當拉流持續時,每隔一定時間間隔向外發送on_playupdate 通知,當拉流結束時發送on_playdone通知。

  • on_publish

當有推流時,觸發 on_publishstart通知,當推流持續時,每隔一定時間間隔向外發送on_publishupdate通知,當推流結束時發送on_publichdone通知。

  • on_pull

當需要回源拉流時,觸發pull控制(發送on_pullstart通知),回源拉流創建成功后,每隔一定時間間隔向外發送on_pullupdate通知,當拉流結束時發送on_pulldone 通知。

  • on_push

當需要轉推流時,觸發push控制(發送on_pushstart通知),轉推流創建成功后,每隔一定時間間隔向外發送on_pushupdate通知,當轉推流結束時發送on_pushdone通知。

  • on_stream

當有推流時,觸發 on_streamstart 通知,當流還繼續存在時,每隔一定時間間隔向外發送 on_streamupdate 通知,推流結束時發送 on_streamdone 通知。

  • on_meta

meta 的行為和 push 一致,只是 meta 的觸發點在收到音視頻頭,push 觸發點是收到 publish 命令,pushmeta 是互斥的,配置了 pushmeta 將不生效。

控制事件觸發點包含:

  • start:事件發生時觸發,配置或不配置 start 均為默認開啟狀態
  • update:事件持續過程中的心跳刷新
  • done:事件結束時觸發

擴展參數

  • args:向外發送通知或控制請求時,攜帶的 http 請求參數,可使用變量配置,具體變量列表請參考變量列表↑
  • groupid:分組,主要針對 push 或 meta,多路轉推時,用於標識每路轉推用
  • stage:觸發階段,可選 start,update 和 done
  • timeout:向外發送通知或控制請求時,等待外部響應的超時時間,默認為 3s
  • update:發送 update 通知的時間間隔,默認為 1min,只有 stage 配置了 update 才生效

配置示例

  • 基本模型

      application test { live on; cache_time 3s; idle_streams off; on_publish http://127.0.0.1/xxx/v1/publish stage=start,done args=a=c&b=d&$pargs; # 配置文件中的變量以$開頭 on_play http://127.0.0.1/xxx/v1/play stage=start,done args=a=c&b=d&$pargs; on_stream http://127.0.0.1/xxx/v1/stream stage=start,done args=a=c&b=d&$pargs; } 
  • 拉流模型

      application edge { live on; cache_time 3s; low_latency on; on_pull http://127.0.0.1/xxx/v1/pull stage=start,update,done args=a=c&b=d&$pargs; } 
  • 推流模型

      application pub { live on; #on_push http://127.0.0.1/xxx/v1/push stage=start,update,done args=a=c&b=d&$pargs timeout=1s; on_meta http://127.0.0.1/xxx/v1/push stage=start,update,done args=a=c&b=d&$pargs timeout=1s; } 

配置

on_proc

Syntax: on_proc url [timeout=time] [update=time];
Default: -
Context: rtmp

  • Desc

    進程啟動時,向配置的 url 發送 http get 請求,通知時會攜帶 call=init_process&worker_id=$ngx_worker 參數。


on_play

Syntax: on_play url [args=string] [stage=[start][,update][,done]] [timeout=time] [update=time];
Default: -
Context: application

  • Desc

    只能配置一條。
    外部拉流時,向配置的 url 發送 http get 請求,通知時會攜帶 call=play&act=start&domain=$domain&app=$app&name=$name,如果配置了 args,會將 args 追加到默認參數后面。
    如果配置了 update,拉流結束前,每隔 update 時間間隔會發送一條刷新通知,和初始通知區別是,act=update。
    如果配置了 done,拉流結束后會發送 done 通知,和初始通知區別是,act=done。
    對於初始請求,如果外部異常,將不會發送 update 請求;如果外部回送非 200 響應,將會使用 403/NetStream.Play.Forbidden 斷掉拉流請求;如果外部回送 200 響應並配置了刷新,會啟動 update 定時器發送刷新通知。 對於刷新通知和結束通知,不對響應做處理。

on_publish

Syntax: on_publish url [args=string] [stage=[start][,update][,done]] [timeout=time] [update=time];
Default: -
Context: application

  • Desc

    只能配置一條。
    外部推流時,向配置的 url 發送 http get 請求,通知時會攜帶 call=publish&act=start&domain=$domain&app=$app&name=$name,如果配置了 args,會將 args 追加到默認參數后面。
    如果配置了 update,推流結束前,每隔 update 時間間隔會發送一條刷新通知,和初始通知區別是,act=update。
    如果配置了 done,推流結束后會發送 done 通知,和初始通知區別是,act=done。
    對於初始請求,如果外部異常,將不會發送 update 請求;如果外部回送非 200 響應,將會使用 403/NetStream.Play.Forbidden 斷掉拉流請求;如果外部回送 200 響應並配置了刷新,會啟動 update 定時器發送刷新通知。
    對於刷新通知和結束通知,不對響應做處理。

on_stream

Syntax: on_stream url [args=string] [stage=[start][,update][,done]] [timeout=time] [update=time];
Default: -
Context: application

  • Desc

    只能配置一條。
    流創建時(有一路推流或一路拉流時),向配置的 url 發送 http get 請求,通知時會攜帶 call=stream&act=start&domain=$domain&app=$app&name=$name,如果配置了 args,會將 args 追加到默認參數后面。
    如果配置了 update,所有推拉流結束前,每隔 update 時間間隔會發送一條刷新通知,和初始通知區別是,act=update。 對於初始請求,如果外部異常或外部回送非 200 響應,將不會發送 update 請求;如果外部回送 200 響應並配置了刷新,會啟動 update 定時器發送刷新通知。
    如果配置了 done,所有推拉流結束后會發送 done 通知,和初始通知區別是,act=done。
    對於刷新通知和結束通知,不對響應做處理。

on_pull

Syntax: on_pull url [args=string] [stage=[start][,update][,done]] [timeout=time] [update=time];
Default: -
Context: application

  • Desc

    只能配置一條。
    需要觸發回源拉流時,向配置的 url 發送 http get 請求,通知時會攜帶 call=pull&act=start&domain=$domain&app=$app&name=$name,如果配置了 args,會將 args 追加到默認參數后面。
    如果配置了 update,relay pull session 結束前,每隔 update 時間間隔會發送一條刷新通知,和初始通知區別是,act=update。
    如果配置了 done,relay pull session 結束后會發送 done 通知,和初始通知區別是,act=done。
    對於初始請求,如果外部異常,將會啟動 pull reconnect;如果外部回送 200 響應,將不會創建 relay pull session,因此后續不會有 update 和 done 通知;如果外部回送 4XX 或 5XX 響應,將會結束所有拉流請求。
    如果回送 3XX 響應,將會根據 Location 頭構造回源請求,Location 必須是完整的 rtmp 或 http url,如 rtmp://ip/app/name[?args],如果是 rtmp url 將會使用 rtmp 協議回源,如果是 http url 將會使用 http flv 協議回源。如果 3XX 響應中攜帶 Domain 頭,將會使用該頭構造 rtmp 的 tc_url 或 http 的 Host 頭。
    對於刷新通知和結束通知,不對響應做處理。

on_push

Syntax: on_push url [args=string] [stage=[start][,update][,done]] [timeout=time] [update=time];
Default: -
Context: application

  • Desc

    最多支持配置 8 條,每條對應一個 relay push session。
    需要觸發流轉推時,向配置的 url 發送 http get 請求,通知時會攜帶 call=push&act=start&domain=$domain&app=$app&name=$name,如果配置了 args,會將 args 追加到默認參數后面。
    如果配置了 update,relay push session 結束前,每隔 update 時間間隔會發送一條刷新通知,和初始通知區別是,act=update。
    如果配置了 done,每條 relay push session 結束后會發送 done 通知,和初始通知區別是,act=done。
    對於初始請求,如果外部異常,將會啟動 push reconnect;如果外部回送 200 響應,將不會創建 relay push session,因此后續不會有 update 和 done 通知;如果外部回送 4XX 或 5XX 響應,將會結束推流請求。
    如果回送 3XX 響應,將會根據 Location 頭構造回源請求,Location 必須是完整的 rtmp url,如 rtmp://ip/app/name[?args]。如果 3XX 響應中攜帶 Domain 頭,將會使用該頭構造 rtmp 的 tc_url。
    對於刷新通知和結束通知,不對響應做處理。

on_meta

Syntax: on_meta url [args=string] [stage=[start][,update][,done]] [timeout=time] [update=time];
Default: -
Context: application

  • Desc

    最多支持配置 8 條,每條對應一個 relay push session。
    基本功能與 on_push 相同,只不過 on_push 是 publish 命令觸發,on_meta 是音視頻頭觸發,具體觸發規則見 on_meta_type 和 on_meta_once。


on_meta_once

Syntax: on_meta_once on|off;
Default: on
Context: rtmp, server, application

  • Desc

    on_meta 通知是否只觸發一次

on_meta_type

Syntax: on_meta_once video|audio|both;
Default: video
Context: rtmp, server, application

    • Desc
      • video:on_meta 只有在收到視頻頭時觸發
      • audio:on_meta 只有在收到音頻頭時觸發
      • both:on_meta 在收到音頻或視頻頭時均會觸發


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM