云存储录像

更新时间:2024-07-17 08:29:33下载pdf

涂鸦为智能摄像机(IPC)提供云存储服务,可以将 IPC 录制的视频上传到云端。

流程说明

  1. 判断设备是否支持云存储能力,支持则继续。

  2. 查询云存储服务的开通状态。

  3. 根据开通状态,判断后续逻辑。

    • 如果云存储服务未开通或者已经过期,就需要先购买云存储服务。

      云存储服务过期后,已经上传的云视频还会保留一段时间,通常是 7 天。之后,云视频会被全部删除。

    • 如果云存储服务在有效期:

      1. 获取有云存储视频的日期。
      2. 获取指定日期的相关数据,包括云存储事件、时间轴数据、鉴权信息等。
      3. 选择一个云存储事件或者一个时间点,开始播放云视频。
      云存储录像

核心接口

演示录屏 接口 描述 备注
ThingSmartCloudManager + (BOOL)isSupportCloudStorage: 是否支持云存储 -
- (instancetype)initWithDeviceId: 创建云存储管理对象 一个设备 ID 对应一个云存储管理对象
- (void)loadCloudData: 加载云存储数据 回调中有对应 state。如果 state 有效,则直接查询云存储数据,详细状态请查看 ThingSmartCloudState
- (void)timeLineWithCloudDay:success:failure: 查询指定日期的云存储片段 返回当天所有视频片段时间数据模型(ThingSmartCloudTimePieceModel)的数组
- (void)queryAIDetectConfigSuccess:failure: 查询设备 AI 云存储设置信息
  • isAiDevice:是否具有 AI 检测能力
  • switchState:是否开启 AI 检测
  • aiItemList:支持的 AI 信息
- (void)enableAIDetect:success:failure: 设置 AI 检测开关状态 enable:是否开启 AI 检测功能
- (void)timeEventsWithCloudDay:offset:limit:aiCodes:success:failure: 查询云存储事件
  • 入参 aiCodes 为空时,查询普通云存储事件。
  • 不为空时,查询 AI 云存储事件
- (int)playCloudVideoWithStartTime:endTime:isEvent:onResponse:onFinished: 开始播放云存储 isEvent:是否播放的是云存储事件
- (int)stopPlayCloudVideo 停止播放云存储 -
- (void)destroy 销毁资源 -
ThingSmartCloudManagerDelegate - (void)cloudManager:didReceivedFrame:videoFrameInfo: 云视频数据代理回调 默认播放器已绑定。如果自定义渲染视频,可设置 autoRender 为 NO,通过回调渲染视频,frameBuffer 为视频帧 YUV 数据。

重点关注

云存储服务开通需要使用 云存储服务 UI 业务包,该组件提供了云存储开通的 H5 页面和订单展示功能。

核心代码

查询云存储状态

- (void)loadCloudData:(void(^)(ThingSmartCloudState state))complete;

获取指定时间内的视频片段

- (void)timeLineWithCloudDay:(ThingSmartCloudDayModel *)cloudDay
                     success:(void(^)(NSArray<ThingSmartCloudTimePieceModel *> * timePieces))success
                     failure:(void(^)(NSError * error))failure;

开始播放云存储视频

- (void)playCloudVideoWithStartTime:(long)startTime
                            endTime:(long)endTime
                            isEvent:(BOOL)isEvent
                         onResponse:(void(^)(int errCode))responseCallback
                         onFinished:(void(^)(int errCode))finishedCallback;

停止播放云存储视频

- (int)stopPlayCloudVideo;

示例代码

//初始化云存储管理类
- (void)cloudstorageManagerInit {
    // 查询是否支持云存储
    BOOL isSupportCloudStorage = [ThingSmartCloudManager isSupportCloudStorage:self.devId];

    // 创建云存储管理类
    _cloudManager = [[ThingSmartCloudManager alloc] initWithDeviceId:self.devId];
    [_cloudManager enableMute:NO success:nil failure:nil];
    _cloudManager.delegate = self;
}

// 查询云存储开通状态
- (void)queryCloudstroageState {
    __weak typeof(self) weakSelf = self;
    [self.cloudManager loadCloudData:^(ThingSmartCloudState state) {
        if (state == ThingSmartCloudStateValidData || state == ThingSmartCloudStateExpiredData) {
            weak_self.cloudStorageDays = weak_self.cloudManager.cloudDays;
            weak_self.selectedDay = weak_self.cloudManager.cloudDays.lastObject;
            if (state == ThingSmartCloudStateExpiredData) {
                //提示已过期,开通云存储
            }
        } else {
            //提示开通云存储
        }
  }];
}

// 获取视频片段
- (void)queryTimePieces {
    [self.cloudManager timeLineWithCloudDay:self.selectedDay success:^(NSArray<ThingSmartCloudTimePieceModel *> *timePieces) {
        // Succeeded
    } failure:^(NSError *error) {
        // Failed
    }];
}

// 播放云储存片段
-(void)playVideoWithTimePiece:(ThingSmartCloudTimePieceModel *)timePiece {
    [self.cloudManager playCloudVideoWithStartTime:timePiece.startTime endTime:self.selectedDay.endTime isEvent:NO onResponse:^(int errCode) {
        if (errCode == 0) {
            // Succeeded
        }else {
            // Failed
        }
    } onFinished:^(int errCode) {
        // finished
        if (errCode != 0) {
            // Error
        }
    }];
}

//播放云存储事件
- (void)playVideoEvent:(ThingSmartCloudTimeEventModel *)event {
    [self.cloudManager playCloudVideoWithStartTime:event.startTime endTime:self.selectedDay.endTime isEvent:YES onResponse:^(int errCode) {
        if (errCode == 0) {
            // Succeeded
        }else {
            // Failed
        }
    } onFinished:^(int errCode) {
        // finished
        if (errCode != 0) {
            // Error
        }
    }];
}

// 停止播放
- (void)stopPlayCloudVideo {
    [self.cloudManager stopPlayCloudVideo];
}

// 销毁
- (void)destroy {
    [self.cloudManage destroy];
}