【nginx-rtmp】01、控制模块(Control module)

控制模块(Control module)

控制模块是http模块,可在外部通过http对rtmp模块进行控制,下面是启用控制模块的示例:

http {
...
    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;
          }
      }
    }
}

然后可以用下面命令推送流:

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"

有时候上面命令请求后没有返回结果,请检查下服务端是否使用了多个 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



重定向/重置(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、app、name、addr、clients   - 和上面的一样(Record/Drop)
  • nawname   - 要重定向到的新的流名称(new stream name to redirect to)



要在 Docker 中部署配置 Nginx-RTMP,可以按照以下步骤进行操作: 1. 创建一个 Dockerfile 文件,以便构建自己的 Nginx 镜像。Dockerfile 内容如下: ``` FROM nginx:latest RUN apt-get update && apt-get install -y wget build-essential libpcre3 libpcre3-dev libssl-dev zlib1g-dev RUN wget https://github.com/arut/nginx-rtmp-module/archive/master.zip && \ unzip master.zip RUN wget http://nginx.org/download/nginx-1.19.1.tar.gz && \ tar -zxvf nginx-1.19.1.tar.gz && \ cd nginx-1.19.1 && \ ./configure --with-http_ssl_module --add-module=../nginx-rtmp-module-master && \ make && \ make install COPY nginx.conf /usr/local/nginx/conf/ ``` 2. 在 Dockerfile 目录中创建一个名为 nginx.conf 的 Nginx 配置文件,内容如下: ``` worker_processes 1; events { worker_connections 1024; } rtmp { server { listen 1935; chunk_size 4096; application live { live on; record off; } application hls { live on; hls on; hls_path /tmp/hls; } } } http { server { listen 80; location /hls { types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } root /tmp; add_header Cache-Control no-cache; } } } ``` 3. 构建 Docker 镜像,执行以下命令: ``` docker build -t nginx-rtmp . ``` 4. 运行 Docker 容器,执行以下命令: ``` docker run -d -p 1935:1935 -p 80:80 nginx-rtmp ``` 这将会在 Docker 容器中运行 Nginx,并将 RTMP 端口映射到主机的 1935 端口,将 HTTP 端口映射到主机的 80 端口。 现在,您可以使用 OBS 或其他 RTMP 客户端将视频流发送到 RTMP://<your-ip-address>:1935/live,并使用 VLC 播放器或其他支持 HLS 的浏览器,在 http://<your-ip-address>/hls 中查看视频。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值