配置
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参数区分。
- 当
serverid、app、name:这三项分别对应配置文件中的serverid
,application
以及“流名”(stream name)。
- 如果你想对某
serverid
下的所有会话进行批量操作,必须省略app
、name
参数。 - 如果你想对某
serverid
的指定app
下的所有会话进行批量操作,则必须省略name
参数。 - 如果你想对某路流的所有拉流会话进行控制,则必须同时指定
serverid
、app
和name
参数。 - 如果你想精确控制某推流会话,则必须同时指定
serverid
、app
和name
参数。 - 如果你想精确控制某拉流会话,则必须同时指定
serverid
、app
和clientid
(在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通知消息获取。详情请查阅事件通知