有奖捉虫:办公协同&微信生态&物联网文档专题 HOT

概览

消息管理模块负责 App 与设备、服务器之间的消息传递,主要包含以下功能:
在线消息回调。
接收到事件消息(Event): 告警、分享、系统通知。
接收到状态消息(ProReadonly)。
控制/操作设备(Action)。
设置设备参数(ProWritable)。
获取设备状态(ProReadonly)。
获取设备参数(ProWritable)。
自定义消息透传 (Data)。

使用示例

状态和事件消息通知

import IoTVideo.IVMessageMgr
class MyViewController: UIViewController, IVMessageDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// 设置消息代理
IVMessageMgr.sharedInstance.delegate = self
}

// MARK: - IVMessageDelegate

// 接收到事件消息(Event): 告警、分享、系统通知
func didReceiveEvent(_ event: String, topic: String) {
// do something here
}

// 接收到状态消息(ProReadonly)
func didUpdateProperty(_ json: String, path: String, deviceId: String) {
// do something here
}
}

读取属性

import IoTVideo.IVMessageMgr
// 设备ID的字符串
let deviceId = dev.deviceId
// 模型路径的字符串
let path = "ProWritable._logLevel"
IVMessageMgr.sharedInstance.readProperty(ofDevice: deviceId, path: path) { (json, error) in
// do something here
}

设置属性

import IoTVideo.IVMessageMgr
// 设备ID的字符串
let deviceId = dev.deviceId
// 模型路径的字符串
let path = "ProWritable._logLevel"
// 模型参数的字符串
let json = "{\\"setVal\\":0}"
IVMessageMgr.sharedInstance.writeProperty(ofDevice: deviceId, path: path, json: json) { (json, error) in
// do something here
}

执行动作

import IoTVideo.IVMessageMgr
// 设备ID的字符串
let deviceId = dev.deviceId
// 模型路径的字符串
let path = "Action.cameraOn"
// 模型参数的字符串
let json = "{\\"ctlVal\\":1}"
IVMessageMgr.sharedInstance.takeAction(ofDevice: deviceId, path: path, json: json) { (json, error) in
// do something here
}

用户自定义属性

新增用户自定义属性

禁止使用 "_" 开头,"_" 为内置物模型使用(若使用将会报错:8605)。
重复新增将会直接覆盖已经存在的自定义用户物模型。
import IoTVideo.IVMessageMgr
let deviceId = dev.deviceId
// 新增的用户属性
let subPath = "userPro1"
let path = "ProUser." + subPath
let json = "{\\"key\\":\\"value\\"}"
IVMessageMgr.sharedInstance.addProperty(ofDevice: deviceId, path: path, json: json) { (json, error) in
// do something here
}

删除用户自定义属性

import IoTVideo.IVMessageMgr
let deviceId = dev.deviceId
let path = "ProUser.userPro1"
IVMessageMgr.sharedInstance.deleteProperty(ofDevice: deviceId, path: path) { (json, error) in
// do something here
}

修改用户物模型

说明
设置属性 使用同一个 API,但需注意 pathjson 的细微差别。
修改值
内容
可用示例
ProWritable
读写属性
path = ProWritable.xxx json = "{"setVal":"value"}" 或字符串:path = Prowritable.xxx.setVal json = ""value""
ProUser
自定义用户属性
path = ProWritable.xxx.val json = "{"key":"value"}"
ProUser
内置用户属性
path = "ProUser._buildIn.val.xxx" json = "value"
import IoTVideo.IVMessageMgr
let deviceId = dev.deviceId
// 1、用户自定义的ProUser属性 实例:
// "testProUser":{"t":1600048390,"val":{"testKey":"testValue"}}
// path 必须拼接为 ProUser.xxx.val
let path = "ProUser.testProUser.val"
let json = "{\\"testKey\\":\\"newTestValue\\"}"
IVMessageMgr.sharedInstance.writeProperty(ofDevice: deviceId, path: path, json: json) { (json, error) in
// do something here
}
// 2、系统内置的ProUser属性 实例:
// "_buildIn":{"t":1599731880,"val":{"almEvtPushEna":0,"nickName":"testName"}
// path必须拼接为 ProUser._buildIn.val._xxx
let path = "ProUser._buildIn.val.nickName"
let json = "\\"newNickName\\""
IVMessageMgr.sharedInstance.writeProperty(ofDevice: deviceId, path: path, json: json) { (json, error) in
// do something here
}

