云存储

更新时间:2023-03-29 02:40:45下载pdf

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

流程说明

  1. 先查询云存储服务的开通状态。
  2. 根据开通状态判断后续逻辑:
    • 如果云存储服务未开通或者已经过期,就需要先购买云存储服务。

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

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

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

开通服务

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

云存储对象

ITYCloudCamera 提供了云视频存储相关的接口。

接口说明

创建云存储的实例对象。

ITYCloudCamera createCloudCamera();

示例代码

private ITYCloudCamera cloudCamera;

ITuyaIPCCloud cloud = TuyaIPCSdk.getCloud();
if (cloud != null) {
    cloudCamera = cloud.createCloudCamera();
}

云存储数据

查询云存储的开通状态

接口说明

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

参数说明

参数 说明
devId 设备 ID
callback 回调方法

示例代码

cloudCamera.queryCloudServiceStatus(devId, new ITuyaResultCallback<CloudStatusBean>() {
    @Override
    public void onSuccess(CloudStatusBean result) {
        //Get cloud storage status
    }

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

    }
});

CloudStatusBean 数据模型

参数 说明
status 状态码:
  • 10001:未购买云存储服务
  • 10010:已开通云存储服务
  • 10011:云存储服务已过期

获取有云存储数据的日期

接口说明

void getCloudDays(String devId, String timezoneId, ITuyaResultCallback<List<CloudDayBean>> callback);

参数说明

参数 说明
devId 设备 ID
timezoneId 时区 ID

示例代码

cloudCamera.getCloudDays(devId, TimeZone.getDefault().getID(), new ITuyaResultCallback<List<CloudDayBean>>() {
    @Override
    public void onSuccess(List<CloudDayBean> result) {

    }

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

    }
});

CloudDayBean 数据模型

参数 说明
uploadDay 日期
currentDayStart 对应日期的开始时间,用于获取指定时间内的视频片段
currentDayEnd 对应日期的结束时间,用于获取指定时间内的视频片段

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

接口说明

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

参数说明

参数 说明
devId 设备 ID
timeGT 10 位时间戳格式的开始时间
timeLT 10 位时间戳格式的结束时间
callback 回调方法

示例代码

CloudDayBean dayBean = dayBeanList.get(0);
cloudCamera.getTimeLineInfo(devId, dayBean.getCurrentStartDayTime(), dayBean.getCurrentDayEndTime(), new ITuyaResultCallback<List<TimePieceBean>>() {
    @Override
    public void onSuccess(List<TimePieceBean> result) {

    }

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

    }
});

获取指定时间内的移动侦测数据

接口说明

void getMotionDetectionInfo(String devId, long timeGT, long timeLT, int offset, int limit, ITuyaResultCallback<List<TimeRangeBean>> callback);

参数说明

参数 说明
devId 设备 ID
timeGT 10 位时间戳格式的开始时间
timeLT 10 位时间戳格式的结束时间
offset 第几页,默认为 0
limit 每次拉取条数,默认为 -1,表示所有数据
callback 回调方法

示例代码

CloudDayBean dayBean = dayBeanList.get(0);
cloudCamera.getMotionDetectionInfo(devId, dayBean.getCurrentStartDayTime(), dayBean.getCurrentDayEndTime(), offset, limit, new ITuyaResultCallback<List<TimeRangeBean>>() {
    @Override
    public void onSuccess(List<TimeRangeBean> result) {

    }

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

    }
});

云存储事件中携带的事件截图是经过加密的,需要通过加密图片组件展示。详情参考 加密图片 云存储事件章节。

(已弃用)开通云存储

本接口已不再维护,您可以使用 云存储 UI 业务包 开通云存储服务。

接口说明

public void buyCloudStorage(Context mContext, DeviceBean deviceBean, String homeId, ICloudManagerCallback callback) {
        CameraCloudManager.getInstance().getCloudStorageUrl(mContext, deviceBean, homeId);
    }

参数说明

参数 说明
mContext 上下文
deviceBean 设备信息
homeId 家庭 ID
callback 回调方法

示例代码

cameraCloudSDK.buyCloudStorage(CameraCloudStorageActivity.this,
                               TuyaHomeSdk.getDataInstance().getDeviceBean(devId),
                               String.valueOf(FamilyManager.getInstance().getCurrentHomeId()), new ICloudManagerCallback() {
                                 @Override
                                 public void onError(int i) {

                                 }

                                 @Override
                                 public void onSuccess(Object o) {
                                   String uri = (String) o;
                                   Intent intent = new Intent(CameraCloudStorageActivity.this, WebViewActivity.class);
                                   intent.putExtra("Uri",uri);
                                   startActivity(intent);
                                 }
                               });

错误码

错误码 说明
10100 获取 SECRET 失败
10101 获取 AUTH 失败
10110 其他异常
10010 获取认证信息失败
10011 获取某天的视频片段(鉴权信息)失败

云存储管理

初始化

创建设备对象。

接口说明

void createCloudDevice(String cachePath, String devId)

参数说明

参数 说明
cachePath 缓存路径
devId 设备 ID

示例代码

cloudCamera.createCloudDevice(cachePath, devId);

反初始化

接口说明

void deinitCloudCamera();

示例代码

cloudCamera.deinitCloudCamera();

销毁

接口说明

public void onDestroy();

示例代码

cloudCamera.onDestroy();

