[TOC]
# 视频服务
# 1 获取视频设备扩展信息
- 请求url:
/common/video/getExtend
- 请求方式:
get
- 接口描述: 查询摄像机等音视频设备的扩展信息
- 请求参数:
字段名称 | 字段类型 | 是否必须 | 字段描述 |
---|---|---|---|
token | String | 是 | 鉴权参数:登录获取的动态密钥 |
iotim_ticket | String | 是 | 鉴权参数:登录获取的物联票据 |
din | String | 是 | 设备的唯一标识 |
sub_id | String | 否 | 子摄像头id,统一设置为0 |
- 请求示例:
/common/video/getExtend?
token=*******************************************************
&din=******************
&iotim_ticket=*******************************************************
2
3
4
- 返回参数:
返回参数 | 参数类型 | 参数说明 |
---|---|---|
code | String | 错误码,0表示成功,其他见错误码说明 |
message | String | 执行结果消息 |
data | JSON | 查询结果 |
din | String | 设备的唯一标识 |
sub_vid | String | 传统子摄像头id |
is_live | Boolean | 是否直播 |
is_recording | Boolean | 是否录像 |
is_face | Boolean | 是否是人脸识别设备 |
save_type | String | 存储方式 |
save_day | Integer | 存储天数 |
is_web_push | Boolean | 是否网页推流 |
web_resolution | Integer | 网页推流分辨率,0:原画,360、720、1080 分别对应 360P、720P、1080P |
shell | String | 摄像机外壳 |
rom_version | String | 摄像机固件版本 |
sdk_version | String | 摄像机SDK版本 |
mac | String | 摄像机mac地址 |
code | String | 摄像机编码 |
password | String | 摄像机登录密码 |
lens | String | 摄像机镜头 |
c_id | String | 摄像机云id |
record_data | String | 摄像机录像规则 |
advance_record | Integer | 预录帧数,最大值 1000 |
event_config | JsonArray | 智能算法配置 |
- 返回示例:
{
"code": 0,
"message": "OK",
"data": {
"din": "***************",
"is_live": false,
"is_recording": true,
"is_face": false,
"save_type": "hadoop1",
"save_day": 60,
"is_web_push": false,
"web_resolution": 0,
"shell": "",
"rom_version": "",
"sdk_version": "",
"mac": "**:**:**:**:**:**",
"code": "",
"password": "",
"lens": "4mm",
"c_id": "2427423",
"record_data": "",
"advance_record": 60
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 2 设置视频设备扩展信息
- 接口url:
/common/video/setExtend
- 接口描述:
设置视频设配的扩展信息
- 请求方法:
POST
- 请求参数:
请求参数 | 参数类型 | 是否必填 | 参数说明 |
---|---|---|---|
token | String | 是 | 鉴权参数:登录获取的动态密钥 |
iotim_ticket | String | 是 | 鉴权参数:登录获取的物联票据 |
din | String | 是 | 设备的唯一标识 |
sub_id | String | 否 | 子摄像头id,统一设置为0 |
is_live | Boolean | 是 | 是否直播 |
is_recording | Boolean | 是 | 是否录像 |
is_face | Boolean | 是 | 是否是人脸识别设备 |
save_type | String | 是 | 存储方式:cloud |
save_day | Integer | 是 | 存储天数 |
is_web_push | Boolean | 是 | 是否网页推流 |
web_resolution | Integer | 是 | 网页推流分辨率,0:原画,360、720、1080 分别对应 360P、720P、1080P |
shell | String | 否 | 摄像机外壳 |
rom_version | String | 否 | 摄像机固件版本 |
sdk_version | String | 否 | 摄像机SDK版本 |
mac | String | 否 | 摄像机mac地址 |
code | String | 否 | 摄像机编码 |
password | String | 否 | 摄像机登录密码 |
lens | String | 否 | 摄像机镜头 |
c_id | String | 否 | 摄像机云id |
record_data | String | 否 | 摄像机录像规则 |
advance_record | Integer | 否 | 预录帧数,最大值 1000 |
event_config | JsonArray | 否 | 智能算法配置 |
- 请求示例:
/common/video/setExtend?
token=*******************************************************
&iotim_ticket=*******************************************************
2
3
- a.请求头:Content-Type:application/json
- b.请求包体:
{
"shell": "shell",
"recording": 1,
"rom_version": "1.0.0",
"face_recognition": 1,
"sdk_version": "1.4.203",
"web_resolution": 360,
"mac": "00:44:0f:9a:00:26",
"code": "",
"lens": "4mm",
"password": "1234",
"save_day": 30,
"din": "144115194519080010",
"save_type": "hadoop2",
"c_id": "2427423",
"record_data": "[{\"record_cron\":\"0 * * * * ?\", \"record_long\":60},{\"record_cron\":\"0 * * * * ?\", \"record_long\":240}]",
"live": 1,
"web_push": 1
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- 返回参数:
返回参数 | 参数类型 | 参数说明 |
---|---|---|
code | String | 错误码,0表示成功,其他见错误码说明 |
message | String | 执行结果消息 |
- 返回示例:
{
"code": 0,
"message": "OK",
}
2
3
4
# 3 获取设备存储类型及天数
接口url:
/common/video/getDeviceSaveTypeAndDays
请求方法:
GET
请求参数:
请求参数 参数类型 参数说明 *token String 动态密码,登录时获得 *iotim_ticket String QQ 物联票据 *din String 设备 din sub_din String 子摄像头din 请求示例:
/common/video/getDeviceSaveTypeAndDays? token==************************* &iotim_ticket==************************* &din==************************* &sub_din==*************************
1
2
3
4
5返回参数:
返回参数 参数类型 参数说明 code Integer 错误码 message String 执行结果消息 data json 返回数据 save_type String 保存类型:cosmtav(云端),nvr(本地) save_day int 录像保存天数 din String 设备id 返回示例:
{ "code": 0, "data": { "save_type": "nvr", "save_day": 65, "din": "din" }, "message": "OK" }
1
2
3
4
5
6
7
8
9
# 4 查询设备某段时间缺失录像片段
接口url:
/common/video/getVideoLostRecord
请求方法:
GET
请求参数:
请求参数 参数类型 参数说明 *token String 动态密码,登录时获得 *iotim_ticket String QQ 物联票据 *din String 设备 din subDin String 子摄像头影像流 id *start_time long 开始时间,毫秒 *end_time long 结束时间,毫秒 请求示例:
/common/video/getVideoLostRecord?token= &iotim_ticket===************************* &din===************************* &subDin===************************* &start_time===************************* &end_time===*************************
1
2
3
4
5
6返回参数:
返回参数 参数类型 参数说明 code Integer 错误码 message String 执行结果消息 data json 返回数据 handler String 消息唯一id 返回示例:
{ "code": 0, "message": "OK", "data": { "handler": "fdsafasfds" } }
1
2
3
4
5
6
7
# 5 查询sharp协议视频推流服务器
- 接口url:
/common/video/getStreamServer
- 描述:
查询sharp协议视频推流服务器信息,低延时获取视频方式,1秒钟之内,需要自行开发播放器。
- 请求方法:
GET
- 请求参数:
请求参数 | 参数类型 | 是否必填 | 参数说明 |
---|---|---|---|
token | String | 是 | 鉴权参数:登录获取的动态密钥 |
iotim_ticket | String | 是 | 鉴权参数:登录获取的物联票据 |
din | String | 是 | 设备的唯一标识 |
sub_vid | String | 否 | 子摄像头id |
streamId | String | 否 | 主码流传0,子码流传1 |
env | Integer | 否 | 云端传0 |
- 请求示例:
/common/video/getStreamServer?
token=****************
&din=****************
&iotim_ticket=****************
2
3
4
- 返回参数:
返回参数 | 参数类型 | 参数说明 |
---|---|---|
code | Integer | 错误码,为 0 表示成功,其他见错误码表 |
message | String | 执行结果消息 |
data | Json | 查询结果 |
ip | String | 设备 din 推流服务器 ip |
innerip | String | 设备 din 推流服务器内网ip |
stream_token | String | sharp 协议握手所需 token |
以下两个字段决定了握手包使用的版本号,版本3会有以下两个字段,否则为版本2 | ||
port | int | sharp 服务端口号,如果无该返回值端口号默认为30001 |
stream_en_key | String | 视频流加密key,目前为AES128加密KEY,如无该值说明当前环境暂时不支持加密 |
- 返回示例:
{
"message": "OK",
"data": {
"ip": "127.0.0.1",
"innerip": "127.0.0.1",
"stream_token":"2C3A8F42",
"port":30001,
"stream_en_key":"AE4128AES128AES1",
"sm4_vector":"AES128A4S128AES1"
},
"code": 0
}
2
3
4
5
6
7
8
9
10
11
12
# 6 获取web流播放地址(rtmp、flv、hls)
- 接口url:
/common/video/getWebUrl
- 描述:
查询web流的播放地址。HLS高延时方案,10至20秒,Web端播放, RTMP需要支持flash播放器的组件端播放
- 请求方法:
GET
- 请求参数:
参数名称 | 参数说明 | 是否必须 | 数据类型 |
---|---|---|---|
din | 设备的唯一标识 | true | string |
env | 公有云和私有化统一传0,混合云传项目id,默认为0 | false | int |
streamId | 主码流0,子码流1,默认主码流 | false | string |
token | 鉴权参数:登录获取的动态密钥 | true | string |
iotim_ticket | 鉴权参数:登录获取的物联票据 | true | string |
- 请求示例:
/common/video/getWebUrl?
token=*******************************************************
&iotim_ticket=*******************************************************
&din=***************
&env=*****
&streamId=****
2
3
4
5
6
- 返回参数:
返回参数 | 参数类型 | 参数说明 |
---|---|---|
code | String | 错误码,0表示成功,其他见错误码说明 |
message | String | 执行结果消息 |
data | JSON | 查询结果 ,json格式,数据如下: |
rtmp | String | rtmp播放地址,一次有效,断开后重新获取 |
flv | String | flv播放地址 |
url | String | Hls播放地址 |
- 返回示例(链接带鉴权,有效期2小时):
{
"code": 0,
"data": {
"rtmp": "rtmp://****?ticket=*****",
"flv": "http://***.flv?ticket=*****",
"url": "https://****.m3u8?ticket=*****"
},
"message": "OK"
}
2
3
4
5
6
7
8
9
# 7 获取本地录像
注:非NVR摄像头不可用
接口url:
/common/video/getLocalStream
请求方式 :
GET
请求参数
请求参数 参数类型 参数说明 *token String 鉴权参数:登录获取的动态密钥 *iotim_ticket String 鉴权参数:登录获取的物联票据 *din String 设备 din *stream_id String 码流id,传13 *timeBegin long 开始时间(精确到毫秒) *length long 视频长度,秒,最长获取30s *subDin String 子摄像头影像流 id,一般传0 *lastRecordHandler String 上一个片段标识,首次请求可以不传 *playBackRate String 倍速 1,2,3,8,16,默认1
| env | int | 公有云和私有化统一传0,混合云传项目id,默认为0 |
- 请求示例
/common/video/getLocalStream?
token=*******************************
&iotim_ticket=*******************************
&din=200200000000000339
&subDin=0
&stream_id=13
&timeBegin=1564020498128
&length=20
&lastRecordHandler=****
&env=0
&playBackRate=1
2
3
4
5
6
7
8
9
10
11
curl -H "x-welink-app-id:100247" "http://10.55.130.116:8810/video/getLocalStream?din=200200000000000339&subDin=0&stream_id=13&timeBegin=1564020232917&length=20"
返回参数
返回参数 参数类型 参数说明 code Integer 错误码 message String 执行结果消息 data json 返回数据 sm4_vector String 加密向量 recordHandler String 本次录像的唯一标示 timeBegin long 开始时间,毫秒时间戳 length long 秒数,最多获取30s的历史视频 stream_token String 流token stream_id String 子码流 stream_en_key String 流加密key server_ip String 外网地址 server_port int 服务器端口号 cmd String 命令字 server_innerip String 内网ip 返回示例
{
"code": 0,
"data": {
"sm4_vector": "2019076905",
"recordHandler": "0108572e-4881-4644-a3b5-3e2c50286aeb",
"timeBegin": 2342432,
"stream_token": "RKzwpUGM",
"stream_id": 13,
"stream_en_key": "kO3Ahp6wkuLw6OfP",
"length": 20,
"server_ip": "61.241.44.161",
"server_port": 31001,
"cmd": "LocalRecordStream",
"server_innerip": "10.55.130.116"
},
"message": "OK"
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 8 查询录像列表
- 接口url:
/common/video/getVideoList
- 描述:
根据条件查询录像信息,可以跟据月来查询当前月有录像的日期,也可以根据日期和起始以及终止时间来查询录像信息。两种查询条件不能同时为空。
- 请求方法:
GET
- 请求参数:
- 注意事项:该接口返回mtav录像文件列表
请求参数 | 参数类型 | 是否必填 | 参数说明 |
---|---|---|---|
token | String | 是 | 鉴权参数:登录获取的动态密钥 |
iotim_ticket | String | 是 | 鉴权参数:登录获取的物联票据 |
din | String | 是 | 设备的唯一标识 |
sub_id | String | 否 | 子摄像头id,统一设置为0 |
month | String | 按月查询必填 | 年月(YYYYMM格式) |
date | String | 日期查询必填 | 日期(YYYYMMDD格式) |
start | String | 日期查询必填 | 开始时间(HHmmss格式) |
end | String | 日期查询必填 | 结束时间(HHmmss格式) |
- 返回参数:
返回参数 | 参数类型 | 参数说明 |
---|---|---|
rec_date | String | 日期 |
rec_count | Integer | 有无录像,0:无录像,1:有录像 |
[] | String | 文件名 |
s | String | 起始时间 |
d | Integer | 录像文件时长,单位:毫秒 |
t | Integer | 文件属性(从低位到高位, 第 0 位表示定时录像; 第 1 位表示手动录像; 第 2 位表示移动侦测录像; 第 3 位表示输入报警; 后面定义的类型以此类推. 0 表示否, 1 表示是) |
p | String | 文件存储路径 |
- 请求示例(有两种请求方式,示例如下):
- a.请求示例(按月查询):
/common/video/getVideoList?
token=*******************************************************
&din=***************
&month=201705
&iotim_ticket=*******************************************************
2
3
4
5
- a.返回示例(按月查询):
[
{
"rec_date": "2017-05-01",
"rec_count": 1
},
{
"rec_date": "2017-05-02",
"rec_count": 1
}
]
2
3
4
5
6
7
8
9
10
- b.请求示例(按日查询):
/common/video/getVideoList?
token=*******************************************************
&din=***************
&date=20170510
&start=122200
&end=122500
&iotim_ticket=****************************************************
2
3
4
5
6
7
- b.返回示例(按日查询):
[300000000000073DS44_20200903_164020.mtav]
s=16:40:20.474
d=5992
t=10000000
p=/76af9bb96199723D47c239SDFf93e044aD3/20D20-08-03/30000FD0D000002343423_20200S83F243_1432DAFD02S0.mtav
[300000000000324181_2020012303_16DFS4026.mtav]
s=16:40:26.473
d=5986
t=10000000
p=/76af9bb9619972347c2dsf36f93e044a3/2020-08-03/30000000043240000743231_20204324F0803_164FD026.mtav
2
3
4
5
6
7
8
9
10
# 9 获取录像文件 (旧接口,建议使用新接口10,getVideoFileDownloadUrl)
不推荐使用,推荐使用获取视频文件下载链接
接口url:
/common/video/getVideoStream
描述:
获取录像文件,返回文件流。
请求方法:
GET
注意事项:该接口直接返回视频流,性能较低,建议使用新接口10(getVideoFileDownloadUrl)
请求参数:
请求参数 | 参数类型 | 是否必填 | 参数说明 |
---|---|---|---|
token | String | 是 | 鉴权参数:登录获取的动态密钥 |
iotim_ticket | String | 是 | 鉴权参数:登录获取的物联票据 |
din | String | 是 | 设备的唯一标识 |
id | String | 是 | 录像列表中返回的参数 |
sub_id | String | 否 | 子摄像头id,统一设置为0 |
注:默认视频6秒一个,id为getVideoList返回的p
- 请求示例:
/common/video/getVideoStream?
token=*******************************************************
&din=***************
&id=hdfs://192.168.1.1:8020/bucket/144115194519265640/2017-05-10/144115194519265640_20170510_122205.mtav
&iotim_ticket=*******************************************************
2
3
4
5
- 返回参数:
返回参数 | 参数类型 | 参数说明 |
---|---|---|
fileStream | fileStream | 录像文件流 |
- 返回示例:
Content-Type:application/octet-stream
fileStream……
2
# 10. 获取视频文件下载链接(新)
- 接口url:
/common/video/getVideoFileDownloadUrl
- 描述:
用于获取加签名后的视频文件下载链接,根据下载链接获取视频文件,可以是cos下载链接,也可以是ceph,具体要看项目配置
- 请求方法:
GET
- 请求参数
请求参数 | 参数类型 | 是否必填 | 参数说明 |
---|---|---|---|
token | String | 是 | 鉴权参数:登录获取的动态密钥 |
iotim_ticket | String | 是 | 鉴权参数:登录获取的物联票据 |
id | String | 是 | 录像列表中返回的参数 |
- 使用方式:
1.在接口8拿到文件列表的回参的p值(文件id)
2.使用id列表循环调用接口接口10,生成文件下载链接
3.根据下载链接下载mtav文件片段
2
3
- 请求示例
/common/video/getVideoFileDownloadUrl?
token=*******************************************************
&id=********.mtav
&iotim_ticket=*******************************************************
2
3
4
返回参数
返回参数 参数类型 参数说明 code Integer 错误码 message String 执行结果消息 data String 返回数据,下载链接 返回示例
{
"code": 0,
"data": "https://testmtavtest-30035.sz.gfp.tencent-cloud.com/30dedd20c1b59f0fdfbb10a091398e34/2020-06-22/144115192371935718_20200622_095956.mtav?sign=q-sign-algorithm%3Dsha1%26q-ak%3DJwxbdHXcgrqZyWxNOcqdDnN0%26q-sign-time%3D1592806631%3B1592807231%26q-key-time%3D1592806631%3B1592807231%26q-header-list%3Dhost%3Bx-cos-content-sha1%26q-signature%3D5fd2e4c415badd2d05b7a7d7d25e2eef84d033aa",
"message": "OK"
}
2
3
4
5
# 11 sharp 音视频流推送协议
• 通讯协议:TCP
• 描述:低延时获取视频方式,1秒钟之内,需要自行开发播放器
• IP:通过平台接口获取
• 端口:port或30001
• 流程 1.腾讯微瓴-> 业务第三方 (握手); 2.如果 1 握手成功后面就正常推数据块流,遇到音视频结束 type,推送结束; 3.字节序(大端)
• 握手
------------------------------------------------------------------
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
------------------------------------------------------------------
| 0x7f | 0x7f | 0x7f | V | sub_vid | stream_id |
------------------------------------------------------------------
| Device din |
------------------------------------------------------------------
| stream_token |
------------------------------------------------------------------
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- 说明:(其中加密key为查询视频推流服务器 (opens new window)getStreamServer接口返回的stream_en_key值,加密向量为sm4_vector)
• 0~2 字节固定为 0x7f
• 第 3 字节节为版本号, 0-2(非加密模式),3: AES-128(AES-128 cbc为版本3,其中加密key为查询视频推流服务器时返回的stream_en_key值) 4: sm4 ecb (其中加密key为查询视频推流服务器时返回的stream_en_key值,加密向量为sm4_vector)
• 第 4~6 字节为子视频流 ID,非网关设备字段填 0。/common/video/getStreamServer接口返回的
• 第 7 字节为码流 ID,0 为主码流。(当前版本仅支持主码流)
• 8~15 字节为所请求视频的摄像头 din。
• 16~23 字节为 stream_token。
2
3
4
5
6
- 响应包
---------------------------------------------------------------------
| 0 -- 7 | 8 -- 15 | 16 -- 23 | 24 -- 31 |
---------------------------------------------------------------------
| length |
---------------------------------------------------------------------
| result | Ver | A | V | E |
---------------------------------------------------------------------
| start timestamp high |
---------------------------------------------------------------------
| start timestamp low |
---------------------------------------------------------------------
| error info |
---------------------------------------------------------------------
2
3
4
5
6
7
8
9
10
11
12
13
- 说明:
• length:握手响应包数据总长度(4 字节)
• result: 响应码(1 字节,非 0 表示失败 if result =0 then errorinfo length=0)
• Ver: 版本号(1 字节 当前版本:1)
• A: 音频数据包编码( 4bit 1: AMR 2: AAC 6:G711)
• V:视频数据包编码( 4bit 1: H.264 2: H.265)
• E:加密方式(1 字节 0-2:表示不加密 3: AES-128(AES-128 cbc为版本3所使用的加密算法) 4: sm4 ecb (其中加密key为查询视频推流服务器时返回的stream_en_key值,加密向量为sm4_vector)
• start timestamp: 视频起始时间戳(8 字节)
• error info :失败错误提示字符串(length - 16 字节),result 为 0 时无此节。
2
3
4
5
6
7
8
- 数据块(版本3)
---------------------------------------------------------------------
| 0 -- 7 | 8 -- 15 | 16 -- 23 | 24 -- 31 |
---------------------------------------------------------------------
| length | type | frame |
---------------------------------------------------------------------
| encryptedLength | 保留 |
---------------------------------------------------------------------
| timestamp |
---------------------------------------------------------------------
| sequence number |
---------------------------------------------------------------------
2
3
4
5
6
7
8
9
10
11
• length:每一帧视频数据和包头总长(长度由前 3 个字节表示)
• type:(4 bit 1:视频 2: 音频 0xF:结束帧,表示音视频结束,连接可以断开)
• frame: 帧类型 (4bit:1:表示是关键 I 帧)
• encryptedLength: 加密数据字节长度(16bit:0表示该帧无加密数据,即为原始数据;如果加密数据长度大于零时,密钥为获取服务器IP地址时返回的stream_en_key,还原原始帧数据方法为:加密数据解密后的数据,加上除去加密数据后的数据,如:收到帧数据为data[encryptedLength]+data[length-16- encryptedLength] 则解密后的数据为:decrypt(data[encryptedLength])+ data[length-16- encryptedLength])
• timestamp:时间戳(4 字节) -- 这里指的是偏移量
• sequence number: 序列号(4 字节),后跟视频裸帧数据,长度为:length-16
2
3
4
5
6
- 数据块(版本2)
---------------------------------------------------------------------
| 0 -- 7 | 8 -- 15 | 16 -- 23 | 24 -- 31 |
---------------------------------------------------------------------
| length | type | frame |
---------------------------------------------------------------------
| timestamp |
---------------------------------------------------------------------
| sequence number |
---------------------------------------------------------------------
2
3
4
5
6
7
8
9
- 说明:
• length:每一帧视频数据和包头总长(长度由前 3 个字节表示)
• type:(4 bit 1:视频 2: 音频 0xF:结束帧,表示音视频结束,连接可以断开)
• frame: 帧类型 (4bit:1:表示是关键 I 帧)
• timestamp:时间戳(4 字节) -- 这里指的是偏移量
• sequence number: 序列号(4 字节),后跟视频裸帧数据,长度为:length-12
2
3
4
5
# 12 获取本地历史录像协议
注:非NVR摄像头不可用
使用说明:
1.获取摄像头配置:IP , stream_token , recordHandler,参数均在getLocalStream (opens new window)接口获取
2.使用以下TCP握手协议
package com.tencent.weling.proto;
//请求包、响应包格式
//STX + headLen + bodyLen + headData + bodyData + ETX
//STX = 注意区分,-0x6c,为本地录像网关请求头 -0x6b为本地录像客户端请求
//ETX = 0x5D,0x5D,0x5D,0x5D, 4字节
//headLen: headData长度, 4字节,网络字节序
//bodyLen: bodyData长度, 4字节,网络字节序
//headData: head pb序列化数据
//bodyData: 音视频数据 或 握手回包序列化数据,握手请求包没有bodyData(bodyLen填0)
message MvsHead
{
optional uint64 uint64_din = 1; //摄像头din
optional uint32 uint32_sub_id = 2; //子设备ID
optional uint32 uint32_version = 3; //协议版本号:0至2,表示不加密,3、表示AES128 ecb加密,4表示SM4 cbc加密data
optional uint32 uint32_stream_id = 4; //通道类型:0-主码流,1~0x0e-辅码流(其中0x0e固定为抽帧流),0x0f-录像音视频 0x0d-本地录像,0x0c-事件流
optional uint32 uint32_pkg_type = 5; //报文类型:0-数据包,1-握手请求包,2-握手回包
optional uint32 uint32_video_type = 6; //视频编码类型:1-H264,2-H265, 0xffff-其他
optional uint32 uint32_audio_type = 7; //音频编码类型:1-AMR,2-AAC,6-G711, 0xffff-其他
optional uint32 uint32_seq = 8; //序列号,请求和响应相同
optional uint64 uint64_timestamp = 9; //时间戳(对于网关数据包,该字段为视频帧时间,非当前系统时间)
optional uint32 uint32_data_type = 10; //数据类型:1-视频,2-音频,0xF-(结束包,表示音视频结束,连接可以断开),0x1f-空包数据类型(用于补充数据,维持心跳连接—),0x10-人脸数据
optional uint32 uint32_frame_type = 11; //数据编码格式类型:1-关键帧,2-非关键帧
optional bytes token =12; //token用于验证接入权限,只限握手包使用
optional uint32 uint32_encrypted_len = 13; //加密数据长度
optional uint32 uint32_encrypted_type = 14; //该参数忽略
//以下专为本地录像所加
optional bytes recordHandler = 15; //recordHandler unique id for video record
optional uint64 timeBegin = 16; //代表哪一时间段内拉流开始
optional uint64 timeEnd = 17; //代表哪一时间段内拉流结束
optional uint32 frameRate = 18; //帧率
optional uint32 width = 19; //视频宽
optional uint32 height = 20; //视频高
optional bytes md5 = 21; //bodyData字段MD5值
}
message HandShakeRsp
{
optional uint32 uint32_err_no = 1; //响应码:0-握手成功,0xfe-不支持的音视频编码,0xff-未绑定的din
optional bytes bytes_err_info = 2; //失败错误提示字符串
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 13 获取本地录像-硬件端
datapoint:20229
设备收到到参数:
{ "din":"din", "sub_din":"0", "handler":"uuid", "start_time":324324324, "end_time":3243243243234 }
1
2
3
4
5
6
7设备针对seq返回消息格式:
{ code: 0, msg: "success", data: { "handler": "收到值", losts: [{ begin_time: XXXX, end_time: XXXX }, { begin_time: XXXX, end_time: XXXX } ] } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 14 主动断流
- 接口url:
/common/video/closeVideo
- 描述: 主动结束视频推流,回收链路
- 请求方法:
GET
- 请求参数:
请求参数 | 参数类型 | 是否必填 | 参数说明 |
---|---|---|---|
token | String | 是 | 鉴权参数:登录获取的动态密钥 |
iotim_ticket | String | 是 | 鉴权参数:登录获取的物联票据 |
din | String | 是 | 设备的唯一标识 |
subDin | String | 否 | 子摄像头id,统一设置为0 |
streamId | String | 否 | 0-主码流;1-子码流;默认为0 |
env | String | 否 | 0-云端推流;不为0-本地推流,此时填项目ID;默认为0 |
streamToken | String | 是 | 历史流唯一标识(这里使用token做唯一标识) |
videoType | String | 是 | 实时流:alive,历史流:history |
- 请求示例:
/common/video/closeVideo?
token=*******************************************************
&din=***************
&iotim_ticket=*******************************************************
2
3
4
- 返回参数:
返回参数 | 参数类型 | 参数说明 |
---|---|---|
code | String | 错误码,0表示成功,其他见错误码说明 |
message | String | 执行结果消息 |
- 返回示例:
{
"message": "OK",
"code": 0
}
2
3
4
# 15 获取web历史流播放链接
- 接口url:
/common/video/getHistoryUrl
- 描述:
查询web流的播放地址。HLS高延时方案建议hls.js对接,10至20秒,RTMP需要支持flash播放器的组件端播放
- 请求方法:
GET
- 请求参数:
请求参数 | 参数类型 | 是否必填 | 参数说明 |
---|---|---|---|
token | String | 是 | 鉴权参数:登录获取的动态密钥 |
iotim_ticket | String | 是 | 鉴权参数:登录获取的物联票据 |
wId | String | 否 | 设备的唯一标识,和din不能同时为空(历史原因这里有两个设备主键都能唯一标识设备) |
timeBegin | Long | 是 | 启始时间 |
length | Integer | 是 | 播放时长(单位秒),不建议一次请求过长时间,历史流建议观看15分钟换一个链接 |
playBackRate | Integer | 否 | 倍速标志,默认1 |
din | String | 否 | 设备的唯一标识,和wId不能同时为空 |
- 返回参数:
返回参数 | 参数类型 | 参数说明 |
---|---|---|
code | String | 错误码,0表示成功,其他见错误码说明 |
message | String | 结果消息 |
data | JSON | 查询结果 |
rtmp | String | rtmp推流地址,两小时内有效,过期后重新获取 |
url | String | hls推流地址,两小时内有效,过期后重新获取 |
flv | String | flv推流地址,两小时内有效,过期后重新获取 |
返回示例:
{
"code": 0,
"data": {
"rtmp": "rtmp://ip:port/hls1935/300000000000****_token?ticket=******",
"flv": "http://ip:port/hls1935/300000000000****_toke.flv?ticket=******",
"url": "http://address/hls/300000000000****_toke.m3u8?ticket=*****"
},
"message": "OK"
}
2
3
4
5
6
7
8
9
← 应用API BIM数据库(Alpha) →