EasyNVR互联网直播解决方案

一、前言

1.1 方案背景

传统监控行业里面,前端监控摄像机、流媒体视频服务器、视频监控客户端,都在一个内网里面,配一台电脑开个监控终端,再配多个NVR网络硬盘录像机做一些摄像机的录像存储、上电视墙,而且现在的大部分监控设备和监控现场还保留着目前的格局,小到一个商铺、一个公司范围内的监控,再到一个园区监控、一个仓库监控、一个农业园林监控、一个养殖场监控、一个大型小区的监控,再大到一个城市级别的公安监控网、电力监控网、交通路网监控的大局域网监控,在这些监控场景下,客户终端出不了监控的内网,无法做到互联网的实时监控与录像回放,虽然现在也有一些个别大的监控项目,会搞一个网关机器,将视频服务映射到公网,但始终都是小规模使用,上不了量,成不了监控云平台。

尤其是在传统行业监控与互联网行业直播的衔接上面,缺少成熟的解决方案,能够利用现有的监控基础设施,对接到互联网,视频监控也能够像电视、直播那样,将校园课堂直播、校庆活动直播、企业年会直播、线下活动直播、旅游景区直播等功能做的很完美,不需要太多的硬件成本,利用现有的安防摄像机、NVR资源,就能建立一个自己的互联网视频直播平台,能在网页、手机、微信上看视频

1.2 方案目标

EasyNVR建立了一套完整的互联网直播解决方案,支持基本的用户和权限管理,能够通过简单的摄像机通道配置、云平台对接配置、CDN配置等,将统监控行业里面的高清网络摄像机IP Camera、NVR设备接入到EasyNVR,EasyNVR能够将这些视频源的音视频数据采集到EasyNVR服务端,进行全平台终端直播。并且EasyNVR能够将视频源的直播数据对接到第三方视频平台、CDN网络,实现互联网直播分发,可广泛应用于景区直播明厨亮灶幼儿园监控平安工地等各种项目。

二、方案概述

2.1 解决方案概述

EasyNVR通过标准的Onvif、RTSP协议将网络中各种厂家的IP摄像机、NVR、编码器等数据源设备接入到EasyNVR服务通道中,EasyNVR可以对通道进行数据源设备配置的查看、修改和删除,对有效配置的通道可以进行视频源的直播。同时,EasyNVR还支持将通道视频推送到第三方流媒体服务、CDN等标准RTMP服务器中,进行直播分发。EasyNVR可以对接第三方平台,例如:EasyDSS视频云平台等云视频平台,实现互联网级的视频平台服务。

2.2 架构设计

内网直连、公网自建服务器、公网CDN

2.3 二次开发

我们通常在架构一套视频应用时,将整个架构设计为3层:硬件设备层视频能力层视频应用层

注:许多接触到EasyNVR的开发者都会提出关于EasyNVR设备分组和账户设备关系映射的问题,我们参考目前大部分的视频能力输出平台的做法,EasyNVR只做了唯一的用户/密码(类比appkey/secretkey)管理,应用层调用EasyNVR的登录接口,获取到本次EasyNVR视频能力平台操作的token,后续只要在操作的接口中携带token,就可以调用EasyNVR的各种能力输出了!至于具体的设备、用户、权限等各种关系管理,都留在各个客户的应用系统中,自行灵活开发!

三、功能模块

3.1 设备接入

3.2 实时直播

3.3 摄像机控制

3.4 配置管理

四、云平台接入

4.1 EasyDSS视频云平台接入

EasyNVR支持接入EasyDarwin视频云平台,能够将EasyNVR通道中的摄像机以公网摄像机的形式对接到云端,云端可以对EasyNVR通道中的摄像机进行云配置、云直播、云控制、云存储、云转码、云回放。
也可以根据自己的需求部署私有的EasyDarwin视频云平台,将传统的网络摄像机设备用EasyNVR对接到私有的EasyDarwin云平台,进行统一接入管理。

4.1 其他视频云平台接入

同时EasyNVR支持对接到第三方视频云平台,例如萤石云、阿里云、腾讯云等平台。由于萤石云、阿里云、腾讯云等较大的用户基数,EasyNVR支持对于常见流媒体云平台的对接,丰富接入的应用场景,解决了硬件接入限制以及传统的硬件及软件限制。

五、方案技术要点

5.1 NVR技术特点

5.2 性能指标

5.3 二次开发

通常情况下,我们将一套视频的应用平台划分为3个部分:硬件设备层视频能力平台层(PaaS层)视频应用平台层(SaaS层),EasyNVR的定位就是能力平台PaaS层,将各种硬件厂家的摄像机接入进来,再做能力发布,提供给应用SaaS层调用,本文档中的”第六章”中提供了EasyNVR的API接口文档,用户只需要根据API接入,就可以将各种摄像机接入到应用平台进行直播了!同时,我们的EasyNVR提供了一套完善的前端网页调用示例,您自己的视频应用前端可以参考此套前端框架来实现自己的业务展示,非常方便!

