控制接口

配置

rtmp_control

Syntax: rtmp_control [all] | [record] | [drop] | [redirect] | [pause] | [resume]
Default: -
Context: location

  • Desc
    • all : 在指定location下开启所有控制接口
    • record : 在指定location下只开启录制控制接口
    • drop : 在指定location下只开启停止接口
    • redirect : 在指定location下只开启重定向接口
    • pause : 在指定location下只开启暂停接口
    • resume : 在指定location下只开启“继续”接口
  • For example
    location /control {
      rtmp_control all;
    }
    

    也可将每个控制接口配置在不同的location下:

    location /drop {
      rtmp_control drop;
    }
    
    location /record {
      rtmp_control record;
    }
    
    location /redirect {
      rtmp_control redirect;
    }
    
    location /pause {
      rtmp_control pause;
    }
    
    location /resume {
      rtmp_control resume;
    }
    

控制

控制接口的拼凑规则

  http://${your-pingos-server-ip}/control/${section}/${method}?srv=${serverid}&app=${app}&name=${name}&clientid=${clientid}&addr=${addr}
  • ${section}:有5种,分别代表如下含义
    • record : 控制录制(开启/停止)。
    • drop : 控制推流或拉流会话,断开连接。
    • redirect : 控制推流会话或拉流会话,1. 重命名某路推流会话,如果新的流名已经有player正在拉流,则player会拉取这个重命名成功的流内容。2. 重命名拉流会话,如果新的流名已经有推流端在直播,则这个player会拉取重命名成功的流内容。
    • pause : 控制推流或拉流会话,网络连接不断的情况下,暂停推流或拉流。
    • resume : 控制推流或拉流会话,恢复被pause的会话。
  • ${method}${section}不同情况下,${method}的可选种类也不同,具体如下:
    • ${section}为record时,${method}有如下取值:
      • start: 控制开启录制
      • stop: 控制停止录制
    • 其余情况下,${method}有如下取值:
    • publisher:针对推流会话控制
    • subscriber:针对拉流会话控制
    • client:针对连接控制,可以是推流会话、也可以是拉流会话,用clientid参数区分。

serveridappname:这三项分别对应配置文件中的serveridapplication以及“流名”(stream name)。

  • 如果你想对某serverid下的所有会话进行批量操作,必须省略appname参数。
  • 如果你想对某serverid的指定app下的所有会话进行批量操作,则必须省略name参数。
  • 如果你想对某路流的所有拉流会话进行控制,则必须同时指定serveridappname参数。
  • 如果你想精确控制某推流会话,则必须同时指定serveridappname参数。
  • 如果你想精确控制某拉流会话,则必须同时指定serveridappclientid(在on_play事件通知中获取)参数。
  • 如果你希望只控制通过本机的某块网卡的会话,则在以上情况的基础上指定addr参数(例如只控制从127.0.0.1连接进来的会话,指定addr=127.0.0.1即可)。

示例

假设使用如下配置

  rtmp {
    server {
      listen 1935;
      serverid pingos; # 随意指定一个全局唯一的标识
      application live {
        live on;
      }
    }
  }
  http {
    server {
      listen 80;
      location /control {
        rtmp_control all;
      }
    }
  }

录像控制(record)

  • 开启流名为xxx的直播录像

    curl http://127.0.0.1/control/record/start?srv=pingos&app=live&name=xxx
    
  • 关闭流名为xxx的直播录像

    curl http://127.0.0.1/control/record/stop?srv=pingos&app=live&name=xxx
    
  • 开启app名称为live下的所有直播录像

    curl http://127.0.0.1/control/record/start?srv=pingos&app=live
    
  • 关闭app名称为live下的所有直播录像

    curl http://127.0.0.1/control/record/stop?srv=pingos&app=live
    
  • 开启serverid名称为pingos下的所有直播录像

    curl http://127.0.0.1/control/record/start?srv=pingos
    
  • 关闭serverid名称为pingos下的所有直播录像

    curl http://127.0.0.1/control/record/start?srv=pingos
    

暂停控制(pause)

  • 暂停流名为xxx的推流会话

    curl http://127.0.0.1/control/pause/publisher?srv=pingos&app=live&name=xxx
    
  • 暂停app名称为live下的所有推流会话

    curl http://127.0.0.1/control/pause/publisher?srv=pingos&app=live
    
  • 关闭serverid名称为pingos下的所有推流会话

    curl http://127.0.0.1/control/pause/publisher?srv=pingos
    

恢复控制(resume)

  • 恢复流名为xxx的推流会话

    curl http://127.0.0.1/control/resume/publisher?srv=pingos&app=live&name=xxx
    
  • 恢复app名称为live下的所有推流会话

    curl http://127.0.0.1/control/resume/publisher?srv=pingos&app=live
    
  • 恢复serverid名称为pingos下的所有推流会话

    curl http://127.0.0.1/control/resume/publisher?srv=pingos
    

断开连接控制(drop)

  • 断开流名为xxx的推流会话

    curl http://127.0.0.1/control/drop/publisher?srv=pingos&app=live&name=xxx
    
  • 断开app名称为live下的所有推流会话

    curl http://127.0.0.1/control/drop/publisher?srv=pingos&app=live
    
  • 断开serverid名称为pingos下的所有推流会话

    curl http://127.0.0.1/control/drop/publisher?srv=pingos
    

直播重定向(redirect)

  • 重命名流名为xxx的推流会话,将推流流名xxx重命名为new-xxx不能对推流会话批量操作

    curl http://127.0.0.1/control/redirect/publisher?srv=pingos&app=live&name=xxx&newname=new-xxx
    
  • 重命名流名为xxx的拉流会话,将拉流流名xxx重命名为new-xxx可以对拉流会话批量操作

    curl http://127.0.0.1/control/redirect/subscriber?srv=pingos&app=live&name=xxx&newname=new-xxx
    
  • 将serverid等于pingos且app等于live的所有拉流会话批量重命名为new-xxx

    curl http://127.0.0.1/control/redirect/subscriber?srv=pingos&app=live&newname=new-xxx
    
  • 将serverid等于pingos的所有拉流会话批量重命名为new-xxx

    curl http://127.0.0.1/control/redirect/subscriber?srv=pingos&newname=new-xxx
    

以上是对publisher(推流会话)进行操作的,如果你希望操作subscriber(拉流会话),则只需将url里的publisher替换成subscriber即可。

如果你希望精确地操作某一路拉流会话,则可以将publisher替换成client,然后在参数里指定clientid的值即可。 例如:你希望暂停clientid等于123的一路会话,可使用如下操作👇

curl http://127.0.0.1/control/pause/publisher?srv=pingos&app=live&clientid=123

clientid可通过接收on_play通知消息获取。详情请查阅事件通知