概览
消息管理模块负责 App 与设备、服务器之间的消息传递,主要包含以下功能:
在线消息回调。
接收到事件消息(Event): 告警、分享、系统通知。
接收到状态消息(ProReadonly)。
控制/操作设备(Action)。
设置设备参数(ProWritable)。
获取设备状态(ProReadonly)。
获取设备参数(ProWritable)。
自定义消息透传 (Data)。
使用示例
状态和事件消息通知
import IoTVideo.IVMessageMgrclass 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.IVMessageMgrlet deviceId = dev.deviceId// 新增的用户属性let subPath = "userPro1"let path = "ProUser." + subPathlet json = "{\\"key\\":\\"value\\"}"IVMessageMgr.sharedInstance.addProperty(ofDevice: deviceId, path: path, json: json) { (json, error) in// do something here}
删除用户自定义属性
import IoTVideo.IVMessageMgrlet deviceId = dev.deviceIdlet path = "ProUser.userPro1"IVMessageMgr.sharedInstance.deleteProperty(ofDevice: deviceId, path: path) { (json, error) in// do something here}
修改用户物模型
说明
修改值 | 内容 | 可用示例 |
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.IVMessageMgrlet deviceId = dev.deviceId// 1、用户自定义的ProUser属性 实例:// "testProUser":{"t":1600048390,"val":{"testKey":"testValue"}}// path 必须拼接为 ProUser.xxx.vallet 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._xxxlet 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: @escapingIVNetworkResponseHandler)
示例代码
import IoTVideo.IVDeviceMgrIVDeviceMgr.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;