EasyNVR在被外部应用系统调用时,EasyNVR提供了一套总的权限控制,也就是用户自己的应用系统需要隐式调用EasyNVR的登录接口,登录之后,获取到EasyNVR返回的token字段,再在后续的EasyNVR接口调用中cookies携带token信息,才能成功调用到EasyNVR的接口,如果调用EasyNVR的接口出现401错误返回,说明登录密码错误或者token已过期,那么我们需要再次隐式调用登录接口获取新的token,再继续下面的调用流程。注意:这个过程对于应用层的用户来说,是看不到的,属于应用层与视频层两个系统后台之间的对接,与用户的登录无关!

六、API接口

概述

API采用Restful风格的Http协议,全部请求都使用Get/Post方式,字符不区分大小写。基本结构如下:

http://<IP>:<Port>/api/<Version>/<Action>?<Param1>=<value>&<Param2>=<Value>&.....

参数

参数名称 定义 说明
IP Platform Address IP地址
Port Platform Address 通讯端口
Version API Version API版本
Action Action 执行的操作
Param Action Parameter 操作所使用的参数,可以有多个参数,每个参数对应一个Value。
Value Parameter Value 参数值,如果Value的字符串中出现&等特殊字符,则必须用””包住Value。

返回值

调用API会返回Json字符串,代表操作返回的结果

{
"EasyDarwin" : {
"Body" : {
……
},
"Header" : {
"CSeq" : "1",
"ErrorNum" : "200",
"ErrorString" : "Success OK",
"MessageType" : "MSG_SC_API_ACK",
"Version" : "1.0"
}
}
}

接口列表

1. 登录EasyNVR

名称 解释 含义
Username 登陆用户名  
Password 登陆密码 经过MD5加密的32位字符
{
"EasyDarwin" : {
"Body" : {
"Token" : "a19cb5f6e7d2449d8d24c8a0fc554ca7"
},
"Header" : {
"CSeq" : "1",
"ErrorNum" : "200",
"ErrorString" : "Success OK",
"MessageType" : "MSG_SC_SERVER_LOGIN_ACK",
"Version" : "1.0"
}
}
}

2.注销登陆

{
"EasyDarwin" : {
"Header" : {
"CSeq" : "1",
"ErrorNum" : "200",
"ErrorString" : "Success OK",
"MessageType" : "MSG_SC_SERVER_LOGOUT_ACK",
"Version" : "1.0"
}
}
}

3.修改密码

名称 含义 备注
Oldpassword 旧密码 经过MD5加密的字符
Newpassword 新密码 经过MD5加密的字符
{
"EasyDarwin" : {
"Body" : {
"Token" : "8b65982a99664d19bcccc35ff8d2acaf"
},
"Header" : {
"CSeq" : "1",
"ErrorNum" : "200",
"ErrorString" : "Success OK",
"MessageType" : "MSG_SC_SERVER_MODIFY_PASSWORD_ACK",
"Version" : "1.0"
}
}
}

4.获取EasyNVR服务信息

名称 含义 备注
Server 服务器软件版本信息 -
RunningTime 服务器累计运行时长信息 -
Hardware 服务器硬件版本信息 -
InterfaceVersion 接口服务版本信息 -
{
"EasyDarwin" : {
"Body" : {
"Hardware" : "x86",
"InterfaceVersion" : "v1",
"RunningTime" : "30 Days 0 Hours 1 Mins 40 Secs",
"Server" : "EasyNVR/1.1 (Build/16.1020; Platform/Win32; State/Development; )"
},
"Header" : {
"CSeq" : "1",
"ErrorNum" : "200",
"ErrorString" : "Success OK",
"MessageType" : "MSG_SC_SERVER_INFO_ACK",
"Version" : "1.0"
}
}
}

5.【视频广场】显示所有在线通道预览

名称 含义 备注
channel 查询指定通道号的信息 可选参数。不带channel参数或者channel小于0查看全部通道信息
名称 含义 备注
Channel 通道号 通道号
Name 通道名称 通道名称
Online 是否在线 1在线/0离线
SnapURL 快照地址 返回为快照的相对网络地址
{
"EasyDarwin" : {
"Body" : {
"ChannelCount" : "2",
"Channels" : [
{
"Channel" : 1,
"Name" : "channel1",
"Online" : 1,
"SnapURL" : "/snap/1/2016-10-24/20161024125212.jpg"
},
{
"Channel" : 2,
"Name" : "channel2",
"Online" : 0,
"SnapURL" : ""
}
]
},
"Header" : {
"CSeq" : "1",
"ErrorNum" : "200",
"ErrorString" : "Success OK",
"MessageType" : "MSG_SC_SERVER_GET_CHANNELS_ACK",
"Version" : "1.0"
}
}
}

