功能简介
NMS支持在服务端收到流开始播放,结束播放,开始推流,结束推流时回调一个web服务接口。
可作为后台管理程序进行自定义鉴权,统计推流播放信息包括ip,开始结束时间,url参数,使用流量等。
开启方法
打开config.ini文件,取消notify_url前的注释,填上接收回调的web api地址。
如:
1 |
notify_url = http://192.168.0.8:8008/notify |
简单用例
我们使用nodejs创建一个简单的web api接口,并打印接收到的信息
notify.js:
1 |
var http = require("http");</code><code>http</code><code> .createServer(function(request, response) {</code><code> let data = [];</code><code> request.on("data", (chunk) => {</code><code> data.push(chunk);</code><code> });</code><code> request.on("end", () => {</code><code> console.log(JSON.parse(data)); // 'Buy the milk'</code><code> response.writeHead(200);</code><code> response.end();</code><code> });</code><code> })</code><code> .listen(8008);</code><code>// 终端打印如下信息</code><code>console.log("Server running at port: 8008"); |
1 |
node notify.js |
postPublish 开始推流
当我们使用ffmpeg命令工具向nms推送一个rtmp流,nodejs测试服务端收到如下信息
1 |
{</code><code> id: '4uowyvdy4vpxqcko7ojbphs5qi3qms5e',</code><code> ip: '[::1]:60116',</code><code> app: 'live',</code><code> name: 'stream',</code><code> query: {},</code><code> action: 'postPublish',</code><code> protocol: 'rtmp',</code><code> createtime: 1575452695215,</code><code> endtime: 0,</code><code> inbytes: 0,</code><code> outbytes: 0</code><code>} |
postPlay 开始播放
当我们使用ffplay命令工具从nms播放一个rtmp流,nodejs测试服务端收到如下信息
1 |
{</code><code> id: 'xs503tuy3e1fpr4g80j3xbak3z1zay6o',</code><code> ip: '[::1]:60132',</code><code> app: 'live',</code><code> name: 'stream',</code><code> query: {},</code><code> action: 'postPlay',</code><code> protocol: 'rtmp',</code><code> createtime: 1575452825248,</code><code> endtime: 0,</code><code> inbytes: 0,</code><code> outbytes: 0</code><code>} |
donePlay 结束播放
当我们停止ffplay播放,nodejs测试服务端收到如下信息
1 |
{</code><code> id: 'xs503tuy3e1fpr4g80j3xbak3z1zay6o',</code><code> ip: '[::1]:60132',</code><code> app: 'live',</code><code> name: 'stream',</code><code> query: {},</code><code> action: 'donePlay',</code><code> protocol: 'rtmp',</code><code> createtime: 1575452825248,</code><code> endtime: 1575452879548,</code><code> inbytes: 650,</code><code> outbytes: 84781275</code><code>} |
donePublish 结束推流
当我们停止ffmpeg推流,nodejs测试服务端收到如下信息
1 |
{</code><code> id: '4uowyvdy4vpxqcko7ojbphs5qi3qms5e',</code><code> ip: '[::1]:60116',</code><code> app: 'live',</code><code> name: 'stream',</code><code> query: {},</code><code> action: 'donePublish',</code><code> protocol: 'rtmp',</code><code> createtime: 1575452695215,</code><code> endtime: 1575453341281,</code><code> inbytes: 510152763,</code><code> outbytes: 0</code><code>} |
url参数
当我们使用ffplay播放时给url带上参数
1 |
ffplay "rtmp://localhost/live/stream?user=123&vip=0&money=666&time=50" |
回调信息中query字段会格式化请求参数,可以对用户信息和行为进行判断记录等。
1 |
{</code><code> id: 'nruxgp2rog0iljxchaw05p378u905vda',</code><code> ip: '[::1]:60202',</code><code> app: 'live',</code><code> name: 'stream',</code><code> query: { money: [ '666' ], time: [ '50' ], user: [ '123' ], vip: [ '0' ] },</code><code> action: 'postPlay',</code><code> protocol: 'rtmp',</code><code> createtime: 1575453067766,</code><code> endtime: 0,</code><code> inbytes: 0,</code><code> outbytes: 0</code><code>} |
回调终止流
当我们需要自定义判断条件,用以允许或禁止用户播放或推流,可以通过返回200或200以外的状态码来控制
比如上面的nodejs服务,对所有请求返回200状态码,那么所有流都允许播放或推流
1 |
response.writeHead(200); |
当我们判断用户的各种条件不满足时,返回400状态码,客户端则会被关闭
1 |
response.writeHead(400); |
原创文章,转载请注明: 转载自贝壳博客
本文链接地址: NMS v3系列教程之 五、事件通知