控制模块(Control module)
控制模块是http模块,可在外部通过http对rtmp模块进行控制,下面是启用控制模块的示例:
http {
...
server {
listen 8080;
server_name localhost;
....
location /control {
rtmp_control all;
}
}
}
...
server {
listen 8080;
server_name localhost;
....
location /control {
rtmp_control all;
}
}
}
控制模块内有几个子模块,每个子模块控制不同的功能!
记录/录制(Record)
这个子模块,可以控制记录的启动或者停止,语法如下:
http://server.com/control/record/start|stop?
srv=SRV&app=APP&name=NAME&rec=REC
- srv=SRV - 可选,表示 rtmp{} 块里面 server{} 块的序号,默认是第一个 server{} 块
- app=APP - 必需,application 名称
- name=NAME - 必需, stream 名称
- rec=REC - 可选,recorder 名称,默认是root(unnamed) recorder
配置示例如下:
rtmp {
server {
listen 1935;
application myapp {
live on;
recorder rec1 {
record all manual;
record_suffix all.flv;
record_path /tmp/rec;
record_unique on;
}
}
}
}
server {
listen 1935;
application myapp {
live on;
recorder rec1 {
record all manual;
record_suffix all.flv;
record_path /tmp/rec;
record_unique on;
}
}
}
}
然后可以用下面命令推送流:
ffmpeg -i http://someserver.com/mychannel.ts -c:v copy -c:a nellymoser -ar 44100 -ac 1 -f flv rtmp://localhost/myapp/mystream
使用下面命令来启动或停止记录:
curl "http://localhost:8080/control/record/start?app=myapp&name=mystream&rec=rec1"
curl "http://localhost:8080/control/record/stop?app=myapp&name=mystream&rec=rec1"
curl "http://localhost:8080/control/record/stop?app=myapp&name=mystream&rec=rec1"
有时候上面命令请求后没有返回结果,请检查下服务端是否使用了多个 worker,使用一个效果好点!
移除/中断(Drop)
这个子模块,提供一个简单方式来删除某个客户端的链接,语法如下:
http://server.com/control/drop/publisher|subscriber|client?
srv=SRV&app=APP&name=NAME&addr=ADDR&clientid=CLIENTID
- srv、app、name - 这三个参数同上(Record)
- addr - 可选,客户端IP地址(和 rtmp_start返回的一样)
- clientid - 可选,nginx的client id(在 log 和 stat 里有显示)
第一个方法 drop/publisher 用来中断发布者链接,
第二个方法 drop/client 中断所有符合 addr 参数的链接,如果不指定 addr 参数,将会中断所有客户端链接(包括发布者)。
请求示例:
curl http://localhost:8080/control/drop/publisher?app=myapp&name=mystream
curl http://localhost:8080/control/drop/client?app=myapp&name=mystream
curl http://localhost:8080/control/drop/client?app=myapp&name=mystream&addr=192.168.0.1
curl http://localhost:8080/control/drop/client?app=myapp&name=mystream&clientid=1
curl http://localhost:8080/control/drop/client?app=myapp&name=mystream
curl http://localhost:8080/control/drop/client?app=myapp&name=mystream&addr=192.168.0.1
curl http://localhost:8080/control/drop/client?app=myapp&name=mystream&clientid=1
重定向/重置(Redirect)
重置 点播源/主播 (play/publish) 到一个新的流(stream),语法:
http://server.com/control/redirect/publisher|subscriber|client?
srv=SRV&app=APP&name=NAME&addr=ADDR&clientid=CLIENTID&newname=NEWNAME
srv=SRV&app=APP&name=NAME&addr=ADDR&clientid=CLIENTID&newname=NEWNAME
- srv、app、name、addr、clients - 和上面的一样(Record/Drop)
- nawname - 要重定向到的新的流名称(new stream name to redirect to)