更新时间: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 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
// 网络错误
}
}
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