侦测报警

更新时间:2024-03-21 06:08:56下载pdf

涂鸦智能摄像机(IPC)通常具有侦测报警的功能,可以通过设备功能打开侦测开关。

功能说明

侦测告警主要分 声音检测移动检测 两种。当设备检测到声音或者物体移动时,会上报一个警告消息,如果您的 App 集成了推送功能,App 还会收到一个推送通知。集成推送请参考 集成 Push

  • 警告消息通常会附带一张当前视频的截图。
  • 直供电的门铃设备,提供视频消息的能力。当有人按下门铃时,门铃可以上传一段留言视频,这个消息也会通过警告消息查询到,消息体会附带一段 6 秒的加密视频。

警告消息

类说明

类名 说明
ThingSmartCameraMessage IPC 侦测报警事件消息管理

初始化消息管理类

查询警告消息列表前,需要使用设备 ID 和时区初始化消息管理器。

接口说明

- (instancetype)initWithDeviceId:(NSString *)devId timeZone:(NSTimeZone *)timeZone;

参数说明

参数 说明
devId 设备 ID
timeZone 时区,默认使用用户手机的系统时区,即 [NSTimeZone systemTimeZone]

查询消息日历

可以通过 IPC SDK 查询到有警告消息的日期,以便于在日历上直观展示。

接口说明

- (void)messageDaysForYear:(NSInteger)year
                     month:(NSInteger)month
                   success:(void (^)(NSArray<NSString *> *result))success
                   failure:(void (^)(NSError *error))failure;

参数说明

参数 说明
year 年,如:2020
month 月,如:2
success 成功回调,返回当月有消息记录的日期数组,result 为字符串数组,元素为日期字符串,如:011130
failure 失败回调,error 表示错误信息

查询消息列表

侦测警告消息根据触发方式定义有多种类型,部分类型又可以划分为一个大的分类。IPC SDK 提供查询默认分类的列表,以便于分类查询警告消息。

接口说明

- (void)getMessageSchemes:(void (^)(NSArray<ThingSmartCameraMessageSchemeModel *> *result))success
                  failure:(void (^)(NSError *error))failure;

参数说明

参数 说明
success 成功回调,返回消息分类数据模型的数组
failure 失败回调,error 表示错误信息

ThingSmartCameraMessageSchemeModel 数据模型

字段 类型 说明
describe NSString 消息分类描述
msgCodes NSArray 消息分类所包含的消息类型数组
  • 在查询消息列表时,您可以设置为消息分类的 msgCodes 属性的值,以查询这个分类包含的所有类型的警告消息。
  • 消息类型表示警告消息的触发形式,代码中体现为警告消息数据模型的 msgCode 属性。

msgCodes 消息类型说明

类型 说明
ipc_motion 移动侦测
ipc_doorbell 门铃呼叫
ipc_dev_link 设备联动
ipc_passby 有人经过
ipc_linger 有人徘徊
ipc_leave_msg 门铃消息留言
ipc_connected 门铃已接听
ipc_unconnected 门铃未接听
ipc_refuse 门铃拒接
ipc_human 人形检测
ipc_cat 宠物检测
ipc_car 车辆检测
ipc_baby_cry 婴儿哭声
ipc_bang 异响
ipc_antibreak 强拆报警
ipc_low_battery 低电量告警

由于设备能力的不同,能触发的消息类型会有差别。消息分类和消息类型不同:

  • 消息类型表示警告消息的触发方式。
  • 消息分类是将一个或多个类型的消息组合成一个大类,例如 ipc_passbyipc_lingeripc_motion 可以组合成一个移动侦测的消息分类。

查询侦测警告消息列表

通过 IPC SDK 查询和删除侦测警告消息。

接口说明

- (void)messagesWithMessageCodes:(NSArray *)msgCodes
                          Offset:(NSInteger)offset
                           limit:(NSInteger)limit
                       startTime:(NSInteger)startTime
                         endTime:(NSInteger)endTime
                         success:(void (^)(NSArray<ThingSmartCameraMessageModel *> *result))success
                         failure:(void (^)(NSError *error))failure;

参数说明

参数 说明
msgCodes 消息类型数组,设置为 nil 可以查询所有类型的消息
offset 偏移量,0 表示从第一个警告消息开始
limit 分页大小,最大数量为 200
startTime 查询不早于 startTime 上报的消息,设置为 0 表示不限制开始时间,使用 Unix 时间戳
endTime 查询不晚于 endTime 上报的消息,使用 Unix 时间戳
success 成功回调,返回警告消息数据模型数组
failure 失败回调,error 表示错误信息

批量删除警告消息

参数说明