6.播放单个通道直播

名称 含义 备注
Channel 通道号
Protocol 获取直播的协议 RTMP/HLS
{
"EasyDarwin" : {
"Body" : {
"ChannelName" : "通道名"
"URL" : "rtmp://{host}:10035/hls/stream_1"
},
"Header" : {
"CSeq" : "1",
"ErrorNum" : "200",
"ErrorString" : "Success OK",
"MessageType" : "MSG_SC_SERVER_GET_CHANNEL_STREAM_ACK",
"Version" : "1.0"
}
}
}

注:返回的URL中带有{host}占位符,{host}即为api接口请求中的IP字段,如果返回的URL为hls地址,那么直接为/hls/stream_1.m3u8地址,需要前端自动拼接成EasyNVR HTTP播放地址,比如EasyNVR的web访问地址为:http://192.168.66.189:10080/,那么返回的hls应该拼接为http://192.168.66.189:10080/hls/stream_1.m3u8,rtmp地址应该拼接为:rtmp://192.168.66.189:10035/hls/stream_1;

7.视频播放心跳

{
"EasyDarwin" : {
"Body" : {
"ChannelName" : "通道名"
"URL" : "rtmp://{host}:10035/hls/stream_1"
},
"Header" : {
"CSeq" : "1",
"ErrorNum" : "200",
"ErrorString" : "Success OK",
"MessageType" : "MSG_SC_SERVER_TOUCH_CHANNEL_STREAM_ACK",
"Version" : "1.0"
}
}
}
```
- 操作:播放视频心跳,60秒内发送一次,否则自动停止推流
### 8. 获取EasyNVR基本配置信息 ###
- 接口: /api/v1/getbaseconfig
- 返回: 基础配置信息表
|名称|解释|备注|
|-|-|-|
|ServiceLanPort|EasyNVR服务监听端口|ReadOnly|
|ServiceLanIP|EasyNVR服务本地地址|ReadOnly|
|ServiceWanIP|EasyNVR服务公网端口|暂时不启作用|
|ServiceWanPort|EasyNVR服务公网地址|暂时不启作用|
|ChannelSnapInterval|通道快照间隔|单位为分钟|
|NginxRTMPPort|EasyNVR配套的rtmp服务器端口|默认10035|
- 报文
```js
{
"EasyDarwin" : {
"Body" : {
"ChannelSnapInterval" : "120",
"NginxRTMPPort" : "10035",
"ServiceLanIP" : "192.168.66.222; 127.0.0.1; ",
"ServiceLanPort" : "10010",
"ServiceWanIP" : "none-config",
"ServiceWanPort" : "10010"
},
"Header" : {
"CSeq" : "1",
"ErrorNum" : "200",
"ErrorString" : "Success OK",
"MessageType" : "MSG_SC_SERVER_BASE_CONFIG_ACK",
"Version" : "v1"
}
}
}

9.设置EasyNVR基本配置信息

{
"EasyDarwin" : {
"Header" : {
"CSeq" : "1",
"ErrorNum" : "200",
"ErrorString" : "Success OK",
"MessageType" : "MSG_SC_SERVER_SET_BASE_CONFIG_ACK",
"Version" : "1.0"
}
}
}

10. 发现Onvif设备

{
"EasyDarwin" : {
"Body" : {
"ChannelCount" : "1",
"Channels" : [
{
"IP" : "192.168.66.222",
"Onvif" : "/onvif/devices",
"Port" : 8080
}
]
},
"Header" : {
"CSeq" : "1",
"ErrorNum" : "200",
"ErrorString" : "Success OK",
"MessageType" : "MSG_SC_SERVER_DISCOVER_DEVICES_ACK",
"Version" : "1.0"
}
}
}

11. 探测设备信息

名称 含义 备注
Username 登陆用户名 设备用户名
Password 登陆密码 设备密码(明文)
{
"EasyDarwin" : {
"Body" : {
"IP" : "192.168.66.222",
"Onvif" : "/onvif/devices",
"Password" : "admin",
"Port" : "8080",
"Rtsp" : "rtsp://192.168.66.222:554/11",
"UserName" : "admin"
},
"Header" : {
"CSeq" : "1",
"ErrorNum" : "200",
"ErrorString" : "Success OK",
"MessageType" : "MSG_SC_SERVER_PROBE_DEVICE_ACK",
"Version" : "1.0"
}
}
}

12. Onvif云台控制

名称 含义 备注
channel 通道ID 例:1
actiontype 动作类型 continuous或者single
command 动作命令 stop停止、up向上移动、down向下移动、left向左移动、right向右移动、zoomin、zoomout、focusin、focusout、aperturein、apertureout
speed 动作速度 例如:5
protocol 摄像机接入的协议 暂时仅支持ONVIF接入的摄像机
reserve 保留 暂未使用