设备管理 IVDeviceMgr

查询设备固件版本号

无需通过物模型查询最新版本号,当设备离线时也可用使用此方式。
接口说明 查询设备新固件版本信息。
/// @param deviceid 设备id
/// @param responseHandler 回调
open class func queryDeviceNewVersionWidthDevieId(_ deviceId: String, responseHandler: @escaping IVNetworkResponseHandler)
查询设备新固件版本信息(含语言信息)。
/// @param deviceid 设备id
/// @param currentVersion 当前版本号 nil: 默认为当前版本号 当针对特定版本的升级时为必填
/// @param language 语言 nil:默认系统语言
/// @param responseHandler 回调
open class func queryDeviceNewVersionWidthDevieId(_ deviceid: String, currentVersion: String?, language: String?, responseHandler: @escaping
IVNetworkResponseHandler)
示例代码
import IoTVideo.IVDeviceMgr
IVDeviceMgr.queryDeviceNewVersionWidthDevieId("****") { (json, error) in
// do something here
}
IVDeviceMgr.queryDeviceNewVersionWidthDevieId("****", currentVersion:"1.0.0", language:"en") { (json, error) in
// do something here
}
返回结果(以 json 为例)
{
"code": 0,
"msg": "Success",
"data": {
"downUrl": "********",
"version": "********", //版本号
"upgDescs": "********" //升级描述
}
}}

高级功能

透传数据给设备

#define MAX_DATA_SIZE 30000
透传数据给设备(无数据回传)
/// 不需要建立通道连接,数据经由服务器转发,适用于实时性不高、数据小于`MAX_DATA_SIZE`、不需要回传的场景,如控制指令。
/// @note 完成回调条件:收到ACK 或 消息超时
/// @param deviceId 设备ID
/// @param data 数据内容,data.length不能超过`MAX_DATA_SIZE`
/// @param completionHandler 完成回调
open func sendData(toDevice deviceId: String, data: Data, withoutResponse completionHandler: IVMsgDataCallback? = nil)
透传数据给设备(有数据回传)
/// 不需要建立通道连接,数据经由服务器转发,适用于实时性不高、数据小于`MAX_DATA_SIZE`、需要回传的场景,如获取信息。
/// @note 完成回调条件:收到ACK错误、消息超时 或 有数据回传
/// @param deviceId 设备ID
/// @param data 数据内容,data.length不能超过`MAX_DATA_SIZE`
/// @param completionHandler 完成回调
open func sendData(toDevice deviceId: String, data: Data, withResponse completionHandler: IVMsgDataCallback? = nil)
透传数据给设备
/// 不需要建立通道连接,数据经由服务器转发,适用于实时性要求不高,数据小于`MAX_DATA_SIZE`的场景,如控制指令、获取信息。
/// @note 相关接口 @c `sendDataToDevice:data:withoutResponse:`、`sendDataToDevice:data:withResponse:`。
/// @param deviceId 设备ID
/// @param data 数据内容,data.length不能超过`MAX_DATA_SIZE`
/// @param timeout 自定义超时时间,默认超时时间可使用@c `IVMsgTimeoutAuto`
/// @param expectResponse 【YES】预期有数据回传 ;【NO】忽略数据回传
/// @param completionHandler 完成回调
open func sendData(toDevice deviceId: String, data: Data, timeout: TimeInterval, expectResponse: Bool, completionHandler: IVMsgDataCallback? = nil)

透传数据给服务器