- (void)removeMessagesWithMessageIds:(NSArray *)msgIds
                             success:(void (^)(void))success
                             failure:(void (^)(NSError *))failure;

参数说明

参数 说明
msgIds 待删除的警告消息的 ID 数组
success 成功回调
failure 失败回调,error 表示错误信息

ThingSmartCameraMessageModel

字段 类型 说明
dateTime NSString 警告消息上报的日期字符串
msgTypeContent NSString 消息类型描述
attachPic NSString 图片附件地址
attachVideos NSArray 视频附件地址数组
msgSrcId NSString 触发警告消息的设备 ID
msgContent NSString 消息内容
msgTitle NSString 消息标题
msgId NSString 消息 ID
msgCode NSString 消息类型
time NSInteger 警告消息上报时间的 Unix 时间戳

根据消息类型不同,可能会有不同的附件:

  • 通过 attachPic 属性可以查询图片附件的地址。
  • 通过 attachVideos 属性可以查询视频附件的地址。通常情况下,这个属性只有一个元素。

开启消息的图片加密

为了保证数据的隐私安全性,可以选择使用加密图片的消息。

接口说明

图片加密默认为关闭。开启图片加密后,消息中携带的图片会加密。您需要使用 ThingEncryptImage 组件显示图片,详情请参考 加密图片

@property (nonatomic, assign) BOOL enableEncryptedImage;

视频消息

视频消息中的视频附件,是加密后的视频,您需要通过 ThingSmartCameraKit/ThingSmartCameraMessageMediaPlayer 提供的接口播放。

查询视频帧渲染视图

接口说明

- (UIView<ThingSmartVideoViewType> *)videoView;

播放警告消息

接口说明

- (void)playMessage:(ThingSmartCameraMessageModel *)messageModel attachmentType:(ThingCameraMessageAttachmentType)attachmentType success:(void(^)(void))success failure:(void(^)(int errCode))failure finished:(void(^)(int errCode))onFinish;

参数说明

参数 说明
messageModel 告警消息数据模型
attachmentType 需要播放的附件类型,告警消息中可能包含视频消息和音频消息
success 播放成功回调
failure 播放失败回调
onFinish 视频播放结束回调,errCode 表示错误码,0 表示正常播放结束

播放警告消息的附件

接口说明

- (void)playMessageAttachment:(NSString *)attachmentPath type:(ThingCameraMessageAttachmentType)attachmentType success:(void(^)(void))success failure:(void(^)(int errCode))failure finished:(void(^)(int errCode))onFinish;

参数说明

参数 说明
attachmentPath 附件的 URL
attachmentType 附件的类型,音频附件还是视频附件,图片附件请使用 ThingEncryptImage 组件展示
success 播放成功回调
failure 播放失败回调
onFinish 视频播放结束回调,errCode 表示错误码,0 表示正常播放结束

暂停播放

接口说明

- (int)pausePlay:(ThingCameraMessageAttachmentType)attachmentType;

恢复播放

接口说明

- (int)resumePlay:(ThingCameraMessageAttachmentType)attachmentType;

停止播放

接口说明

- (void)stopPlay:(ThingCameraMessageAttachmentType)attachmentType;

设置静音状态

接口说明

- (void)enableMute:(BOOL)mute success:(void(^)(void))success failure:(void (^)(NSError * error))failure;

参数说明

参数 说明
mute 是否静音
success 成功回调
failure 失败回调

返回值

类型 说明
int 错误码,0 表示操作成功

视频帧数据回调

ThingSmartCameraMessageMediaPlayerDelegate 为消息播放器代理协议。

接口说明

- (void)mediaPlayer:(ThingSmartCameraMessageMediaPlayer *)player didReceivedFrame:(CMSampleBufferRef)frameBuffer videoFrameInfo:(ThingSmartVideoFrameInfo)frameInfo;

参数说明

参数 说明
player 播放器对象
frameBuffer 视频帧 YUV 数据
frameInfo 视频帧头信息
frameInfo.nDuration 视频总时长
frameInfo.nProgress 当前视频帧的进度

音频帧数据回调

接口说明

- (void)mediaPlayer:(ThingSmartCameraMessageMediaPlayer *)player  didReceivedAudioFrameInfo:(ThingSmartAudioFrameInfo)frameInfo;

参数说明

参数 说明
player 播放器
frameInfo 音频帧头信息
frameInfo.nDuration 音频总时长
frameInfo.nProgress 当前音频帧的进度

3.20.0 版本之前的 SDK 使用 ThingSmartCloudManager 中的接口来播放告警消息中的附件,该接口已经在 3.20.0 版本废弃,请尽快修改。

警告消息与存储卡回放的关联

