一、应用场景
视频设备控制服务是物联网平台提供的用于客户对视频设备的控制功能。开发者可以使用视频设备控制相关接口,获取视频设备直播流地址,录像回放地址,手动抓拍图片URL以及摄像机云台控制等功能。开发者此类接口可实现如下业务场景:
开发者获取设备直播流地址、录像回放地址,在网页或者APP上进行视频播放及录像回播;
通过抓拍后的图片进行图像识别、视频分析等;
网页或APP通过云台控制功能实时控制摄像头方向和角度;
二、功能说明
客户在物联网平台管理台【设备中心】配置后,可以在物联网平台管理台的设备中心中接入视频设备。从而通过调用以下文档提供的API接口,来实现使用对视频设备的拉流播放、录像回放、抓拍图片、云台控制等功能。
设备控制功能主要包含以下几种:
拉流播放
录像回放
抓拍图片
云台控制
物联网平台提供多种视频拉流格式供客户选择使用,分别是https-flv格式流地址、rtmp格式流地址、https-hls格式流地址;
下面分别描述三种流参考建议:
三、前提条件
参考管理台设备部署手册《视频设备部署操作手册》,确保在管理台【设备中心】中完成对设备的接入上线;
设备已经配置到项目上。
如果是阿里IOT来源的设备,需要配置对应的appKey与appSecret。详情请看
四、关键流程图
无
五、API列表
5.1. 实时视频
接口描述
根据设备、项目与产品信息获取视频流地址
(1)设备来源于阿里IOT平台,则使用LinkVersion获取视频流地址。(需要在物联云平台管理台–>项目管理–>项目列表–>项目详情–>编辑项目,添加自定义字段appKey与appSecret,两个值对应阿里IOT平台项目上的appKey与appSecret)
(2)设备来源非阿里IOT平台,则使用物联云平台自研驱动获取视频设备直播流地址。
请求方式
POST
请求地址
/v3/business/middle/device/startstream
请求头
名称 | 必填 | 类型 | 备注 |
---|---|---|---|
Access-Token | true | String | 企业权限/外部权限 |
Content-Type | true | String | application/json |
请求参数
名称 | 位置 | 必填 | 类型 | 备注 |
---|---|---|---|---|
deviceId | body | true | Integer | 设备id |
productValue | body | true | Object | |
productValue.productId | body | true | String | 产品id |
project | body | true | Object | |
project.projectId | body | true | String | 项目id |
请求示例:
{
"deviceId": 12345,
"productValue":{
productId:"xxxx"
},
"project":{
projectId:"xxxxxxxxxxx"
}
}
返回参数说明
名称 | 必填 | 类型 | 备注 |
---|---|---|---|
responseTime | True | Date | 响应时间 |
code | True | String | 成功、错误码 |
msg | True | String | 对于返回值的详细说明 |
data | False | Object | |
data.video_flv_url | False | String | flv格式流地址 |
data.video_rtmp_url | False | String | rtmp格式流地址 |
data.video_rtsp_url | False | String | rtsp格式流地址 |
data.video_url | False | String | 默认流地址 |
data.video_ws_url | False | String | ws格式流地址 |
data.video_hls_url | False | String | hls格式流地址 |
data.online_state | False | Integer | 设备在线状态 |
data.model | False | String | 模型值(阿里:videoLinkVersionDomainModel, 物模型:videoTmlDomainModel),返回videoLinkVersionDomainModel则视频流来自阿里LinkVersion。videoTmlDomainModel则来自与物联云平台自研视频驱动。 |
返回示例:
{
"responseTime":"2021-11-17T08:11:18.095+0000",
"code":"000000",
"status":"200",
"msg":"请求成功",
"data":{
"model":"videoTmlDomainModel",
"online_state":1,
"video_flv_url":"xxxxx",
"video_url":"xxxxx",
"video_ws_url":"xxxxx",
"video_hls_url":"xxxxx",
"video_rtsp_url":"xxxx",
"video_rtmp_url":"xxxxx"
}
}
错误码:
错误码 | 描述 |
---|---|
000000 | 请求成功 |
5031001 | 服务端发生异常 |
4002001 | 第三方接口调用失败 |
4001005 | 参数不能为空 |
5.2. 录像回放
接口描述
根据设备、项目与产品信息获取视频设备录像播放流地址
(1)设备来源于阿里IOT平台,则使用LinkVersion获取录像流地址。(需要在物联云平台管理台–>项目管理–>项目列表–>项目详情–>编辑项目,添加自定义字段appKey与appSecret,两个值对应阿里IOT平台项目上的appKey与appSecret)
(2)设备来源非阿里IOT平台,则使用物联云平台自研驱动获取视频设备录像流地址。
请求方式
POST
请求地址
/v3/business/middle/device/playBack
请求头
名称 | 必填 | 类型 | 备注 |
---|---|---|---|
Access-Token | true | String | 企业权限/外部权限 |
Content-Type | true | String | application/json |
请求参数
名称 | 位置 | 必填 | 类型 | 备注 |
---|---|---|---|---|
deviceId | body | true | Integer | 设备id |
productValue | body | true | Object | |
productValue.productId | body | true | String | 产品id |
project | body | true | Object | |
project.projectId | body | true | String | 项目id |
opt | body | true | JSONObject | 操作指令 |
opt.order | body | false | Integer | 默认 0 playback_start(开始录像放) |
操作类型:
@0 playback_start(开始录像回放)
@1 playback_control (录像控制)
@2 playback_stop (停止录像回放) |
| opt.input | body | true | JSONObject | 根据操作类型具体而定见附录A |
请求示例:
{
"deviceId": 12345,
"productValue": {
"productId": "xxx"
},
"project": {
"projectId": "xxxx"
},
"opt": {
"order": 0,
"input": {
"start_time": "2021-11-16T00:00:00",
"end_time": "2021-11-17T01:00:00"
}
}
}
返回参数说明
名称 | 必填 | 类型 | 备注 |
---|---|---|---|
responseTime | True | Date | 响应时间 |
code | True | String | 成功、错误码 |
msg | True | String | 对于返回值的详细说明 |
data | False | Object | |
data.video_flv_url | False | String | flv格式流地址 |
data.video_rtmp_url | False | String | rtmp格式流地址 |
data.video_rtsp_url | False | String | rtsp格式流地址 |
data.video_url | False | String | 默认流地址 |
data.video_ws_url | False | String | ws格式流地址 |
data.video_hls_url | False | String | hls格式流地址 |
data.callId | False | String | 用于回放控制的callId(物联云平台设备可用) |
data.model | False | String | 模型值(阿里:videoLinkVersionDomainModel, 物模型:videoTmlDomainModel) |
返回示例:
{
"responseTime":"2021-11-17T08:10:12.743+0000",
"code":"000000",
"status":"200",
"msg":"请求成功",
"data":{
"model":"videoTmlDomainModel",
"video_rtsp_url":"xxxx",
"video_rtmp_url":"xxx",
"callId":"xxxx",
"video_flv_url":"xxxxxx",
"video_url":"xxxx",
"video_ws_url":"",
"video_hls_url":"xxxxx"
}
}
错误码:
错误码 | 描述 |
---|---|
000000 | 请求成功 |
5031001 | 服务端发生异常 |
4002001 | 第三方接口调用失败 |
4001005 | 参数不能为空 |
5.3. 手动抓图
接口描述
视频设备手动抓图,获取图片地址。
(1)设备来源于阿里IOT平台,则使用LinkVersion抓拍图片。(需要在物联云平台管理台–>项目管理–>项目列表–>项目详情–>编辑项目,添加自定义字段appKey与appSecret,两个值对应阿里IOT平台项目上的appKey与appSecret)
(2)设备来源非阿里IOT平台,则使用物联云平台自研驱动获取抓拍的图片。
请求方式
POST
请求地址
/v3/business/middle/device/snapshots
请求头
名称 | 必填 | 类型 | 备注 |
---|---|---|---|
Access-Token | true | String | 企业权限/外部权限 |
Content-Type | true | String | application/json |
请求参数
名称 | 位置 | 必填 | 类型 | 备注 |
---|---|---|---|---|
deviceId | body | true | Integer | 设备id |
productValue | body | true | Object | |
productValue.productId | body | true | String | 产品id |
project | body | true | Object | |
project.projectId | body | true | String | 项目id |
请求示例:
{
"deviceId": 12345,
"productValue":{
productId:"xxxx"
},
"project":{
projectId:"xxxxxxxxxxx"
}
}
返回参数说明
名称 | 必填 | 类型 | 备注 |
---|---|---|---|
responseTime | True | Date | 响应时间 |
code | True | String | 成功、错误码 |
msg | True | String | 对于返回值的详细说明 |
data | False | Object | |
data.private_url | False | String | 私有资源地址,局域网上使用。 |
data.public_url | False | String | 公有资源地址,公网上使用。 |
data.key | False | 获取异步抓图结果的key(第三方设备模型使用) | |
data.model | False | String | 模型值(阿里:videoLinkVersionDomainModel, 物模型:videoTmlDomainModel) |
返回示例:
{
"responseTime":"2021-11-17T08:17:26.669+0000",
"code":"000000",
"status":"200",
"msg":"请求成功",
"data":{
"model":"videoTmlDomainModel",
"private_url":"xxxx",
"public_url":"xxx",
"key":"xxxx"
}
}
错误码:
错误码 | 描述 |
---|---|
000000 | 请求成功 |
5031001 | 服务端发生异常 |
4002001 | 第三方接口调用失败 |
4001005 | 参数不能为空 |
5.4. 云台控制
接口描述
视频设备云台控制。
(2)使用物联云平台自研驱动进行设备云台控制。
请求方式
POST
请求地址
/v3/business/middle/device/ptz
请求头
名称 | 必填 | 类型 | 备注 |
---|---|---|---|
Access-Token | true | String | 企业权限/外部权限 |
Content-Type | true | String | application/json |
请求参数
名称 | 位置 | 必填 | 类型 | 备注 |
---|---|---|---|---|
deviceId | body | true | Integer | 设备id |
productValue | body | true | Object | |
productValue.productId | body | true | String | 产品id |
project | body | true | Object | |
project.projectId | body | true | String | 项目id |
opt |
body | true | Object | 操作指令 |
opt.order | body | false | Integer | 默认 0 ptz_start(开始云台控制) |
操作类型:
@0 ptz_start(开始云台控制)
@1 ptz_stop (停止云台控制) |
| opt.input | body | true | Object | 根据操作类型具体而定见附录A |
请求示例:
{
"deviceId":113,
"productValue":{
"productId":"xxx"
},
"project":{
"projectId":"xxx"
},
"opt":{
"order":0,
"input":{
"ptz_command":6,
"ptz_speed":1
}
}
}
返回参数说明
名称 | 必填 | 类型 | 备注 |
---|---|---|---|
responseTime | True | Date | 响应时间 |
code | True | String | 成功、错误码 |
msg | True | String | 对于返回值的详细说明 |
data | False | Object | |
data.id | False | String | 指令主键ID |
data.model | False | String | 模型值(阿里:videoLinkVersionDomainModel, 物模型:videoTmlDomainModel) |
返回示例:
{
"responseTime":"2021-11-17T08:26:31.267+0000",
"code":"000000",
"status":"200",
"msg":"请求成功",
"data":{
"model":"videoTmlDomainModel",
"id":"xxx"
}
}
错误码:
错误码 | 描述 |
---|---|
000000 | 请求成功 |
5031001 | 服务端发生异常 |
4002001 | 第三方接口调用失败 |
4001005 | 参数不能为空 |
六、附录
附录A
关于设备操作参数中的input说明
1、回放(playBack)
1.1、playback_start
名称 | 必填 | 类型 | 备注 |
---|---|---|---|
input | true | object | |
input.start_time | true | Date | 回放开始时间 |
input.end_time | true | Date | 回放结束时间 |
示例
{
"input": {
"start_time": "yyyy-MM-dd'T'HH:mm:ss",
"end_time": "yyyy-MM-dd'T'HH:mm:ss"
}
}
1.2、回放控制(playback_control)
名称 | 必填 | 类型 | 备注 |
---|---|---|---|
input | true | object | |
input.callId | true | String | 用于回放控制的callId |
input.command | true | Integer | 历史回放控制@ 1 正常播放;@ 2 暂停;@ 3 倍数播放;@ 4 停止回放;@ 5 回放保活;@ 6 查询当前播放到什么位置(返回秒数) ps:当选择3倍速播放时: scale Number(float) 控制播放倍速(快进,快退的速度) 1 = 正常播放, 大于0小于1为慢放,大于1为快放,负数为倒放(仅command = 3 时可用)当选择1的时候可以进行历史录像跳转: * range Number(int32) : 播放位置跳转偏移量:从当前位置跳转到指定的range(单位: s)的时间点播放(仅 command = 1 时可用) |
input.scale | false | float | 回放倍数(当commad = 3时可用)@ 0.5(慢放);@ 1(正常播放);@ 2 (快速播放);@ 2.5 (快速播放);@ 3(快速播放);@ 4(快速播放)。 |
input.range | false | int | 偏移量(当commad = 1时可用) |
示例
{
"input": {
"callId": "xxxx",
"command": 1
}
}
1.2、回放停止(playback_stop)
PS:推荐使用回放控制中的停止回放指令
名称 | 必填 | 类型 | 备注 |
---|---|---|---|
input | true | object | |
input.callId | false | String |
示例
{
"input": {
"callId": "xxxx"
}
}
2、云台控制(ptz)
2.1、开始云台控制(ptz_start)
名称 | 必填 | 类型 | 备注 |
---|---|---|---|
input | true | object | |
input.ptz_command | true | Integer | 云台控制枚举@ 1 向上移动(up);@ 2 向下移动(down);@ 3 向左移动(left);@ 4 向右移动(right);@ 5 左上(up_left);@ 6 右上(up_right);@ 7 左下(down_left);@ 8 右下(down_right);@ 9 镜头变焦全景图像(zoom_out);@ 10 镜头变焦特写图像(zoom_in);@ 11 调整镜头聚焦远(focus_far);@ 12 调整镜头聚焦进(focus_near);@ 13 镜头光圈大(aperture_open);@ 14 镜头光圈小(aperture_close)。 |
input.ptz_speed | false | Integer | 速度 |
示例
{
"input": {
"ptz_command": 1,
"ptz_speed": 1
}
}