透传数据给服务器
/// @param url 服务器路径
/// @param data 数据内容,data.length不能超过`MAX_DATA_SIZE`
/// @param completionHandler 完成回调
open func sendData(toServer url: String, data: Data?, completionHandler: IVMsgDataCallback? = nil)
透传数据给服务器(含超时时间)
/// @param url 服务器路径
/// @param data 数据内容,data.length不能超过`MAX_DATA_SIZE`
/// @param timeout 超时时间
/// @param completionHandler 完成回调
open func sendData(toServer url: String, data: Data?, timeout: TimeInterval, completionHandler: IVMsgDataCallback? = nil)

增值服务

主要包含以下功能:
基本信息 查询云存相关信息。
视频相关
查询存在云存的日期信息。
获取回放文件列表。
获取回放 m3u8 播放地址。
事件相关
获取事件列表。
删除事件(可批量)。

查询设备的云存详细信息

示例代码
查询设备的云存详细信息。
/// @param deviceId 设备id
/// @param responseHandler 回调
- (void)getServiceDetailInfoWithDeviceId:(NSString *)deviceId responseHandler:(IVNetworkResponseHandler _Nullable)responseHandler;
查询多通道设备的云存详细信息。
/// @param deviceId 设备id
/// @param channel 视频流通道号。(对于存在多路视频流的设备,如NVR设备,与设备实际视频流通道号对应)。
/// @param responseHandler 回调
- (void)getServiceDetailInfoWithDeviceId:(NSString *)deviceId channel:(NSInteger)channel responseHandler:(IVNetworkResponseHandler _Nullable)responseHandler;
返回结果(以 json 为例)
{
"code":0,
"msg":"Success",
"data":{
"status":1,
"startTime":1606709335,
"endTime":1611979735,
"curOrderPkgType":1,
"curOrderStorageDays":3,
"curOrderStartTime":1606709335,
"curOrderEndTime":1606709335,
"playbackDays":3
}
}
对应 data 结构:
参数名称
类型
描述
status
Integer
云存服务状态。
1:正常使用中。
2:待续费。设备云存服务已到期,但是历史云存数据未过期,续费后仍可查看这些历史数据。
3:已过期。查询不到设备保存在云端的数据。
startTime
Integer
云存服务开始时间。
endTime
Integer
云存服务失效时间。
curOrderPkgType
Integer
当前订单类型。
1:全时云存。
2:事件云存。
curOrderStorageDays
Integer
当前订单存储时长,单位天。
curOrderStartTime
Integer
当前订单开始时间。
curOrderEndTime
Integer
当前订单结束事件。
playbackStartTime
Integer
当前云存服务,支持检索回放文件的最早时间。这个时间点之前的云存文件不支持检索。

查询存在云存的日期信息

示例代码 获取云存视频可播放日期信息。
/// - 用于终端用户在云存页面中对云存服务时间内的日期进行标注,区分出是否有云存视频文件。
/// @param deviceId 设备id
/// @param timezone 相对于0时区的秒数,例如东八区28800
/// @param responseHandler 回调
- (void)getVideoDateListWithDeviceId:(NSString *)deviceId timezone:(NSInteger)timezone responseHandler:(IVNetworkResponseHandler _Nullable)responseHandler;
返回结果(以 json 为例)
{
"code":0,
"msg":"Success",
"data":{
"list":[
1600653494
]
}
}

获取回放文件列表

示例代码 获取回放文件列表。
/// - 获取云存列表,用于对时间轴渲染
/// @param deviceId 设备id
/// @param startTime 开始UTC时间,单位秒
/// @param endTime 结束UTC时间,单位秒 超过一天只返回一天
/// @param responseHandler 回调
- (void)getVideoPlayListWithDeviceId:(NSString *)deviceId startTime:(NSTimeInterval)startTime endTime:(NSTimeInterval)endTime responseHandler:(IVNetworkResponseHandler _Nullable)responseHandler;
返回结果(以 json 为例)
{
"msg":"Success",
"code":0,
"data":{
"list":[
{
"start":1601285768,
"end":1601285776
},
{
"start":1601285780,
"end":1601285800
}
]
},
}

获取回放 m3u8 播放地址