警告消息存储卡回放 没有直接联系。但在存储卡事件录制模式的情况下,警告消息和存储卡视频录制的触发原因和时间点是一样的。

  • 警告消息保存在云端。
  • 存储卡视频录像保存在 IPC 的存储卡中,且存储卡中的视频在容量不足时,可能会被覆盖。

存储卡录制的开关和侦测报警的开关也没有关联。所以,即使在存储卡事件录制的模式下,警告消息和存储卡中的视频录像也不是一一对应的。

但是存在警告消息发生的时间点有视频录像的情况,IPC SDK 暂未提供这种关联查找的接口。您可以通过警告消息的触发时间,在当天的存储卡录像视频片段中,查找是否有对应的视频录像来建立这种关联。

示例代码

- (void)enableDetect {
        if ([self.dpManager isSupportDP:ThingSmartCameraMotionDetectDPName]) {
        bool motionDetectOn = [[self.dpManager valueForDP:ThingSmartCameraMotionDetectDPName] thingsdk_toBool];
        if (!motionDetectOn) {
            [self.dpManager setValue:@(YES)  forDP:ThingSmartCameraMotionDetectDPName
            success:^(id result) {
                // 开启移动侦测成功
            } failure:^(NSError *error) {
             // 网络错误
            }];
        }
          [self.dpManager setValue:ThingSmartCameraMotionHigh
                              forDP:ThingSmartCameraMotionSensitivityDPName
                         success:^(id result) {
            // 成功设置移动侦测灵敏度为高灵敏度
        } failure:^(NSError *error) {
            // 网络错误.
        }];
    }
}

- (void)viewDidLoad {
    [super viewDidLoad];
    self.cameraMessage = [[ThingSmartCameraMessage alloc] initWithDeviceId:self.devId timeZone:[NSTimeZone defaultTimeZone]];
    [self.cameraMessage getMessageSchemes:^(NSArray<ThingSmartCameraMessageSchemeModel *> *result) {
          // 消息分类模型
        self.schemeModels = result;
                // 查询第一个分类的消息
        [self reloadMessageListWithScheme:result.firstObject];
    } failure:^(NSError *error) {
        // 网络错误
    }];
}

- (void)reloadMessageListWithScheme:(ThingSmartCameraMessageSchemeModel *)schemeModel {
    NSDateFormatter *formatter = [NSDateFormatter new];
    formatter.dateFormat = @"yyyy-MM-dd";
    NSDate *date = [formatter dateFromString:@"2020-02-17"];
      // 查询从 2020 年 2 月 17 日零点到现在的警告消息中的前 20 条
    [self.cameraMessage messagesWithMessageCodes:schemeModel.msgCodes Offset:0 limit:20 startTime:[date timeIntervalSince1970] endTime:[[NSDate new] timeIntervalSince1970] success:^(NSArray<ThingSmartCameraMessageModel *> *result) {
        self.messageModelList = result;
    } failure:^(NSError *error) {
        // 网络错误
    }];
}

Swift

func enableDectect() {
    guard self.dpManager.isSupportDP(.motionDetectDPName) else {
        return;
    }
    if let isMontionDetectOn = self.dpManager.value(forDP: .motionDetectDPName) as? Bool, !isMontionDetectOn {
        self.dpManager.setValue(true, forDP: .motionDetectDPName, success: { _ in
            // 开启移动侦测成功
        }) { _ in
            // 网络错误
        }
    }
    self.dpManager.setValue(ThingSmartCameraMotion.high, forDP: .motionSensitivityDPName, success: { _ in
        // 成功设置移动侦测灵敏度为高灵敏度
    }) { _ in
        // 网络错误
    }
}

override func viewDidLoad() {
    super.viewDidLoad()
    self.cameraMessage = ThingSmartCameraMessage(deviceId: self.devId, timeZone: NSTimeZone.default)
    self.cameraMessage.getSchemes({ result in
        // 查询第一个分类的消息
        self.schemeModels = result
        if let schemeModel = result?.first {
            reloadMessage(schemeModel: schemeModel)
        }
    }) { _ in
        // 网络错误
    }
}

func reloadMessage(schemeModel: ThingSmartCameraMessageSchemeModel) {
    let formatter = DateFormatter()
    formatter.dateFormat = "yyyy-MM-dd"
    let date = formatter.date(from: "2020-02-17")
    // 查询从 2020 年 2 月 17 日零点到现在的警告消息中的前 20 条
    self.cameraMessage.messages(withMessageCodes: schemeModel.msgCodes, offset: 0, limit: 20, startTime: Int(date!.timeIntervalSince1970), endTime: Int(Date().timeIntervalSince1970), success: { result in
        self.messageModelList = result;
    }) { _ in
        // 网络错误
    }
}