云存储录像

更新时间:2024-06-17 02:34:01下载pdf

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

流程说明

  1. 判断设备是否支持云存储能力,支持则继续。
  2. 查询云存储服务的开通状态。
  3. 根据开通状态,判断后续逻辑。
    • 如果云存储服务未开通或者已经过期,就需要先购买云存储服务。

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

    • 如果云存储服务在有效期:
      1. 获取有云存储视频的日期。

      2. 获取指定日期的相关数据,包括云存储事件、时间轴数据和鉴权信息等。

      3. 选择一个云存储事件或者一个时间点,开始播放云视频。

        云存储录像

核心接口

演示录屏 接口 描述
IThingIPCCloud isSupportCloudStorage 是否支持云存储
IThingIPCCloud createCloudCamera 创建云存储 camera 对象。一个设备 ID 对应一个 camera 对象
IThingCloudCamera queryCloudServiceStatus 查询云存储状态
  • 10001:未购买云存储服务
  • 10010:已开通云存储服务
  • 10011:云存储服务已过期
IThingCloudCamera getTimeLineInfo 获取指定时间内的视频片段
IThingCloudCamera playCloudDataWithStartTime 开始播放视频
IThingCloudCamera stopPlayCloudVideo 停止播放视频

重点关注

由于 IThingCloudCamera 部分 SDK API 是异步实现,建议不要直接在调用方法的回调线程里调用该对象的其他 API,否则可能会造成 ANR。

核心代码

查询云存储状态

void queryCloudServiceStatus(String devId, IThingResultCallback<CloudStatusBean> callback);

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

void getTimeLineInfo(String devId, long timeGT, long timeLT, IThingResultCallback<List<TimePieceBean>> callback);

开始播放云存储视频

void playCloudDataWithStartTime(long mStartTime, long mEndTime, boolean isEvent, OperationCallBack callback, OperationCallBack playFinishedCallBack);

Java:

// 查询是否支持云存储
IThingIPCCloud cloud = ThingIPCSdk.getCloud();
    if (cloud != null) {
    isSupportCloudStorage = cloud.isSupportCloudStorage(devId);
    }
// 创建 camera 对象
IThingCloudCamera cloudCamera;
    if (cloud != null) {
    cloudCamera = cloud.createCloudCamera();
    }
// 设备初始化
cloudCamera.createCloudDevice(cachePath, devId);

ThingCameraView mVideoView = findViewById(R.id.camera_video_view);
// 为渲染视图容器设置回调
mVideoView.setViewCallback(new AbsVideoViewCallback() {
    @Override
    public void onCreated(Object view) {
        super.onCreated(view);
        //渲染视图构造完成时,为 IThingCloudCamera 绑定渲染视图
        if (null != cloudCamera){
            cloudCamera.generateCloudCameraView(view);
        }
    }
});
// 构造渲染视图
mVideoView.createVideoView(devId);
// 向 IThingCloudCamera 注册监听器,否则无法正常显示画面
cloudCamera.registorOnP2PCameraListener(new AbsP2pCameraListener() {
@Override
public void onSessionStatusChanged(Object camera, int sessionId, int sessionStatus) {
        super.onSessionStatusChanged(camera, sessionId, sessionStatus);
        }
        });
// 查询云存储开通状态
cloudCamera.queryCloudServiceStatus(devId, new IThingResultCallback<CloudStatusBean>() {
@Override
public void onSuccess(CloudStatusBean result) {
        //Get cloud storage status
        }

@Override
public void onError(String errorCode, String errorMessage) {

        }
        });
// 获取视频片段
CloudDayBean dayBean = dayBeanList.get(0);
        cloudCamera.getTimeLineInfo(devId, dayBean.getCurrentStartDayTime(), dayBean.getCurrentDayEndTime(), new IThingResultCallback<List<TimePieceBean>>() {
@Override
public void onSuccess(List<TimePieceBean> result) {

        }

@Override
public void onError(String errorCode, String errorMessage) {

        }
        });
// 播放片段
cloudCamera.playCloudDataWithStartTime(startTime, endTime, isEvent,
        new OperationCallBack() {
@Override
public void onSuccess(int sessionId, int requestId, String data, Object camera) {
        // 播放中的回调, playing
        }

@Override
public void onFailure(int sessionId, int requestId, int errCode, Object camera) {

        }
        }, new OperationCallBack() {
@Override
public void onSuccess(int sessionId, int requestId, String data, Object camera) {
        //播放完成的回调, playCompleted
        }

@Override
public void onFailure(int sessionId, int requestId, int errCode, Object camera) {
        }
        });

// 停止播放
cloudCamera.stopPlayCloudVideo(new OperationDelegateCallBack() {
@Override
public void onSuccess(int sessionId, int requestId, String data) {
        }

@Override
public void onFailure(int sessionId, int requestId, int errCode) {

        }
        });
// 在页面关闭时释放 camera 对象
// 反初始化
cloudCamera.deinitCloudCamera();
// 注销监听
cloudCamera.removeOnP2PCameraListener();
// 销毁
cloudCamera.destroy();