示例代码
获取回放 m3u8 播放地址。
/// @param deviceId 设备id
/// @param startTime 开始UTC时间,单位秒
/// @param endTime 结束UTC时间,单位秒 填 0 则默认播放到最新为止
/// @param responseHandler 回调
/// json: endflag boolean 播放结束标记, 表示此次播放是否把需要播放的文件播完,没有则需以返回的 endtime 为基准再次请求。false 表示未播放完,true 表示播放完成
- (void)getVideoPlayAddressWithDeviceId:(NSString *)deviceId startTime:(NSTimeInterval)startTime endTiem:(NSTimeInterval)endTime responseHandler:(IVNetworkResponseHandler _Nullable)responseHandler;
返回结果(以 json 为例)
{
"code":0,
"msg":"Success",
"data":{
"endTime":1601289368,
"endflag":true,
"startTime":1601285768,
"url":"http://lcb.iotvideo.tencentcs.com/timeshift/live/00000101000e00fc000000000000000007000000b2860100/timeshift.m3u8?starttime=20200928173608&endtime=20200928183608"
}
}
对应 data 结构:
参数名称
类型
描述
url
string
m3u8 文件地址。
startTime
int64
此处为 m3u8 文件播放的开始时间。
endTime
int64
此次 m3u8 文件播放的结束时间。
endflag
boolean
播放结束标记。表示此次请求结果的 m3u8 能否把需要播放的时间内的文件播完,不能则需以返回的
endtime为基准再次请求。
false:表示未播放完。
true:表示播放完成。

获取事件列表

示例代码
获取事件列表
/// @param deviceId 设备id
/// @param startTime 事件告警开始UTC时间, 一般为当天开始时间, 单位秒
/// @param endTime 事件告警结束UTC时间,获取更多应传入当前列表的最后一个事件的开始时间(事件列表按时间逆序排列);
/// @param pageSize 本次最多查询多少条记录,取值范围 [1 - 50]
/// @param typeMasks 筛选指定类型的事件掩码数组:Array<UInt32>,
/// @param validCloudStorage 是否只返回有效云存期内的事件
/// @param responseHandler 回调
- (void)getEventListWithDeviceId:(NSString *)deviceId startTime:(NSTimeInterval)startTime endTime:(NSTimeInterval)endTime pageSize:(NSInteger)pageSize filterTypeMask:(NSArray<NSNumber *> * _Nullable)typeMasks validCloudStorage:(BOOL)validCloudStorage responseHandler:(IVNetworkResponseHandler _Nullable)responseHandler;
返回结果(以 json 为例)
{
"requestId":"******",
"code":0,
"msg":"Success",
"data":{
"imgUrlPrefix":"*****",
"thumbUrlSuffix":"&****",
"list":[
{
"alarmId":"****",
"firstAlarmType":1,
"alarmType":1,
"startTime":1600653494,
"endTime":1600653495,
"imgUrlSuffix":"*****"
}
],
"validStartTime":1111,
"pageEnd":false
}
}
// 图片下载地址为 imgUrl = imgUrlPrefix + imgUrlSuffix
// 缩略图下载地址为 thumbUrl = imgUrl + thumbUrlSuffix
对应 json 结构:
参数名称
类型
描述
alarmId
string
事件 id。
firstAlarmType
int64
告警触发时的告警类型。
alarmType
int64
告警有效时间内触发过的告警类型。
startTime
int64
告警触发时间,utc 时间,单位秒。
endTime
int64
告警结束时间,utc 时间,单位秒。
imgUrlPrefix
string
告警图片下载地址前缀。
imgUrlSuffix
string
告警图片下载地址后缀。
thumbUrlSuffix
string
告警图片缩略图下载地址后缀。
validVideoStartTime
int64
云存未过期视频的开始时间,为0代表未查询到云存记录。
pageEnd
bool
为分页结束标志。

事件删除

/// @param deviceId 设备id
/// @param eventIds 事件 id 数组
/// @param responseHandler 回调
- (void)deleteEventsWithDeviceId:(NSString *)deviceId eventIds:(NSArray<NSString *> *)eventIds responseHandler:(IVNetworkResponseHandler _Nullable)responseHandler;
具体使用示例请参考:demoIJKMediaViewController.swift