只有Onvif类型接入的设备才能支持云台控制功能,同时,设备必须有云台,他才会转动;

13. 单个通道配置

名称 含义 备注
Channel 设置的通道号 例如:1
Enable 通道是否启用 1启用、0禁用
IP 摄像机IP地址 例如:192.168.66.222
Name 摄像机名称 例如:测试通道
Port 摄像端口 例如:554、8080
Protocol 摄像机接入的协议 ONVIF、RTSP
Username 摄像机登陆用户名 例如:admin
Password 摄像机登陆密码 例如:admin
RTSP 摄像机的RTSP地址 例如:rtsp://192.168.66.222/11
ONVIF 摄像机的Onvif地址 /onvif/devices
Cdn 推送的CDN地址 rtmp://rtmp.aliyun.com/live/209?sign=faefabe&tm=20161005190329
OnDemand 是否按需直播 1启用、0不启用
Audio 是否启用音频输入 1启用、0不启用
Reserve2 保留参数2 1启用、0不启用
{
"EasyDarwin" : {
"Header" : {
"CSeq" : "1",
"ErrorNum" : "200",
"ErrorString" : "Success OK",
"MessageType" : "MSG_SC_SERVER_SET_CHANNEL_CONFIG_ACK",
"Version" : "1.0"
}
}
}

14. 获取EasyNVR所有通道信息

{
"EasyDarwin" : {
"Body" : {
"ChannelCount" : "16",
"Channels" : [
{
"Cdn" : "",
"Channel" : 1,
"Enable" : 1,
"IP" : "192.168.66.222",
"Name" : "channel1",
"OnDemand" : 1,
"Online" : 1,
"Onvif" : "/onvif/devices",
"Password" : "admin",
"Port" : 8080,
"Protocol" : "RTSP",
"Rtsp" : "rtsp://192.168.66.222/11",
"UserName" : "admin",
"Audio" : 0
"Reserve2" : 0
},
{
"Cdn" : "",
"Channel" : 2,
"Enable" : 0,
"IP" : "192.168.66.22",
"Name" : "channel2",
"OnDemand" : 1,
"Online" : 0,
"Onvif" : "/onvif/devices",
"Password" : "admin",
"Port" : 8080,
"Protocol" : "RTSP",
"Rtsp" : "rtsp://192.168.66.22/22",
"UserName" : "admin",
"Audio" : 1
},
……
]
},
"Header" : {
"CSeq" : "1",
"ErrorNum" : "200",
"ErrorString" : "Success OK",
"MessageType" : "MSG_SC_SERVER_GET_CHANNELS_CONFIG_ACK",
"Version" : "1.0"
}
}
}

15. 开始录像

名称 含义 备注
channel 通道号 -
duration 录像时长,单位秒 缺省或者为0时,一直录像,直到执行stoprecord接口
{
"EasyDarwin" : {
"Header" : {
"ErrorNum" : "200",
"ErrorString" : "Success OK",
"MessageType" : "MSG_SC_SERVER_START_RECORD_ACK",
"Version" : "1.0"
}
}
}

16. 停止录像

名称 含义 备注
channel 通道号 -
{
"EasyDarwin" : {
"Header" : {
"ErrorNum" : "200",
"ErrorString" : "Success OK",
"MessageType" : "MSG_SC_SERVER_STOP_RECORD_ACK",
"Version" : "1.0"
}
}
}

17. 获取第三方平台配置

{
"EasyDarwin" : {
"Body" : {
"ThridPlatform" : "EasyDSS",
"ThridPlatformAliveInterval" : "90",
"ThridPlatformCustomize" : "dev",
"ThridPlatformIP" : "www.easydss.com",
"ThridPlatformPort" : "10000",
"ThridPlatformToken" : "123456",
"ThridPlatformUID" : "NVR00000002"
},
"Header" : {
"CSeq" : "1",
"ErrorNum" : "200",
"ErrorString" : "Success OK",
"MessageType" : "MSG_SC_SERVER_GET_THRID_PART_PLATFORM_ACK",
"Version" : "1.0"
}
}
}

18. 设置第三方平台配置

{
"EasyDarwin" : {
"Header" : {
"CSeq" : "1",
"ErrorNum" : "200",
"ErrorString" : "Success OK",
"MessageType" : "MSG_SC_SERVER_SET_THRID_PART_PLATFORM_ACK",
"Version" : "1.0"
}
}
}

19. 重启接口

获取更多信息

技术方案与商业授权咨询

邮件:support@easydarwin.org

WEB:www.easydarwin.org

Copyright © EasyDarwin.org 2012-2017

EasyDarwin