云存储

更新时间:2024-03-04 08:53:08

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

流程说明

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

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

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

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

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

        云存储

支持云存储

IThingIPCCloud 是云存储的 API 集合,所以提供了设备是否支持云存储能力的方法。

接口说明

boolean isSupportCloudStorage(String devId);

参数说明

参数 说明
devId 设备 ID

示例代码

IThingIPCCloud cloud = ThingIPCSdk.getCloud();
    if (cloud != null) {
    isSupportCloudStorage = cloud.isSupportCloudStorage(devId);
    }

开通服务

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

云存储对象

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

接口说明

创建云存储的实例对象。

IThingCloudCamera createCloudCamera();

示例代码

private IThingCloudCamera cloudCamera;

        IThingIPCCloud cloud = ThingIPCSdk.getCloud();
        if (cloud != null) {
        cloudCamera = cloud.createCloudCamera();
        }

普通云存储

查询云存储的开通状态

接口说明

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

参数说明

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

示例代码

cloudCamera.queryCloudServiceStatus(devId, new IThingResultCallback<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, IThingResultCallback<List<CloudDayBean>> callback);

参数说明

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

示例代码

cloudCamera.getCloudDays(devId, TimeZone.getDefault().getID(), new IThingResultCallback<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, IThingResultCallback<List<TimePieceBean>> callback);

参数说明

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

示例代码

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

        }
        });

AITimePieceBean 数据模型

参数 说明
startTime 视频开始时间 Unix 时间戳
endTime 视频结束时间 Unix 时间戳
aiCode AI 事件片段 ID

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

接口说明

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

参数说明

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

TimeRangeBean 数据模型

参数 说明
describe 移动侦测信息描述
startTime 移动侦测事件开始时间
endTime 移动侦测事件结束时间
snapshotUrl 移动侦测事件图片
v 版本,2 表示图片已加密

示例代码

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

        }

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

        }
        });

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

获取云存储密钥信息

接口说明

 void getCloudSecret(String devId, ResultListener<JSONObject> callback)

参数说明

参数 说明
devId 设备 ID
Business.ResultListener 回调方法

示例代码

CloudBusiness cloudBusiness =new CloudBusiness();
    cloudBusiness.getCloudSecret(devId, new Business.ResultListener<JSONObject>() {
            @Override
            public void onFailure(BusinessResponse bizResponse, JSONObject bizResult, String apiName) {

            }

            @Override
            public void onSuccess(BusinessResponse bizResponse, JSONObject bizResult, String apiName) {
                    mEncryptKey = bizResult.getString("encryptKey");
            }
        });

错误码

错误码 说明
-2000 保存云存储片段文件信息失败
-2001 云存储鉴权认证信息为空
-2002 云存储获取播放 URL 解析失败

AI 云存储

查询设备 AI 云存储设置信息

设备是否开启 AI 检测能力

接口说明

void queryAIDetectConfig(String devId, IThingResultCallback<AIDetectConfigBean> callback);

AIDetectConfigBean 数据模型

参数 说明
switchState 设备 AI 检测能力是否开启
  • 1 表示开启
  • 0 表示关闭
isAiDevice 设备是否有 AI 检测能力
aiItemList 支持检测的 AI 物种数据信息

AIDetectEventBean 数据模型

参数 说明
aiCode AI 标识符
aiCodeIcon AI 模型图标
aiCodeDesc AI 描述信息
configState 当前模型是否开启
  • 1 表示开启
  • 0 表示关闭
orderValue 当前模型排序值

示例代码

cloudCamera.queryAIDetectConfig(getDevId(), new IThingResultCallback<AIDetectConfigBean>() {
            @Override
            public void onSuccess(AIDetectConfigBean result) {
            }

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

更新 AI 检测开关状态

开启、关闭设备 AI 检测功能。

接口说明

void enableAIDetect(String devId, boolean enable, IThingResultCallback<Boolean> callback);

参数说明

参数 说明
devId 设备 ID
enable 是否开启 AI 检测功能

示例代码

cloudCamera.enableAIDetect(getDevId(), enable, new IThingResultCallback<AIDetectConfigBean>() {
            @Override
            public void onSuccess(Boolean result) {
            }

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

更新 AI 检测事件类型

接口说明

void enableAIDetectEventType(String devId, String aiCode, int enableState, IThingResultCallback<Boolean> callback);

参数说明

参数 说明
devId 设备 ID
aiCode AI 事件 标识 ID
enableState 是否可用
  • 0:不可用
  • 1:可用

示例代码

cloudCamera.enableAIDetectEventType(getDevId(), aiCode, enableState, new IThingResultCallback<AIDetectConfigBean>() {
            @Override
            public void onSuccess(Boolean result) {
            }

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

查询 AI 云存储事件

开启 AI 云存储服务后,设备通过侦测报警上报的事件,AI 算法能够精准识别到上报事件中是否包含用户设置的物种,目前支持设置的物种有人形、宠物、车辆、包裹。

AI 云存储的 报警事件侦测报警消息,和普通云存储的逻辑一致。

接口说明

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

参数说明

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

云存储管理

初始化

创建设备对象。

接口说明

void createCloudDevice(String cachePath, String devId)

参数说明

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

示例代码

cloudCamera.createCloudDevice(cachePath, devId);

反初始化

接口说明

void deinitCloudCamera();

示例代码

cloudCamera.deinitCloudCamera();

销毁

接口说明

public void destroy();

示例代码

cloudCamera.destroy();

注册云存储监听

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

接口说明

void registorOnP2PCameraListener(OnP2PCameraListener listener);

参数说明

参数 说明
listener P2P 回调

示例代码

cloudCamera.registorOnP2PCameraListener(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(String devId, long timeGT, long timeLT, boolean isAllDay, String timeZone, IThingResultCallback<String> listener);

参数说明

参数 说明
devId 设备 ID
timeGT 10 位时间戳格式的开始时间
timeLT 结束时间
isAllDay 是否是删除整天
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) {
        }
        });

倍速播放

在开始播放调用成功后设置倍速播放,音频不支持倍速状态。

接口说明

void setPlayCloudDataSpeed(int speed, OperationCallBack operationCallBack);

参数说明

参数 说明
speed 播放倍速,支持 1、2、4 倍速,枚举值 CloudPlaySpeed
operationCallBack 操作回调

CloudPlaySpeed 枚举值

        CloudPlaySpeed.MULTIPLE_1,               // 1.0 倍速
        CloudPlaySpeed.MULTIPLE_2,               // 2.0 倍速
        CloudPlaySpeed.MULTIPLE_4,               // 4.0 倍速

示例代码

 mCloudCamera.setPlayCloudDataSpeed(speed, new OperationCallBack() {
@Override
public void onSuccess(int sessionId, int requestId, String data, Object camera) {
        // TODO " setPlayCloudDataSpeed onSuccess"
        }

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