模板说明

创建relay中继任务,实际上就是rtmp的play或publish操作。
当我们连接远端服务器时,对方可能开启了鉴权规则,那么我们的链接也必须要附带鉴权参数。
由于目前常用的鉴权方式是附带过期时间戳的,因此每次请求时都应该是不同的签名。
当然您也可以预生成一个过期时间特别久的比如1年以后过期。
使用nms的relay规则,可以在创建时填入签名参数的模板,在nms进行relay中继任务创建时根据模板生成新的签名参数。

模板例子

nms模板

讲解:
前面我们的鉴权算法中有说明到,生成签名前的字符串需要流信息+过期时间+密码后md5
上面的模板字符串可以分为3个部分

继续阅读

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: NMS v3系列教程之 八、relay规则鉴权模板

需求简介

目前使用监控摄像头可以做非常多的行业应用,我们的客户案例中,涵盖了幼儿园监控手机直播,远程课堂直播,重点监控单位中心监控与手机监控,抓娃娃机,宠物监控远程喂食,甚至还有远程投币祈福等等等等,没有做不到只有想不到。
而传统监控摄像头统一的协议标准是RTSP,而直播行业目前统一的标准是RTMP。要将两者结合起来最简单的方式,是通过ffmpeg命令输入rtsp,输出rtmp。将视频流分发到自建服务端或者直播云服务,再由各个客户端根据需求播放rtmp或在http-flv。
这种方式需要解决如下问题

  1. rtsp流地址生成与通道管理,各个厂商之间的流地址格式是不同的
  2. 进程调用的维护,错误处理与断线重连问题
  3. 原生rtmp协议不支持监控行业日益流行的H265视频
  4. 部分云服务和web客户端不支持监控设备常见的G.711音频

解决方案

  • NMS内置了一个Relay中继模块,可以通过web后台简单添加rtsp拉取任务,无需编写配置文件,无需重启服务。
  • 目前支持海康,大华,宇视直接配置参数创建拉取任务,后续会增加其他厂商的规则,如果您是监控厂商,想要在NMS中增加品牌RTSP规则,请直接与我们的商务服务联系。
  • 也支持自定义模式手动输入rtsp地址和rtmp地址。
  • 任务创建后,服务会立刻去执行,并且在web后台反馈状态信息。relay任务也会在输入或输出中一项断开后自动重连,并将relay任务写入本地数据库,在nms服务程序重启后继续执行,直到任务被删除。
  • relay模块支持H265编码推拉流,NMS也支持h265编码的RTMP协议

使用方法

继续阅读

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: NMS v3系列教程之 七、从NVRIPC拉取监控画面

NMS内建支持简单且非常安全的,基于密码和过期时间的鉴权模式。
与阿里云的直播鉴权模式比较类似。

开启方法

打开config.ini

鉴权密码

播放鉴权开关

0-关闭,1-打开

推流鉴权开关

0-关闭,1-打开

使用方法

继续阅读

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: NMS v3系列教程之 六、直播鉴权

功能简介

NMS支持在服务端收到流开始播放,结束播放,开始推流,结束推流时回调一个web服务接口。
可作为后台管理程序进行自定义鉴权,统计推流播放信息包括ip,开始结束时间,url参数,使用流量等。

开启方法

打开config.ini文件,取消notify_url前的注释,填上接收回调的web api地址。
如:

简单用例

我们使用nodejs创建一个简单的web api接口,并打印接收到的信息

继续阅读

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: NMS v3系列教程之 五、事件通知

nms直接运行后,可以看到控制台输出打印

可以看到 rtmp服务绑定1935端口,http和https端口分别是8000和8443

1935作为rtmp的默认端口,可以在使用时不填写,比如

8000端口作为http-flv和websocket-flv端口,需要跟上端口号和.flv后缀

API接口和管理后台复用8000和8443端口,浏览器直接访问web后台

http://server_ip:8000/

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: NMS v3系列教程之 三、基本使用

Windows版

https://nodemedia.oss-cn-hangzhou.aliyuncs.com/nms/3.1.15/nms-windows-amd64-20191211.zip

  • 解压缩后双击运行nms.exe
  • 双击service.bat 安装为服务并自动运行
  • 在当前目录打开控制台输出 service.bat uninstall 停止并卸载服务