注册云存储监听

ITYCloudCamera 注册监听器,否则无法正常显示画面。

接口说明

void registerP2PCameraListener(AbsP2pCameraListener listener);

参数说明

参数 说明
listener P2P 回调

示例代码

cloudCamera.registerP2PCameraListener(new AbsP2pCameraListener() {
    @Override
    public void onSessionStatusChanged(Object camera, int sessionId, int sessionStatus) {
        super.onSessionStatusChanged(camera, sessionId, sessionStatus);
    }
});

注销云存储监听

接口说明

void removeOnP2PCameraListener();

示例代码

cloudCamera.removeOnP2PCameraListener();

绑定播放组件 view

接口说明

void generateCloudCameraView(IRegistorIOTCListener view);

参数说明

参数 说明
view 播放器组件

示例代码

cloudCamera.generateCloudCameraView(mVideoView);

云存储使用

开始播放视频

接口说明

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

参数说明

参数 说明
mStartTime 10 位时间戳格式的开始时间
mEndTime 结束时间,一般是这一天的结束时间
isEvent 是否是侦测事件,默认为 false
callBack 播放回调
playFinishedCallBack 播放结束回调

示例代码

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) {
                                         }
                                       });

暂停播放视频

接口说明

int pausePlayCloudVideo(OperationDelegateCallBack callBack);

参数说明

参数 说明
callBack 操作回调

示例代码

cloudCamera.pausePlayCloudVideo(new OperationDelegateCallBack() {
  @Override
  public void onSuccess(int sessionId, int requestId, String data) {
  }

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

  }
});

继续播放视频

接口说明

int resumePlayCloudVideo(OperationDelegateCallBack callBack);

参数说明

参数 说明
callBack 操作回调

示例代码

cloudCamera.resumePlayCloudVideo(new OperationDelegateCallBack() {
  @Override
  public void onSuccess(int sessionId, int requestId, String data) {
  }

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

  }
});

停止播放视频

接口说明

int stopPlayCloudVideo(OperationDelegateCallBack callBack);

参数说明

参数 说明
callBack 操作回调

示例代码

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

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

  }
});

下载云存储视频

接口说明

void startCloudDataDownload(long startTime, long stopTime, String folderPath, String mp4FileName,
                                OperationCallBack callback, ProgressCallBack progressCallBack, OperationCallBack finishedCallBack);

参数说明

参数 说明
startTime 需要下载的视频片段的开始时间,10 位时间戳
stopTime 需要下载的视频片段的结束时间,10 位时间戳
folderPath 存储路径
mp4FileName 文件名
callback 操作回调
progressCallBack 下载进度回调
finishedCallBack 下载完成回调

停止下载视频

接口说明

void stopCloudDataDownload(OperationCallBack callBack);

参数说明

参数 说明
callBack 操作回调

删除云存储视频

接口说明

void deleteCloudVideo(long timeGT, long timeLT, String timeZone, final ITuyaResultCallback<String> listener);

参数说明

参数 说明
timeGT 10 位时间戳格式的开始时间
timeLT 结束时间
timeZone 时区
listener 回调方法

视频录制

开始录制

接口说明

int startRecordLocalMp4(String folderPath, String fileName, OperationDelegateCallBack callBack);

参数说明

参数 说明
folderPath 文件夹路径
fileName 文件名称
callBack 操作回调

示例代码

cloudCamera.startRecordLocalMp4(IPCCameraUtils.recordPath(devId), String.valueOf(System.currentTimeMillis()), new OperationDelegateCallBack() {
  @Override
  public void onSuccess(int sessionId, int requestId, String data) {
    Toast.makeText(CameraCloudStorageActivity.this, "record start success", Toast.LENGTH_SHORT).show();
  }

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

结束录制

接口说明

int stopRecordLocalMp4(OperationDelegateCallBack callBack);

参数说明

参数 说明
callBack 操作回调

示例代码

cloudCamera.stopRecordLocalMp4(new OperationDelegateCallBack() {
  @Override
  public void onSuccess(int sessionId, int requestId, String data) {
    Toast.makeText(CameraCloudStorageActivity.this, "record end success", Toast.LENGTH_SHORT).show();
  }

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

其他功能

云存储视频播放也提供有声音开关、截图等功能。

获取静音状态

接口说明

int getCloudMute();

示例代码

cloudCamera.getCloudMute()

设置静音状态

接口说明

void setCloudMute(final int mute, OperationDelegateCallBack callBack);

参数说明

参数 说明
mute 是否静音:
  • 1:关闭声音
  • 0:打开声音
callBack 操作回调

示例代码

cloudCamera.setCloudMute(mute, new OperationDelegateCallBack() {
            @Override
            public void onSuccess(int sessionId, int requestId, String data) {
                soundState = Integer.valueOf(data);
            }

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

视频截图

接口说明

int snapshot(String absoluteFilePath, OperationDelegateCallBack callBack);

参数说明

参数 说明
absoluteFilePath 文件地址
callBack 操作回调

示例代码

cloudCamera.snapshot(IPCCameraUtils.recordSnapshotPath(devId), new OperationDelegateCallBack() {
  @Override
  public void onSuccess(int sessionId, int requestId, String data) {
    Toast.makeText(CameraCloudStorageActivity.this, "snapshot success", Toast.LENGTH_SHORT).show();
  }

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