在之前的博客《EasyNVR H5流媒体服务器方案架构设计之视频能力平台》中我们描述了EasyNVR的定位,作为一个能力平台来进行功能的输出:
也就是说,在通常情况下,我们将一套视频的应用平台划分为3个部分:硬件设备层、视频能力平台层(PaaS层)、视频应用平台层(SaaS层),EasyNVR的定位就是能力平台PaaS层,将各种硬件厂家的摄像机接入进来,再做能力发布,提供给应用SaaS层调用,本文档中的”第六章”中提供了EasyNVR的API接口文档,用户只需要根据API接入,就可以将各种摄像机接入到应用平台进行直播了!同时,我们的EasyNVR提供了一套完善的前端网页调用示例,您自己的视频应用前端可以参考此套前端框架来实现自己的业务展示,非常方便!
EasyNVR在被外部应用系统调用时,EasyNVR提供了一套总的权限控制,也就是用户自己的应用系统需要隐式调用EasyNVR的登录接口,登录之后,获取到EasyNVR返回的token字段,再在后续的EasyNVR接口调用中cookies携带token信息,才能成功调用到EasyNVR的接口,如果调用EasyNVR的接口出现401错误返回,说明登录密码错误或者token已过期,那么我们需要再次隐式调用登录接口获取新的token,再继续下面的调用流程。注意:这个过程对于应用层的用户来说,是看不到的,属于应用层与视频层两个系统后台之间的对接,与用户的登录无关!
最近许多小伙伴咨询关于EasyNVR接口调用的问题,多半就是遇到权限的问题(401 Unauthorized)
在此,基于自身对于EasyNVR接口的调用和一些用户的反馈的问题来对接口的调用进行一下说明:
API采用Restful风格的Http协议,全部请求都使用Get/Post方式,字符不区分大小写。基本结构如下:
http://:/api//?=&=&.....
参数名称 | 定义 | 说明 |
IP | Platform Address | IP地址 |
Port | Platform Port | 通讯端口 |
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"
}
}
}
许多小伙伴往往只是注重接口的功能,往往一上来就直接传参调接口,于是就出现开篇的401报错;在我们拿到接口文档后,我们可以先阅读一下文档,做到心中有数;
在接口调用前先进行一下简单的说明:EasyNVR大部分的调用接口需要在cookie中携带token信息;对于这个token信息,是通过 login接口返回的。当我们成功请求接口: ”/api/v1/login?username=xxx&password=xxx“时,会返回一个token信息;
{
"EasyDarwin" : {
"Body" : {
"Token" : "a19cb5f6e7d2449d8d24c8a0fc554ca7"
},
"Header" : {
"CSeq" : "1",
"ErrorNum" : "200",
"ErrorString" : "Success OK",
"MessageType" : "MSG_SC_SERVER_LOGIN_ACK",
"Version" : "1.0"
}
}
}
我们对获取到的token信息存储到cookie中;
对于出现401,大多数情况莫过于是cookie 中tooken的携带、接口格式的错误、传递参数的错误。。。
在进行其他接口的请求时在request headers 的cookie会携带对应的tooken来进行请求。
实例来进行展示一下:
在没有调用接口进行设置前
$.ajax({
type: "GET",
url: "api/v1/login",
data: {
username: username,
password: password
},
global: false,
success: function(data) {
try {
var ret = JSON.parse(data);
var token = ret.EasyDarwin.Body.Token;
$.cookie("token", token);
//将tooken设置进cookie中
$.cookie("username", username);
} catch (e) {
console.log(e);
}
},
通过ajax请求成功后对获得数据的处理,将tooken出入cookie中:
调用接口并进行cookie设置后:
此时当我们进行其他接口的请求时,就会发现在request header 存在cookie tooken;并且可以成功请求接口。
EasyNVR能够通过简单的网络摄像机通道配置,将传统监控行业里面的高清网络摄像机IP Camera、NVR等具有RTSP协议输出的设备接入到EasyNVR,EasyNVR能够将这些视频源的音视频数据进行拉取,转换为RTMP/HLS,进行全平台终端H5直播(Web、Android、iOS),并且EasyNVR能够将视频源的直播数据对接到第三方CDN网络,实现互联网级别的直播分发;
详细说明:http://www.easydarwin.org/easynvr/
WEB:www.EasyDarwin.org
Copyright © EasyDarwin.org 2012-2017