API 对接开发包
安装
Line软件可以使用“/S”密匙(自Line7.0.5版本起)静默安装(silent install)。静默安装方式(Line7.1.0版本起)的密匙:
/NO_KERNEL=YES ; 不安装和运行内核服务; /NO_DRIVERS=YES ; 不安装视频采集卡驱动。
从6.6.2版本开始,用户可以通过配置专用命令项开启监控预览模式(包含录像回放功能)
Line的网页服务器可以获取视频流和单帧,这个选项能为第三方软件提供整合功能
通过命令行开启监控预览软件
命令格式
observer.exe [options] [modes] modes: --simple ; 以简单视窗模式开启 -a, --archive ; 以回放视窗开启 -m, --allow-multiple-instances ; 允许多次开启监控预览 --safe-mode ; 以强制显示子码流模式启动监控预览 options: -s, --server default: localhost -g, --connect-to-group 无默认值。 -p, --port default: 9780 -l, --login default: guard --pwd default: "" -c, --cam-index default: 0 ; 只在—simple模式下有效 --cam-stream default: -1 ; 只在—simple模式下有效 --pos, --window-pos coordinates format: X1 Y1 X2 Y2 ;默认-关闭窗口前保存当前坐标 --tray ; 启动程序隐藏到系统托盘 -t, --time date format: YYYY-MM-DD ; 默认日期格式 time format: hh:mm:ss ; 默认时间格式 -h, --help ; 显示帮助信息
说明
在命令行下通过配置以下的选项,用户可以开启监控预览软件:
- 模式转换选项
- 初始化选项
选项
模式
- --simple - 简单预览模式
比如通过第三方软件可以打开某个特定摄像机的简单预览模式 - -a, --archive - 如果用户当前是监控预览模式,通过设置该选项能使设备在同一个服务器上面切换到回放模式
- -m, --allow-multiple-instances - 执行另一个监控预览功能
- --safe-mode -子码流输出模式启动监控预览。
允许在子码流上强制切换一个摄像机画面到总视图。
初始化参数
- -s, --server [localhost]
如果初始值为空,则会被初始化连接到127.0.0.1 - -g, --connect-to-group
参数可以指定要连接的组;组识别符位于配置文件C:\ProgramData\DevLine\Linia\groups.cfg 或C:\Documents and Settings\All Users\Application Data\DevLine\Linia\groups.cfg的“grp id”行中。
例如:
--connect-to-group 1cff07ad-dc71-498d-87e1-1ef69206d370
-g 1cff07ad-dc71-498d-87e1-1ef69206d370
当连接Line云账号时:
--connect-to-group sample@google.com
-g sample@google.com - -l, --login [guard]
默认用户-guard(通常,大部分功能受限制) - --pwd [""]
用户密码,默认为空 - -c, --cam-index [0]
以simple模式通过本地"view"菜单连接的监控预览软件(是唯一被选择的摄象机),只有在—simple模式有效,默认摄象机ID为0 - --cam-stream [-1]
该参数仅在--simple模式下可用。--simple模式下连接时使用本地“视图”(准确地说只有一个指定的摄像头)。 默认码流ID为-1(自动),可用值:0(主码流),1(子码流)。 - --window-pos <coordinates>
窗口起始位置和大小
坐标:X1 Y1 X2 Y2 –窗口绝对坐标
(X1, Y1)坐标指的是左上角位置,(X2, Y2)坐标指的是右下角位置
默认打开预览软件,预览画面从最后一次关闭软件时记录的位置开始 - --tray
启动程序隐藏到系统托盘 - -t, --time <date> <time>
date format: YYYY-MM-DD ; 日期格式:YYYY-MM-DD默认为当前日期
time format: hh:mm:ss ; 时间格式:hh:mm:ss默认为当前时间这里设置的时间作为回放软件的起始时间点
如果用户设置-t参数时,使用的-p (port)的值等于监控预览软件(即kernel.exe软件)工作端口而不是回放软件(即oopnet.exe软件)工作端口,那么这个设置的时间无效
网页服务器规格
- 网页服务器规格
- 日期格式
- 身份验证
- 资源
- RPC (Remote Procedure Call远程过程调用) (8版本开始)
- 数据格式
- 请求结构
- 响应结构
- 批处理请求
- RPC API版本
- 服务器信息
- 用户
- 用户属性
- 组属性
- 经营权
- 用户和组设置示例
- users.get_users
- users.get_user
- users.add_user
- users.remove_user
- users.modify_user
- users.get_groups
- users.get_group
- users.add_group
- users.remove_group
- users.modify_group
- users.get_user_views
- users.set_user_views
- users.get_group_views
- users.set_group_views
- 服务器配置
- 档案文件
- 存档时间线
- archive.get_frames_timeline
- archive.get_motions_timeline
- archive.get_channels_list
- archive.get_streams_list
- archive.get_frames_list
- archive.get_frame
- archive.seek_frame
- archive.seek_frames
- 自定义事件日志
- 监视服务器状态
日期格式
基于JSON和XML(仅在UNIX命令格式下改变)语言描述支持(MIME 类型的JSON应用和XML应用)。这些语言功能描述的选择是基于对客户接受者需求的分析。如果不能从他们哪里得到明确的需求,则创建对象化将使用默认的预览(XML)方式
身份验证
基于HTTP摘要身份认证,用户名和密码必须以UTF-8编码格式
资源
每种资源都可以在下面的程序集里面找到相应的描述
URI: 服务器上的资源绝对路径
Version: 有效资源的接口版本
MIME-types: 有代表性的资源日期类型
Methods: 可用于这些资源的方法
通用资源描述,获取解决方法,参数要求,日期格式等等
摄像机
所有摄像机
URI: /cameras
Version: 1.2
MIME-types: application/json
, application/xml
Methods: GET
服务器上可见的所有摄像机清单。JSON描述 – camera对象阵列。XML语言描述
<camera-list> <camera/> <!-- opt --> </camera-list>
JSON语言对单摄像机处理的程序处理
{ "uri": /* string */, "name": /* string */, "width": /* number (current resolution) */, "height": /* number (current resolution) */, "image-uri": /* string */, "video-uri": /* string */, "osd-uri": /* string */, "ptz": { "pan-tilt": { "absolute-uri": /* string */, "relative-uri": /* string */ }, "zoom": { "absolute-uri": /* string */, "relative-uri": /* string */ }, "focus": { "absolute-uri": /* string */, "relative-uri": /* string */ }, "menu": { "show-uri": /* string */, "hide-uri": /* string */, "activate-uri": /* string */, "move-uri": /* string */ }, "presets-uri": /* string */ } }
XML语言对单摄像机处理的程序处理
<camera> <uri> <!-- xs:anyURI --> </uri> <name> <!-- xs:string --> </name> <width> <!-- xs:nonNegativeInteger --> </width> <height> <!-- xs:nonNegativeInteger --> </height> <image-uri> <!-- xs:anyURI --> </image-uri> <video-uri> <!-- xs:anyURI --> </video-uri> <osd-uri> <!-- xs:anyURI --> </osd-uri> <ptz> <pan-tilt> <absolute-uri> <!-- xs:anyURI --> </absolute-uri> <relative-uri> <!-- xs:anyURI --> </relative-uri> </pan-tilt> <zoom> <absolute-uri> <!-- xs:anyURI --> </absolute-uri> <relative-uri> <!-- xs:anyURI --> </relative-uri> </zoom> <focus> <absolute-uri> <!-- xs:anyURI --> </absolute-uri> <relative-uri> <!-- xs:anyURI --> </relative-uri> </focus> <menu> <activate-uri> <!-- xs:anyURI --> </activate-uri> <show-uri> <!-- xs:anyURI --> </show-uri> <hide-uri> <!-- xs:anyURI --> </hide-uri> <move-uri> <!-- xs:anyURI --> </move-uri> </menu> <presets-uri> <!-- xs:anyURI --> </presets-uri> </ptz> </camera>
资源相互影响范例
GET /cameras HTTP/1.1 Host: 127.0.0.1 Accept: application/json
HTTP/1.1 200 OK Date: Mon, 23 May 2005 21:07:53 GMT Content-Type: application/json [ { "uri": "http://127.0.0.1/3r5ggsbJHke", "name": "Newton", "width": 640, "height": 480, "image-uri": "http://127.0.0.1/Ogei7uquahbohyae", "video-uri": "http://127.0.0.1/pamua8Eif4moh6ae" }, "osd-uri": "http://127.0.0.1/knnfHg6" }, { "uri": "http://127.0.0.1/7GheuI95dfghk", "name": "Newton PTZ", "width": 1280, "height": 800, "image-uri": "http://127.0.0.1/PeevupeeNgeir7eu", "video-uri": "http://127.0.0.1/EK8Shadi3fa3noe1", "osd-uri": "http://127.0.0.1/Ldh485h" }, "ptz": { "focus": { "relative-uri": "http://127.0.0.1/ahgae6Shah1oothi" }, "menu": { "activate-uri": "http://127.0.0.1/quee0tieMe1weiRa", "show-uri": "http://127.0.0.1/uGai8doosho7Ohfi", "hide-uri": "http://127.0.0.1/Fohbureit0eedoo0", "move-uri": "http://127.0.0.1/EiY3aach4Nuutha8" }, "pan-tilt": { "relative-uri": "http://127.0.0.1/isai7chahCuChait" }, "zoom": { "relative-uri": "http://127.0.0.1/quieJae7zeish3oo" }, "presets-uri": "http://127.0.0.1/neeloe2po1Hua3xa" } }, { "uri": "http://127.0.0.1/hdUneK3oe8", "name": "camera1", "width": 320, "height": 240, "image-uri": "http://127.0.0.1/ethieSho5ching4e", "video-uri": "http://127.0.0.1/cee9rahtoo4uRooh" }, "osd-uri": "http://127.0.0.1/Jy8Uj8" }, { "uri": "http://127.0.0.1/Heo89qli3J", "name": "hallway", "width": 320, "height": 240, "image-uri": "http://127.0.0.1/xohpai8jeQuohm6f", "video-uri": "http://127.0.0.1/euDaiheejiaGae3s" } "osd-uri": "http://127.0.0.1/Oje654fgbd" } ]
图像
单帧
URI: <image-uri 摄像机对象>
Version: 1.0
MIME-type: image/jpeg
, image/png
Methods: GET
参数要求:
- quality — 图像质量。设置值整数0~100,未设置时使用该摄像机的默认值。
- resolution — 图像分辨率。未设置使用该摄像机当前值。
- keep_aspect_ratio — 保持纵横比:0-关闭,1-开启。默认关闭
资源相互影响示例
GET /ethieSho5ching4e?keep_aspect_ratio=1&resolution=640x480 HTTP/1.1 Host: 127.0.0.1 Accept: image/*
HTTP/1.1 200 OK Date: Mon, 23 May 2005 23:15:27 GMT Content-Type: image/jpeg Content-Length: 23185 [Image data]
M-JPEG视频流
URI: <video-uri of camera's object>
Version: 1.0
MIME-types: multipart/x-mixed-replace
, image/jpeg
Methods: GET
参数要求:
- fps — 每秒最大帧数。未设置使用该摄像机当前值。
- 图像质量。设置值整数0~100,未设置时使用该摄像机的默认值。
- resolution — 影像分辨率。未设置使用该摄像机当前值。
- keep_aspect_ratio — 保持纵横比:0-关闭,1-开启。默认关闭
资源相互影响示例:
GET /cee9rahtoo4uRooh?keep_aspect_ratio=0&fps=5&resolution=320x240 HTTP/1.1 Host: 127.0.0.1
HTTP/1.1 200 OK Date: Mon, 23 May 2005 23:15:27 GMT Content-Type: multipart/x-mixed-replace; boundary=xyzzy --xyzzy Content-Type: image/jpeg Content-Length: 15382 [Frame 1 data] --xyzzy Content-Type: image/jpeg Content-Length: 16105 [Frame 2 data] [etc]
H.264码流
URI: <streaming-uri of Camera object>
Methods: GET
- sub – 次码流 (较低分辨率);
- main –主码流 (较高分辨率).
- flv - Flash视频;
- m3u8 - HTTP实时视频(HLS) 播放列表.
以下是一些码流链接的示例(“/kfd3ado1sdrms” 是目标摄像头的uri):
/kfd3ado1sdrms/streaming/main.flv - Flash格式主码流; /kfd3ado1sdrms/streaming/sub.m3u8 - HLS格式的次码流; /kfd3ado1sdrms/streaming/sub.flv - Flash格式的次码流; /kfd3ado1sdrms/streaming/main.m3u8 -HLS格式的主码流.如果无法在标准模式下要求授权(HTTP Digest/Basic Authentication), 你可以在授权的部分使用要求参数,例如:
/kfd3ado1sdrms/streaming/main.flv?authorization=Basic%20d2ViOg==
RTSP码流
协议: RTSPPort: 9784 (默认)
URI:
/cameras/<index>/streaming/<name>
Methods: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE
局限: 在Windows版本中还未实现。
为了获取码流链接,使用摄像头序列号(<index>) 和码流名称(<name>),可以使用两个码流的值。
- sub – 次码流 (较低分辨率);
- main –主码流 (较高分辨率).
以下是一些码流链接的示例:
rtsp://login:@192.168.0.123:9784/cameras/0/streaming/main?audio=1 rtsp://login:password@192.168.0.123:9784/cameras/15/streaming/sub在客户端,无法在标准模式下要求授权(HTTP Digest/Basic Authentication),可以通过一个请求参数传输Authorization名称,例如:
rtsp://192.168.0.123:9784/cameras/2/streaming/main?authorization=Basic%20d2ViOg==
PTZ云台控制
摄像机PTZ控制
URI: <absolute-uri or relative-uri of camera's object/ptz/pan-tilt and /ptz/zoom>
Version: 1.0
MIME-types: application/json
, application/xml
Methods: PUT
URIs pan-tilt-data 和 zoom-data这些特定的对象记录时需要PTZ控制
JSON语言描述 pan-tilt-data
{ "x": /* number */, "y": /* number */, "speed": /* number */ }
XML语言描述 pan-tilt-data
<pan-tilt-data> <x> <!-- xs:float --> </x> <y> <!-- xs:float --> </y> <speed> <!-- xs:float --> </speed> </pan-tilt-data>
JSON语言描述 zoom-data
{ "zoom": /* number */, "speed": /* number */ }
XML语言描述:zoom-data
<zoom-data> <zoom> <!-- xs:float --> </zoom> <speed> <!-- xs:float --> </speed> </zoom-data>
Speed
参数有效值范围在0~1之间。x,y和zoom是为设置相对转动幅度抽象出来的参数,他们取值范围现在在-1~+1之间。
范例-从当前位置转动的相对幅度
PUT /isai7chahCuChait HTTP/1.1 Host: 127.0.0.1 Content-Type: application/xml <?xml version="1.0" encoding="UTF-8"?> <pan-tilt-data> <x>-1.0</x> <y>0.0</y> <speed>1.0</speed> </pan-tilt-data>
HTTP/1.1 204 No Content Date: Tue, 24 May 2005 17:21:15 GMT
范例-相对比例
PUT /quieJae7zeish3oo HTTP/1.1 Host: 127.0.0.1 Content-Type: application/xml <?xml version="1.0" encoding="UTF-8"?> <zoom-data> <zoom>1.0</zoom> <speed>1.0</speed> </zoom-data>
HTTP/1.1 204 No Content Date: Tue, 24 May 2005 17:21:37 GMT
摄像机聚焦控制
URI: <absolute-uri or relative-uri of camera's object/ptz/focus>
Version: 1.0
MIME-types: application/json
, application/xml
Methods: PUT
JSON语言描述聚焦参数:
{ "focus": /* number */, "speed": /* number */ }
XML语言描述聚焦参数
<focus-data> <focus> <!-- xs:float --> </focus> <speed> <!-- xs:float --> </speed> </focus-data>
Speed
参数有效值范围在[0, 1]之间。focus是为设置聚焦变化抽象出来的参数,他取值范围现在在-1~+1之间。
资源相互影响示例:
PUT /ahgae6Shah1oothi HTTP/1.1 Host: 127.0.0.1 Content-Type: application/json { "focus": -1.0, "speed": 1.0 }
HTTP/1.1 204 No Content Date: Tue, 24 May 2005 17:38:27 GMT
摄像机OSD菜单使用
URI: <activate-uri, show-uri, hide-uri and move-uri of camera's object/ptz/menu>
Version: 1.0
MIME-types: application/json
, application/xml
Methods: PUT
使用PUT
方法执行资源自有的命令。在资源里面选择activate-uri
(菜单选择项)选项,show-uri
(显示菜单),hide-uri
(隐藏菜单),允许在无要求载体的录制,在资源里面选择move-uri
选项录制菜单命令可以进行菜单移除
JSON语言描述菜单命令
{ "action": /* string */ }
XML语言描述菜单命令
<menu-command action="xs:string"/>
左右上下中有效的一个执行
菜单交互范例—菜单显示
PUT /uGai8doosho7Ohfi HTTP/1.1 Host: 127.0.0.1
HTTP/1.1 204 No Content Date: Tue, 24 May 2005 13:28:15 GMT
从底部移动到下个菜单目录
PUT /EiY3aach4Nuutha8 HTTP/1.1 Host: 127.0.0.1 Content-Type: application/json { "action": "down" }
HTTP/1.1 204 No Content Date: Tue, 24 May 2005 13:28:19 GMT
选择菜单目录
PUT /quee0tieMe1weiRa HTTP/1.1 Host: 127.0.0.1
HTTP/1.1 204 No Content Date: Tue, 24 May 2005 13:28:22 GMT
隐藏菜单
PUT /Fohbureit0eedoo0 HTTP/1.1 Host: 127.0.0.1
HTTP/1.1 204 No Content Date: Tue, 24 May 2005 13:28:24 GMT
所有摄像机的PTZ预置位
URI: <presets-uri camera's object>
Version: 1.0
MIME-types: application/json
, application/xml
Methods: GET, POST
单摄像机PTZ预设
资源交互范例
GET /neeloe2po1Hua3xa HTTP/1.1 Host: 127.0.0.1 Accept: application/xml
HTTP/1.1 200 OK Date: Tue, 24 May 2005 17:14:16 GMT Content-Type: application/xml <?xml version="1.0" encoding="UTF-8"?> <ptz-preset-list> <ptz-preset> <name>Unu</name> <activate-uri>http://127.0.0.1/OhX7iet9aithoofu</activate-uri> <preset-uri>http://127.0.0.1/doo3ree1aef8Vudo</preset-uri> <preview-uri>http://127.0.0.1/eer7vei9thoa4Eik</preview-uri> <update-uri>http://127.0.0.1/keenoo3IthoP4zai</update-uri> </ptz-preset> <ptz-preset> <name>Du</name> <activate-uri>http://127.0.0.1/xee9uz7Aich4tuga</activate-uri> <preset-uri>http://127.0.0.1/gool9hieR3iu5hoh</preset-uri> <preview-uri>http://127.0.0.1/ingae4ooCh8ahb4a</preview-uri> <update-uri>http://127.0.0.1/ohxuof4Su7ekiuDi</update-uri> </ptz-preset> <ptz-preset> <name>Tri</name> <activate-uri>http://127.0.0.1/Uosuu4aivuuchei4</activate-uri> <preset-uri>http://127.0.0.1/Atejae1baeD6Ku4A</preset-uri> <preview-uri>http://127.0.0.1/Sheip2ooXohd1Phe</preview-uri> <update-uri>http://127.0.0.1/haurieP9chosaif4</update-uri> </ptz-preset> </ptz-preset-list>
POST /neeloe2po1Hua3xa HTTP/1.1 Host: 127.0.0.1 Accept: application/xml Content-Type: application/xml <?xml version="1.0" encoding="utf-8"?> <ptz-preset> <name>Kvar</name> </ptz-preset>
HTTP/1.1 201 Created Date: Tue, 24 May 2005 17:14:23 GMT Content-Type: application/xml <?xml version="1.0" encoding="utf-8"?> <ptz-preset> <name>Kvar</name> <activate-uri>http://127.0.0.1/owaSiewahch3ohch</activate-uri> <preset-uri>http://127.0.0.1/xie4Aoz8aqu0aigh</preset-uri> <preview-uri>http://127.0.0.1/laeMeef4Kariphu6</preview-uri> <update-uri>http://127.0.0.1/ahghohK4iezoovah</update-uri> </ptz-preset>
单摄像机PTZ预设
URI: <preset-uri PTZPreset object>
Version: 1.0
MIME-types: application/json
, application/xml
Methods: DELETE, GET, PUT
JSON语言描述
{ "name": /* string */, "activate-uri": /* string */, "preview-uri": /* string */, "update-uri": /* string */ }
XML语言描述
<ptz-preset> <name> <!-- xs:string --> </name> <activate-uri> <!-- xs:anyURI --> </activate-uri> <preview-uri> <!-- xs:anyURI --> </preview-uri> <update-uri> <!-- xs:anyURI --> </update-uri> </ptz-preset>
资源交互范例
GET /phiwohGh5aer0ye4 HTTP/1.1 Host: 127.0.0.1 Accept: application/json
HTTP/1.1 200 OK Date: Tue, 24 May 2005 14:39:18 GMT Content-Type: application/json { "name": "Xyzzy!", "activate-uri": "http://127.0.0.1/ju9moT7wuciiW7ae", "preview-uri": "http://127.0.0.1/eite4ohLiQu5Veoc", "update-uri": "http://127.0.0.1/WieB4ahng4ieghi9" }
PUT /phiwohGh5aer0ye4 HTTP/1.1 Host: 127.0.0.1 Accept: application/xml Content-Type: application/json { "name": "Zyxxy?", "activate-uri": "http://127.0.0.1/ju9moT7wuciiW7ae", "preview-uri": "http://127.0.0.1/eite4ohLiQu5Veoc", "update-uri": "http://127.0.0.1/WieB4ahng4ieghi9" }
HTTP/1.1 200 OK Date: Tue, 24 May 2005 14:39:37 GMT Content-Type: application/xml <?xml version="1.0" encoding="utf-8"?> <ptz-preset> <name>Zyxxy?</name> <activate-uri>http://127.0.0.1/ju9moT7wuciiW7ae</activate-uri> <preset-uri>http://127.0.0.1/phiwohGh5aer0ye4</preset-uri> <preview-uri>http://127.0.0.1/eite4ohLiQu5Veoc</preview-uri> <update-uri>http://127.0.0.1/WieB4ahng4ieghi9</update-uri> </ptz-preset>
PTZ-预置位图片预览功能
URI: <preview-uri PTZPreset object>
Version: 1.0
MIME-types: image/jpeg
, image/png
Methods: GET
预览影像大小取决具体摄像机
资源交互范例:
GET /eite4ohLiQu5Veoc HTTP/1.1 Host: 127.0.0.1 Accept: image/png
HTTP/1.1 200 OK Date: Tue, 24 May 2005 11:27:16 GMT Content-Type: image/png Content-Length: 2108 [Image Data]
麦克风
所有麦克风
URI: /microphones
Version: 1.2
MIME-types: application/json
, application/xml
Methods: GET
服务器上可用的所有麦克风清单
JSON语言描述—microphone
整列对象
XML语言描述:
<microphone-list> <microphone/> <!-- opt --> </microphone-list>
JSON语言描述单麦克风:
{ "uri": /* string */, "name": /* string */, "audio-uri": /* string */, "camera-uri": /* string */ }
XML语言描述单麦克风:
<microphone> <uri> <!-- xs:anyURI --> </uri> <name> <!-- xs:string --> </name> <audio-uri> <!-- xs:anyURI --> </audio-uri> <camera-uri> <!-- xs:anyURI --> </camera-uri> </microphone>
资源交互范例:
GET /microphones HTTP/1.1 Host: 127.0.0.1 Accept: application/json
HTTP/1.1 200 OK Date: Mon, 23 May 2005 21:07:53 GMT Content-Type: application/json [ { "uri": "http://127.0.0.1/6Hjk9l4dudlf", "name": "Newton", "audio-uri": "http://127.0.0.1/Ogei7uquahbohyae", "camera-uri": "http://127.0.0.1/pamua8Eif4moh6ae" }, { "uri": "http://127.0.0.1/Pqja954nfrdqcb", "name": "Microphone1", "audio-uri": "http://127.0.0.1/ethieSho5ching4e", "camera-uri": "http://127.0.0.1/cee9rahtoo4uRooh" }, { "uri": "http://127.0.0.1/Q57mak8maogk", "name": "Hallway", "audio-uri": "http://127.0.0.1/xohpai8jeQuohm6f", "camera-uri": "http://127.0.0.1/euDaiheejiaGae3s" } ]
音频
音频流
URI: <audio-uri Microphone object>
Version: 1.1
MIME-types: audio/x-wav
, audio/mpeg
Methods: GET
参数要求:
- sample_rate — 信号取样频率。有效值范围在[8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000] Hz。未设置使用22050Hz
- bit_rate — 比特率,如128.未设置mpeg格式音频使用64 kbps, x-wav格式音频使用22050 * 16 bps (22.05 kHz * 16 bit)
资源交互范例:
GET /ethieSho5ching4e?sample_rate=44100&bit_rate=128 HTTP/1.1 Host: 127.0.0.1 Accept: audio/mpeg
HTTP/1.1 200 OK Date: Mon, 23 May 2005 23:15:27 GMT Content-Type: audio/mpeg [Audio data]
音频持续广播直到有其他信号打断
OSD显示
创建OSD
URI: <osd-uri Camera's object>
Version: 1.5
MIME-types: application/json
, application/xml
Methods: POST
JSON语言描述对象:
{ "name": /* string */, "left": /* number */, "top": /* number */, "font-size": /* number */, "font-color": /* string */, "line-count": /* number */, "draw-background": /* number */ }
XML语言描述对象:
<osd-zone-data> <name> <!-- xs:string --> </name> <left> <!-- xs:nonNegativeInteger --> </left> <top> <!-- xs:nonNegativeInteger --> </top> <font-size> <!-- xs:nonNegativeInteger --> </font-size> <font-color> <!-- xs:string --> </font-color> <line-count> <!-- xs:nonNegativeInteger --> </line-count> <draw-background> <!-- xs:nonNegativeInteger --> </draw-background> </osd-zone-data>
输出坐标和字体大小在帧大小中的百分比。
<font-color>
参数设置类似#RGB,以16进制格式设置,范围在0~255之间取值比如:#FF0000, #0A5B4F
<draw-background>
参数设置文本背景底纹(根据文本颜色亮度来决定用对比度或锐度):0-无底纹,1-有底纹
成功连接服务器在这种要求下有响应
HTTP/1.1 201 Created Location: <URI OSD>
资源交互范例:
POST <osd-uri Camera's object> HTTP/1.1 Host: 127.0.0.1 Content-Type: application/json { "name": "xyz", "left": 10, "top": 20, "font-size": 10, "font-color": "#00FF00", "line-count": 10, "draw-background": 1 }
HTTP/1.1 201 Created Date: Mon, 23 May 2005 23:15:27 GMT Location: <osd-uri Camera's object>/xyz
移除OSD-对象
URI: <URI OSD object>
Version: 1.2
Methods: DELETE
资源交互范例:
DELETE <URI OSD-object> HTTP/1.1 Host: 127.0.0.1
HTTP/1.1 204 No content Date: Mon, 23 May 2005 23:15:27 GMT
增加对OSD对象的内容
URI: <URI OSD object>
Version: 1.2
MIME-types: text/plain
Methods: POST
资源交互范例:
POST <URI OSD-object> HTTP/1.1 Host: 127.0.0.1 Content-Type: text/plain Content-Length: 15 Hello, world!!!
HTTP/1.1 201 Created Date: Mon, 23 May 2005 23:15:27 GMT
从OSD-对象上移除内容
URI: <URI OSD object>/clear
Version: 1.2
MIME-types: text/plain
Methods: PUT
资源交互范例:
PUT <URI OSD-object>/clear HTTP/1.1 Host: 127.0.0.1
HTTP/1.1 204 No content Date: Mon, 23 May 2005 23:15:27 GMT
事件存档
创建事件存档
URI: /events
MIME-types: application/json, application/xml
Methods: POST
资源交互范例:
{ "time" : /*string*/, "source" : /*string*/, "name" : /*string*/, "device": /*number*/, "data" : /*string*/ }
参数说明:
time - 存档事件开始时间按ISO 8601格式,可选,默认值为服务器的当前时间
source - 存档事件源。可选。默认值是一个空字符串.
name - 存档事件名。可选。默认值是一个空字符串.
device - 摄像机的序号。可选。默认值是-1,指示该事件是不依赖于任何摄像头。
data - 归档事件数据。可选。默认值是一个空字符串.
服务器响应:
HTTP/1.1 201 Created Location: <URI Archive Event object>
资源交互范例:
POST /events HTTP/1.1 Host: localhost:9786 Content-Type: application/json { "time" : "2005-08-09T18:31:42.201", "source" : "test source", "name" : "test name", "device": 0, "data" : "test data" } HTTP/1.1 201 Created Date: Mon, 23 May 2009 23:15:27 GMT Location: events/gds2w8sd1w
位置头包含存档事件对象以后可以访问的地址
RPC (Remote Procedure Call远程过程调用)
URI: /rpc
MIME types: application/json, application/x-msgpack
Methods: POST
此资源提供便利的功能全面的Line服务器的通讯协议。此协议可被用于如“监控预览”应用。开发者无需实施网络部分的交互,能使用HTTP作为通讯协议。
数据格式
请求可以通过JSON传递 (需版本7.1.1或者更高) 或者MessagePack信息包格式 (版本7.0及以上)。请求和应答的格式相似。文本编码为UTF-8。为了获得最大的性能建议使用MessagePack。所有的例子都以JSON格式。
时间
时间表现为一组整数,其元素代表年,月,日,小时,分钟,秒和毫秒。如果一些元素在数列末尾为零,那么它们可被省略。例如, “2016年的10月30日,15:00”不仅可以表示为[2016, 11, 30, 15, 0, 0, 0],但也可表示为 [2016, 11, 30, 15].
回放时间轴
时间轴用于确定(和代表)在一定时间内是否存在录像文件。时间轴中最小的时间间隔被称为时间轴分辨率。时间轴间隔可以分割为1秒开始的任意时间间隔。时间间隔可以任意设定,例如10秒,16秒,2分钟,30分钟,7天等。
时间轴示例:- [0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0] – 此时间轴从2016年1月1日开始,截止2017年1月1日。此时间间隔为1个月。此情况下,很明显只有二月和三月的录像;
- [1, 0] –此时间轴从2016年1月1日开始,截止2017年1月1日。此时间间隔为6个月。此情况下,只有2016年半年的录像;
- [0, 1, 0] – 此时间轴从2015年1月1日开始,截止2018年1月1日。此情况下,只有2016年的记录;
- [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0] – 此时间轴代表2016年2月。二月5号和17号有录像。请注意时间轴中月份总是包含31天,所以5月,6月,7月将包含93个元素。在6月31日的所代表的元素通常为零,因为该天不存在。
- [0, 0, 0, 0, 0, 0, 1, 1, 0, 0] – 此时间轴起始于2016年3月10日00:30截止于2016年3月10日00:41。此处录像存在于00:36和00:37。
请求结构
在单个请求的情况下,它作为一个对象要有一个必需字段:
- method - 一种方式的名称。
和其他可选字段:
- params - 带有参数的对象;
- id - 一个整数的ID包含在响应中;
响应案列:
1{ 2 "id" : 42, 3 "method" : "some_method", 4 "params" : 5 { 6 "some_param" : "some_value" 7 } 8}
响应结构
响应也是一个对象,一组取决于成功请求的字段:
- id - 一个整数的ID包含在响应中;
- result - 一个结果的对象,它包含成功处理命令的结果;
- error - 一个包含错误信息的对象.
一个成功处理请求的案列:
POST /rpc HTTP/1.1 Host: 127.0.0.1 Content-Type: application/json { "method" : "sum_two_numbers", "params" : { "first" : 30, "second" : 12 } }
HTTP/1.1 200 OK Date: Tue, 07 Jun 2016 07:52:46 GMT Content-Type: application/json { "result" : { "sum" : 42 } }
一个在请求处理错误的案例:
POST /rpc HTTP/1.1 Host: 127.0.0.1 Content-Type: application/json { "method" : "sum_two_numbers", "params" : { "second" : 30 } }
HTTP/1.1 200 OK Date: Tue, 07 Jun 2016 07:52:46 GMT Content-Type: application/json { "error" : { "type" : "invalid_param", "message" : "first" } }
批处理请求
服务器支持同时传输的命令列表的执行。在此情况下,命令应该表示为一组单一请求,响应这样的请求表现为响应一组单一的请求,响应的顺序取决于请求的顺序:
POST /rpc HTTP/1.1 Host: 127.0.0.1 Content-Type: application/json [ { "method" : "mul_two_numbers", "params" : { "first" : 7, "second" : 6 } }, { "method" : "sub_two_numbers", "params" : { "first" : 30 } } ]
HTTP/1.1 200 OK Date: Tue, 07 Jun 2016 07:52:46 GMT Content-Type: application/json [ { "result" : { "mul" : 42 } }, { "error" : { "type" : "invalid_param", "message" : "second" } } ]
有关RPC
API版本的信息包含一个文本名称和整数值,该值在每次对API服务器进行更改时都会增加。版本值可用于确定服务器支持所需的方法和参数。具有相同名称的方法可以在不同的API版本中以不同的方式实现,例如,它可以具有不同的参数。
获取版本
请求示例:
1{ 2 "method" : "get_version" 3}
请求示例:
1{ 2 "result" : { 3 "version" : { 4 "name" : "v20200622", 5 "value" : 13 6 } 7 } 8}
服务器信息
get_server_info
最低API版本:12
响应内容:
- id - 服务器的唯一标识符
- name - 服务器名称。
- network - 服务器网络设置的详细信息,使用不同协议连接到服务器的端口号列表。
- version - 版本信息。
- local_time - 服务器本地时间。
请求示例:
1{ 2 "method" : "get_server_info", 3 "version" : 12 4}
请求示例:
1{ 2 "result" : { 3 "info" : { 4 "id" : "bf57f49b771a", 5 "name" : "Devline XVR4", 6 "network" : { 7 "ports" : { 8 "http" : 9786, 9 "main" : 9780, 10 "ping" : 9877, 11 "rtsp" : 9784 12 } 13 }, 14 "version" : { 15 "name" : "v20200901", 16 "value" : 15 17 }, 18 "local_time" : [2020,9,29,16,39,38,226] 19 } 20 } 21}
用户
系统用户设置显示为组和用户的列表。每个用户可以包含在一个组中,也可以进行独立于组的设置。一个组不能包含在另一组中。主系统用户(默认情况下为“ admin”)不能继承组的设置,并且没有任何类型的权限限制。允许主要用户更改设置的列表仅限于设置用户名和密码对以及更改屏幕上摄像机的视图。
通过将父组的标识符分配给用户属性列表,可以将用户包括在组中。包含在组中的用户既可以继承父组的每个单独的配置属性,也可以覆盖其值。例如,用户可以继承可访问视频设备的列表,但具有音频设备的唯一列表。如果分配了用户的属性值,则该属性被视为已覆盖(如果未覆盖),则被继承。如果未为用户或父组定义属性,则用户没有与该属性相对应的限制,例如,如果未分配设备列表,则所有设备均可用。
用户属性
强制性的:
- id - 标识符;
- name - 名称;
- secret - 用户密码, 按MD5计算(用户名:realm:password),其中可以使用“auth”RPC方法获得服务器实际的值“realm”。
可选:
- group - 父组标识符;
- description - 描述;
- enabled - 活动,默认为true;
- expiration_time - 活动结束时间;
- time_ranges - 工作日和活动时间表列表;
- video_devices - 可用视频设备列表;
- audio_devices - 可用音频设备列表;
- ptz_devices - 可用ptz设备列表;
- server_operations - 可用服务器操作的列表;
- client_operations - 可用客户端操作的列表;
- views - 如果未定义,则从父组继承视图列表。
组属性
强制性的:
- id - 标识符;
- name — 名称;
可选:
- description - 描述;
- enabled - 活动,默认为true;
- expiration_time - 活动结束时间;
- time_ranges - 工作日和活动时间表列表;
- video_devices - 可用视频设备列表;
- audio_devices - 可用音频设备列表;
- ptz_devices - 可用ptz设备列表;
- server_operations - 可用服务器操作的列表;
- client_operations - 可用客户端操作的列表。
经营权
操作权限列表的形式是字典,其中操作标识符用作键,true或false用作值。用户可以使用的所有操作集被分为两个列表:服务器操作和客户端操作。服务器只能控制用户执行的一组有限的操作,例如更改配置和对存档的访问,但不能控制,例如最小化客户端应用程序窗口、保存图像和使用数码变焦。在服务器和客户机上可以限制若干操作,而在客户机上进一步禁止操作只是为了便于与程序交互(在服务器上禁止的操作缺少接口元素)。
服务器操作:
- archive_access - 访问存档;
- archive_events_add - 将事件添加到存档;
- archive_events_access - 访问存档中的事件;
- adm_configuration - 访问更改配置文件;
- adm_users - 更改用户设置;
- adm_video - 更改视频设备设置;
- adm_audio - 更改音频设备设置;
- adm_ptz - 更改ptz设备设置;
- adm_archive - 更改存档记录设置;
- adm_network - 更改网络设置;
- adm_analytics - 更改视频分析设置;
- adm_reactions - 更改响应设置;
- adm_licensing - 访问许可设置;
- adm_userlog - 访问用户日志;
- adm_filesystem - 访问服务器文件系统;
- adm_monitoring - 访问服务器状态监视。
客户端操作:
- find_server - 搜索服务器;
- select_views - 切换相机视图;
- cam_assignment - 改变摄像机在视图中的位置;
- change_cam_stream - 切换摄像头流显示;
- change_all_cams_stream - 同时切换所有摄像头的流显示;
- use_zoom - 数码图像变焦;
- save_cam_frame - 保存帧;
- setup_cam_color - 快速改变摄像头图像参数;
- view_archive - 查看存档;
- view_archive_in_folder - 查看指定文件夹中的存档;
- export_archive - 导出存档;
- decompose_frames - 将档案分解为单独的框架;
- view_archive_events - 存档事件查看;
- add_archive_events - 将事件添加到存档;
- enter_in_adm - 服务器管理中输入;
- adm_view_monitoring - 服务器状态监视;
- adm_view_analytics - 访问视频分析设置;
- adm_access_to_filesystem - 访问服务器文件系统;
- adm_setup_licensing - 访问许可设置;
- adm_setup_users - 访问用户设置;
- adm_setup_video - 访问视频设备设置;
- adm_setup_audio - 访问音频设备设置;
- adm_setup_ptz - 访问ptz设备设置;
- adm_setup_network - 访问网络设置;
- adm_setup_archive - 访问归档记录设置;
- adm_setup_reactions - 访问反应设置;
- adm_view_userlog - 访问用户日志;
- close_program - 程序终止;
- maximize_window - 最大化程序窗口到全屏;
- minimize_window - 最小化程序窗口。
用户和组设置示例
无权限限制的用户:
1{ 2 "id" : "00000000", 3 "name" : "admin", 4 "secret" : "d87fab4d658bc121c37936fb957d2fa5" 5}
设备列表有限的已断开连接的用户:
1{ 2 "id" : "00000001", 3 "name" : "user", 4 "secret" : "d87fab4d658bc121c37936fb957d2fa5", 5 "description" : "Some text. Some text.", 6 "enabled" : false, 7 "video_devices" : [ "3", "11" ] 8}
用户,有效期至1997年8月29日凌晨2:14:
1{ 2 "id" : "00000001", 3 "name" : "user", 4 "secret" : "d87fab4d658bc121c37936fb957d2fa5", 5 "expiration_time" : [1997,8,29,2,14,00] 6}
具有有限操作列表的用户组和包含在其中的用户,他们继承操作限制并对操作时间有自己的限制(周一至周五08:00-19:00和周六至周日10:00-15:00):
1{ 2 "id" : "00000001", 3 "name" : "Group1", 4 "server_operations" : { "archive_access" : true }, 5 "client_operations" : { "view_archive" : true, "save_cam_frame" : true } 6}
1{ 2 "id" : "00000001", 3 "name" : "User1", 4 "group" : "00000001", 5 "secret" : "d87fab4d658bc121c37936fb957d2fa5", 6 "time_ranges" : [ 7 { 8 "dow" : [0,1,2,3,4], 9 "start_time" : [8,0,0], 10 "end_time" : [19,0,0] 11 }, 12 { 13 "dow" : [5,6], 14 "start_time" : [10,0,0], 15 "end_time" : [15,0,0] 16 } 17 ] 18}
用户继承所有父组属性,但在屏幕上有自己的可用相机位置列表:
1{ 2 "id" : "00000002", 3 "name" : "user", 4 "secret" : "d87fab4d658bc121c37936fb957d2fa5", 5 "views" : {} 6}
users.get_users
最低API版本:12
Getting a list of server users.
请求示例:
1{ 2 "method" : "users.get_users", 3 "version" : 12 4}
请求示例:
1{ 2 "result" : { 3 "users" : [ 4 { 5 "id" : "00000000", 6 "name" : "admin", 7 "secret" : "4fe612b4dcf238983ae0ad620ce4961c" 8 }, 9 { 10 "id" : "00000001", 11 "name" : "user", 12 "secret" : "3ae0ad620ce4961c4fe612b4dcf23898", 13 "video_devices" : ["2", "4"] 14 } 15 ] 16 } 17}
users.get_用户
最低API版本:12
获取服务器用户列表。
请求参数:
- id-用户id。
请求示例:
1{ 2 "method" : "users.get_user", 3 "params" : { "id" : "00000000" }, 4 "version" : 12 5}
请求示例:
1{ 2 "result" : { 3 "user" : { 4 "id" : "00000000", 5 "name" : "admin", 6 "secret" : "4fe612b4dcf238983ae0ad620ce4961c" 7 } 8 } 9}
users.add_user
最低API版本:12
添加用户。
请求参数:
- User - 不带标识符的用户属性集。
请求示例:
1{ 2 "method" : "users.add_user", 3 "params" : { 4 "user" : { 5 "name" : "test", 6 "secret" : "fef6bd724619600ebb1de3936337e942" 7 } 8 }, 9 "version" : 12 10}
请求示例:
1{ 2 "result" : { 3 "user" : { 4 "id" : "00000003" 5 } 6 } 7}
users.remove_user
最低API版本:12
删除用户。
请求参数:
- id-用户id。
请求示例:
1{ 2 "method" : "users.remove_user", 3 "params" : { "id" : "00000002" }, 4 "version" : 12 5}
请求示例:
1{ 2 "result" : {} 3}
错误示例:
1{ 2 "error" : { 3 "type" : "invalid_param", 4 "message" : "id" 5 } 6}
users.modify_user
最低API版本:12
更改用户设置。
请求参数:
- 用户-一组可修改的用户属性,包括用户ID。
如果需要禁用用户,则建议仅在要更改的属性集中包含必要的更改,例如仅“启用”。执行请求后,参数中未包含的所有用户属性都将保持不变。
请求断开用户连接的示例:
1{ 2 "method" : "users.modify_user", 3 "params" : { 4 "user" : { 5 "id" : "00000003", 6 "enabled" : false 7 } 8 }, 9 "version" : 12 10}
请求将用户连接到组的示例:
1{ 2 "method" : "users.modify_user", 3 "params" : { 4 "user" : { 5 "id" : "00000003", 6 "group" : "00000002" 7 } 8 }, 9 "version" : 12 10}
请求更改用户可访问视频设备列表的示例:
1{ 2 "method" : "users.modify_user", 3 "params" : { 4 "user" : { 5 "id" : "00000003", 6 "video_devices" : [ "4", "12" ] 7 } 8 }, 9 "version" : 12 10}
请求移除对用户可访问视频设备列表的限制的示例(如果用户包含在组中,则在执行请求后,他将继承父组的列表;如果用户独立于组,则他将没有任何视频设备限制):
1{ 2 "method" : "users.modify_user", 3 "params" : { 4 "user" : { 5 "id" : "00000003", 6 "video_devices" : null 7 } 8 }, 9 "version" : 12 10}
请求示例:
1{ 2 "result" : {} 3}
users.get_groups
最低API版本:12
正在获取服务器用户组列表。
请求架构类似于users.get_users.
users.get_group
最低API版本:12
正在获取用户组设置。
请求参数:
- id—组标识符。
类似的邀请方案users.get_user.
users.add_group
最低API版本:12
正在添加用户组。
请求参数:
- 组-组属性集。
请求架构类似于users.add_user.
users.remove_group
最低API版本:12
正在删除用户组。
请求参数:
- id—组标识符。
请求架构类似于users.remove_user.
users.modify_group
最低API版本:12
更改用户组设置。
请求参数:
- 组-一组可修改的组属性,包括组标识符。
请求架构类似于users.modify_user.
users.get_user_views
最低API版本:12
正在获取用户可访问的视图列表。
请求参数:
- id-用户标识符。
请求示例:
1{ 2 "method" : "users.get_user_views", 3 "params" : { "id" : "00000002" }, 4 "version" : 12 5}
users.set_user_views
最低API版本:12
更改用户可访问的视图集。
请求参数:
- id—用户标识;
- 视图-视图集。
users.get_group_views
最低API版本:12
正在获取用户组可访问的视图列表。
请求参数:
- id—组标识符。
请求示例:
1{ 2 "method" : "users.get_group_views", 3 "params" : { "id" : "00000002" }, 4 "version" : 12 5}
users.set_group_views
最低API版本:12
更改用户组可访问的视图列表。
请求参数:
- id—组标识符;
- 视图-视图集。
视图-视图集。
对服务器配置的任何更改(例如,对用户列表及其权限、相机设置、存档录制参数等的更改)在实施后都是临时的,可以通过客户端命令或在重新启动服务器后取消。对服务器设置的更改只能通过使用客户端命令修复到配置文件。
settings.accept
最低API版本:13
正在将当前服务器设置保存到配置文件。
请求示例:
1{ 2 "method" : "settings.accept", 3 "version" : 13 4}
请求示例:
1{ 2 "result" : {} 3}
settings.reset
最低API版本:13
将所有当前服务器设置重置为配置文件中保存的先前状态。
请求示例:
1{ 2 "method" : "settings.reset", 3 "version" : 13 4}
请求示例:
1{ 2 "result" : {} 3}
档案文件
存档时间线
从这一点上讲,时间轴被理解为表示有关存档中是否存在记录的信息的位表示:每单位时间是否有存档。在这个定义中,时间单位作为时间线的分辨率。服务器允许以最长1秒的任何分辨率获取时间线。分辨率不必是1秒、分钟、天等的倍数。任何时间线都可以精确计算,例如,最多10秒、16秒、2分钟、30分钟、7天等。
时间表示例:- [0,1,1,0,0,0,0,0,0,0]–时间线从2016年1月1日到2017年1月1日,分辨率为1个月。在这种情况下,很明显,2月和3月的存档在服务器上可用;
- [1,0]–从2016年1月1日到2017年1月1日的时间线,分辨率为6个月。该档案将于2016年上半年提供;
- [0,1,0]–时间线从2015年1月1日到2018年1月1日,分辨率为1年。2016年档案可用;
- [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0]——2016年2月时间表。2月5日和17日的档案可用。请记住,在构建时间线时,任何一年中任何月份的天数都设置为31,即在请求5月、6月和7月的时间线时,服务器将返回93个元素的数组,其中对应于6月31日的元素将始终等于零,因为这样的日期不存在。
- [0,0,0,0,0,0,1,1,0,0]–时间线从2016年3月10日00:30到2016年3月10日00:41。存档时间为00:36和00:37。
archive.get_frames_timeline
获取时间表。
请求参数:
- channel – 通道标识符是可选的:如果未指定,则使用所有可用的;
- stream – 流标识符(“视频”、“视频2”、“视频3”、“音频”);
- start_time – 时间线开始时间;
- end_time – 时间线结束时间;
- unit_len – 时间线分辨率(秒)。
请求示例:
- 时间线–请求的时间线(有关其表示的说明,请参阅“数据格式”)。
从2016年2月的每个摄像头的存档中请求天数列表的示例:
1{ 2 "method" : "archive.get_frames_timeline", 3 "params" : 4 { 5 "start_time" : [2016, 2, 1], 6 "end_time" : [2016, 3, 1], 7 "unit_len" : 86400 //一天的秒数-60*60*24 8 } 9}
请求示例:
1{ 2 "result" : 3 { 4 "timeline" : [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0] 5 } 6}
2016年2月1日摄像机0第二流存档请求分钟列表示例:
1{ 2 "method" : "archive.get_frames_timeline", 3 "params" : 4 { 5 "channel" : 0, 6 "stream" : "video2", 7 "start_time" : [2016, 2, 1], 8 "end_time" : [2016, 2, 2], 9 "unit_len" : 60 10 } 11}
请求示例:
1{ 2 "result" : 3 { 4 "timeline" : [0, 0, 1, ... , 0, 0, 1] //the array consists of 1440 elements 5 } 6}
archive.get_motions_timeline
通过指定的过滤器(存档中的分析)获取运动检测时间线。
请求参数:
- channel - 通道标识符可选:如果未指定,则使用所有可用的;
- start_time - 时间线开始时间;
- end_time - 时间线结束时间(时间段的总长度不得超过5分钟);
- unit_len - 时间线分辨率(秒);
- filter - 指定过滤参数的字典。
过滤参数(所有参数都是可选的):
- min_area - 最小运动大小,以浮点数从0.0到1.0的数字表示,例如0.1表示运动大小不小于帧大小的10%;
- max_area - 最大运动尺寸;
- mask64 - 64位掩模,带有8х8单元网格,叠加在整个相机图像上,以64个字符的行表示,每个字符可以是“0”或“1”,例如用于过滤运动的“0000000000000000000000000000000000000000000000000000”,影响第二个图像串的第四个单元,以8x8单元表的形式表示;
- colors - 数组,其中每个元素表示为3个数字的数组,对应于范围[0,255]内所需颜色的RGB分量。
响应内容:
- 时间线–请求的时间线(有关其表示的说明,请参阅“数据格式”)。
请求示例:
1{ 2 "method" : "archive.get_motions_timeline", 3 "params" : 4 { 5 "start_time" : [2016, 2, 1, 18, 0, 0], 6 "end_time" : [2016, 2, 1, 18, 5, 0], 7 "unit_len" : 60, 8 "filter" : 9 { 10 "min_area" : 0.03, 11 "colors" : [[120, 16, 23], [43, 55, 233]] 12 } 13 } 14}
响应内容:
1{ 2 "result" : 3 { 4 "timeline" : [0, 1, 0, 0, 1] 5 } 6}
archive.get_channels_list
获取存档中指定时间段的可用摄影机列表。
请求参数:
- start_time - 搜索可用频道时时间段的开始;
- end_time - 搜索可用频道时的时间段结束。
响应内容:
- channels - 每个元素对应一个通道的数组。
“channels”数组元素的内容:
- channel - 通道标识符。
请求示例:
1{ 2 "method" : "archive.get_channels_list", 3 "params" : 4 { 5 "start_time" : [2016, 1, 6], 6 "end_time" : [2016, 1, 7] 7 } 8}
响应示例:
1{ 2 "result" : 3 { 4 "channels" : 5 [ 6 { 7 "channel" : 0 8 }, 9 { 10 "channel" : 1 11 } 12 ] 13 } 14}
archive.get_streams_list
在指定的时间段从特定相机获取存档中可用流的列表。
请求参数:
- channel - 信道标识符;
- start_time - 搜索可用流时时间段的开始;
- end_time - 搜索可用流时的时间段结束。
响应内容:
- streams - 每个元素对应于一个流的数组。
“streams”数组元素的内容:
- stream - 流标识符。
请求示例:
1{ 2 "method" : "archive.get_streams_list", 3 "params" : 4 { 5 "channel" : 0, 6 "start_time" : [2016, 1, 6], 7 "end_time" : [2016, 1, 7] 8 } 9}
响应示例:
1{ 2 "result" : 3 { 4 "streams" : 5 [ 6 { 7 "stream" : "video" 8 }, 9 { 10 "stream" : "video2" 11 }, 12 { 13 "stream" : "video3" 14 }, 15 { 16 "stream" : "audio" 17 }, 18 ] 19 } 20}
archive.get_frames_list
正在获取可供下载的帧列表。
请求示例:
- channel - 通道标识符;
- stream - 流标识符;
- start_time - 搜索帧时时间段的开始;
- end_time - 搜索帧时时间段的结束。
响应内容:
- frames_list - 每个元素对应一个帧的数组。
“frames _list”数组元素的内容:
- id - frame identifier;
- gop_index - gop中帧的序列号,0–参考/控制/帧内;
- timestamp - 帧时间。
2016年3月1日13:00从照相机0的“视频”流请求帧列表的示例:
1{ 2 "method" : "archive.get_frames_list", 3 "params" : 4 { 5 "channel" : 0, 6 "stream" : "video", 7 "start_time" : [2016, 3, 1, 13, 0], 8 "end_time" : [2016, 3, 1, 14, 0] 9 } 10}
响应示例:
1{ 2 "result" : 3 { 4 "frames_list" : 5 [ 6 { 7 "id" : "f9lk3jfs42df41fsdj4", 8 "gop_index" : 12, 9 "timestamp" : [2016, 3, 1, 13, 11, 43, 543] 10 }, 11 { 12 "id" : "kdj48dh2n", 13 "gop_index" : 13, 14 "timestamp" : [2016, 3, 1, 13, 11, 43, 659] 15 }, 16 ... , 17 { 18 "id" : "ja4wds94dk34", 19 "gop_index" : 2, 20 "timestamp" : [2016, 3, 1, 13, 58, 12, 78] 21 } 22 ] 23 } 24}
archive.get_frame
获取特定帧的数据。方法仅在application/x-msgpack格式中受支持。
请求示例:
- channel - 信道标识符;
- stream - 流标识符;
- id - 帧标识符。
响应内容:
- frame - 包含元数据和帧数据的字典。
“框架”字典的内容:
- info - 带帧信息的字典;
- raw_bytes - 帧数据。
请求视频帧时“信息”字典的内容:
- timestamp - 帧时间;
- gop_index - gop中帧的序列号;
- width (might be omited) - 框架的宽度;
- height (might be omited) - 框架的高度;
- codec - 值之一:“h264”、“mpeg4”、“mjpeg”。
请求音频帧时“信息”字典的内容:
- timestamp - 帧时间;
- codec - 当前只能使用“pcm”值;
- channels - 通道数;
- sps - 每秒采样数;
- bps - 每秒的位数。
请求示例:
1{ 2 "method" : "archive.get_frame", 3 "params" : 4 { 5 "channel" : 0, 6 "stream" : "video", 7 "id" : "deadbeef" 8 } 9}
响应示例:
1{ 2 "result" : 3 { 4 "frame" : 5 { 6 "info" : 7 { 8 "timestamp" : [2016, 12, 23, 12, 54, 26, 943], 9 "gop_index" : 21, 10 "codec" : "h264" 11 }, 12 "raw_bytes" : ... 13 } 14 } 15}
archive.seek_frame
正在存档中搜索最近的帧。仅在application/x-msgpack格式中支持获取帧数据。
请求参数:
- channel – 信道标识符;
- stream – 流标识符;
- start_time – 帧搜索的开始时间;
- direction – 帧搜索的方向,如“向前”或“向后”字符串;
- read_data – 表示需要从光盘中读取帧数据及其相关信息的标志。
响应内容:
- frame–在设置了“read_ data”标志的情况下,包含元数据和帧数据的字典。
“frame”dictionary字段的内容与响应“frame”的同名词典的内容完全对应 "archive.get_frame" 方法。
如果服务器找不到任何帧,将返回错误。
请求示例:
1{ 2 "method" : "archive.seek_frame", 3 "params" : 4 { 5 "channel" : 0, 6 "stream" : "video3", 7 "start_time" : [2016, 12, 1, 13, 0], 8 "read_data" : true, 9 "direction" : "backward" 10 } 11}
请求示例:
1{ 2 "result" : 3 { 4 "frame" : 5 { 6 "info" : 7 { 8 "timestamp" : [2016, 11, 23, 12, 54, 26, 943], 9 "gop_index" : 0, 10 "codec" : "mjpeg" 11 }, 12 "raw_bytes" : ... 13 } 14 } 15}
archive.seek_frames
在存档中搜索最近的帧序列。
有关“”的其他请求参数"archive.seek_frame":
- quantity - 与满足给定参数的第一个帧相关的结果序列帧的数量。
响应内容:
- frames–一个数组,其中每个元素对应于“frame”字典,以响应"archive.seek_frame"请求。
自定义事件日志
userlog.get_messages
正在获取事件日志消息。
请求参数:
- backward – 录制顺序相反(从新到旧),默认为:true;
- offset – 消息选择的初始偏移,默认为正向:0, in reverse order: -1(最新消息););
- count – 默认选择的最大消息数:1000;
- filter – 使用全文搜索算法过滤选择。
可能的筛选字段:
- timestamp – 按消息时间进行全文搜索的子字符串列表;
- level – 按消息级别进行全文搜索的子字符串列表;
- text – 按消息文本进行全文搜索的子字符串列表。
响应内容:
- message – 每个元素对应一条消息的数组。
“messages”数组元素的内容:
- id – 报文标识符;
- timestamp - 时间;
- level – 级别,可能值:“info”、“warn”、“error”;
- text – 文本。
消息列表请求示例:
1{ 2 "method" : "userlog.get_messages", 3 "params" : 4 { 5 "count" : 2, 6 "filter" : 7 { 8 "text" : [ "signal Camera+2" ] 9 } 10 } 11}
请求示例:
1{ 2 "result" : 3 { 4 "messages" : 5 [ 6 { 7 "id" : 7297, 8 "level" : "warn", 9 "text" : "Restored signal from camera 'Camera 2'", 10 "timestamp" : [2019,3,26,15,50,14,0] 11 }, 12 { 13 "id" : 7296, 14 "level" : "warn", 15 "text" : "Lost signal from camera 'Camera 2'", 16 "timestamp" : [2019,3,26,15,49,56,0] 17 } 18 ] 19 } 20}
监视服务器状态
monitoring.get_server_state
获取服务器状态(软件的服务器部分)。
响应内容:
- local_time – 本地服务器时间;
- start_time – 软件服务器部分的启动时间。
请求示例:
1{ 2 "method" : "monitoring.get_server_state", 3}
请求示例:
1{ 2 "result" : 3 { 4 "state" : 5 { 6 "local_time" : [2019,3,29,14,34,26,889], 7 "start_time" : [2019,3,29,8,8,29,651] 8 9 } 10 } 11}
monitoring.get_network_state
响应内容:
- clients - 连接到服务器的活动网络列表。
“clients”数组元素的内容:
- address – 客户端IP地址;
- user – 用户ID;
- connect_time – 连接时间;
- archive_access – 客户端被授予访问权限的存档天数。
请求示例:
1{ 2 "method" : "monitoring.get_network_state", 3}
请求示例:
1{ 2 "result" : 3 { 4 "state" : 5 { 6 "clients" : 7 [ 8 { 9 "address" : "192.168.1.230", 10 "connect_time" : [2019,3,27,8,17,51,418], 11 "user" : "00000000" 12 }, 13 { 14 "address" : "192.168.1.233", 15 "archive_access" : [[2019,3,28],[2019,3,29]], 16 "connect_time" : [2019,3,27,8,17,50,32], 17 "user" : "00000001" 18 } 19 ] 20 } 21 } 22}
monitoring.get_media_state
响应内容:
- cameras - 包含每个服务器摄像头状态的字典。
"cameras"字典元素的内容:
- enabled - 是否启用摄像头;
- streams - 包含每个相机流状态的字典。
“streams”字典元素的内容:
- enabled – 流是否启用;
- active – 媒体流是否更新;
- datarate – 流中过去几秒钟的平均数据字节数;
- framerate – 过去几秒钟流中的平均帧数。
请求示例:
1{ 2 "method" : "monitoring.get_media_state", 3}
请求示例:
1{ 2 "result" : 3 { 4 "state" : 5 { 6 "cameras" : 7 { 8 "0" : 9 { 10 "enabled" : true, 11 "streams" : 12 { 13 "audio" : 14 { 15 "datarate" : 0.0000, 16 "enabled" : false, 17 "framerate" : 0.0000 18 }, 19 "video" : 20 { 21 "active" : true, 22 "datarate" : 49302.3810, 23 "enabled" : true, 24 "framerate" : 4.1667 25 }, 26 "video2" : 27 { 28 "active" : true, 29 "datarate" : 4772.2654, 30 "enabled" : true, 31 "framerate" : 4.1841 32 } 33 } 34 } 35 } 36 } 37 } 38}
monitoring.get_archive_state
响应内容:
- storages - 服务器使用的存储列表。
“storages”数组元素的内容:
- path – 存储路径;
- available – 存储可用性标志;
- free_space – 可用空间量(MB);
- write – 字典的数据存档记录。
“写”字典的内容:
- datarate – 过去几秒钟内写入存储器的平均数据字节数;
- queue_size – 存储写入队列大小的最大相对值,与过去几秒钟内的最大可能值相比;
- last_error_time – 存储中最后一次写入错误的时间。
请求示例:
1{ 2 "method" : "monitoring.get_archive_state", 3}
请求示例:
1{ 2 "result" : 3 { 4 "state" : 5 { 6 "storages" : 7 [ 8 { 9 "available" : true, 10 "free_space" : 719937, 11 "path" : "X:\\line_archive\\", 12 "write" : 13 { 14 "datarate" : 2186664.4444, 15 "last_error_time" : [2019,3,29,8,1,23,211], 16 "queue_size" : 0.0045 17 } 18 } 19 ] 20 } 21 } 22}
其他
协议版本
URI: /version
Version: 1.1
MIME-types: application/json
, application/xml
Methods: GET
服务器支持的协议版本。仅仅在使用GET方法且没有参数要求的情况下可用
JSON语言描述协议版本:
{ "major": /* number */, "minor": /* number */ }
XML语言描述协议版本:
<version> <major> <!-- xs:int --> </major> <minor> <!-- xs:int --> </minor> </version>
资源交互范例:
GET /version HTTP/1.1 Host: 127.0.0.1 Accept: application/xml
HTTP/1.1 200 OK Date: Mon, 23 May 2005 22:38:34 GMT Content-Type: application/xml <?xml version="1.0" encoding="utf-8"?> <version> <major>2</major> <minor>37</minor> </version>
修改记录
版本1.0
- 各种名称在XML语言描述中保持一致—小写键盘字符,字符”-”表示字符之间的间隔
- 摄像机参数(分辨率,颜色等)不在摄像机描述中显示.
- 确定图像要求参数默认值(分辨率,质量等)
- 协议版本0.0现在不支持这些功能
版本1.1
- 增加支持Microphone对象功能
- 标签名称描述错误标记为
<xxx-uri>
(早期版本是<xxx-url>
)
版本1.2
- 在Camera对象中增加
<uri>
选项 - 在Microphone对象中增加
<uri>
选项 - 增加OSD对象选项
- 在Camera对象中增加
<osd-uri>
选项
版本1.3
- 在OSD对象上增加文本颜色(功能
<font-color>
)选项
版本1.4
- 在Camera对象中增加
<width>
和<height>
选项 - 在影像对象中增加
keep_aspect_ratio
参数
版本1.5
- 在OSD对象中增加
<draw-background>
选项