视频消息

更新时间:2024-06-17 07:53:42下载pdf

视频消息中的视频附件,是加密后的视频,您需要通过 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
        // 网络错误
    }
}