Linux x86_64 版

https://nodemedia.oss-cn-hangzhou.aliyuncs.com/nms/3.1.15/nms-linux-amd64-20191211.tar.gz

  • 解压缩后进入目录,在控制台输入 ./nms 运行
  • 在当前程序目录下执行 sudo ./service.sh install 安装服务并自动运行
  • 在当前程序目录下执行 sudo ./service.sh uninstall 停止并卸载服务

Linux arm64 版

https://nodemedia.oss-cn-hangzhou.aliyuncs.com/nms/3.1.15/nms-linux-arm64-20191211.tar.gz

Mac版

https://nodemedia.oss-cn-hangzhou.aliyuncs.com/nms/3.1.15/nms-darwin-amd64-20191211.tar.gz

  • 解压缩后进入目录,在控制台输入 ./nms 运行

Docker版

docker run -it —name nms -p 1935:1935 -p 8000:8000 -p 8443:8443 illuspas/nms

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: NMS v3系列教程之 二、下载安装

Node Media Server 以下简称nms,最初是以node.js实现的RTMP协议流媒体服务端。
最新v3版使用go语言重写了整个项目,获得了更好的并发性能,也拥有了更强的功能。

特性

  • 支持多核,万级并发
  • 支持Windows/MacOS/Linux
  • 支持X86_64/ARM64架构
  • 支持Rtmp/Http-FLV/Websocket-FLV/JT-T1078协议接入
  • 支持Https/Wss加密协议接入
  • 支持H.264,H.265视频编码
  • 支持AAC,Speex,NellyMoser,G711音频编码
  • 支持非AAC编码推流时,零延迟转码AAC
  • 支持web后台快捷添加海康、大华、宇视RTSP拉流转发
  • 支持配置自定义RTSP、RTMP地址拉取转发
  • 支持拉流转发任务持久化存储
  • 支持拉流转发任务断线自动重连
  • 支持创建转推拉规则时基于go模板方式的自定义鉴权参数(可支持nms,阿里云,腾讯云等鉴权规则)
  • 支持详细数据统计
  • 支持Gop_Cache
  • 支持管理型后台程序
  • 支持流状态http回调
  • 支持规则转推,多路push
  • 支持规则转拉

计划

  • 支持低延迟HLS – v3.2
  • 支持WebRTC协议 – v3.2
  • 支持GB28181协议 – v3.3
  • 支持kcp-flv超低延迟,弱网满速传输 – v3.4
  • 支持MIPS64EL,armv7架构
  • 替换Nodelayer.js作后台视频预览播放器,以支持H.265视频

文档

http://www.nodemedia.cn/doc/web/#/5

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: NMS v3系列教程之 一、简介

上一篇《用Go语言开发的新版NodeMediaServer》说到使用了CGO实现的内置音频实时转码器。开发中遇到一个很严重的问题:无法直接生成跨平台可执行程序了。

首选我们了解到,Go语言是可以在开发平台直接生成多个目标架构和系统的可执行程序。只需要在编译前指定GOOS和GOARCH,便可以直接生成目标文件。

但当使用了CGO,便失去了这种能力。在本机平台以外,需要设置CGO_ENABLED,并且指定CC. linux和macos还好,windows也是需要gcc工具链,这个就需要部署MinGW等很复杂的操作。

在多次尝试后,受到这个项目的启发,编写了一个更简单的xcgo docker image.

继续阅读

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: XCGO:CGO的跨平台编译器

之前曾介绍过一款用Node.JS实现的开源RTMP流媒体服务端。目前更新到2.1.3版本,这是个从15年出开始接触Node.js作为研习而建立的项目。说起写完这个项目,对理解nodejs异步架构,rtmp网络协议还是起到了非常重要的作用。

rtmp协议如果用异步解析数据还是比较麻烦的,最早的版本写了个buffer缓冲,再用Generators/yield来转成同步逻辑,简单了许多。接触到async、await后又更新了个版本,代码可读性提高了不少。最后又学习了一个异步状态机的实现,比较满意。

继续阅读

原创文章,转载请注明: 转载自贝壳博客

本文链接地址: 用Go语言开发的新版NodeMediaServer