一、背景
通过集成sdk,播放上传到云端的 IPC 录制的视频。
二、主要步骤
- 创建设备对象
- 查询云存储服务的开通状态,保证云储服务开通。
- 在步骤2,云存储服务在有效期,则获取有云存储视频的日期。
- 获取指定日期的相关数据,包括云存储事件、时间轴数据、鉴权信息等。
- 选择一个云存储事件或者一个时间点,开始播放云视频。
三、详细步骤
(1) 创建设备对象
通过IThingIPCCloud.createCloudCamera
创建 IThingCloudCamera
。
Code: Select all
IThingCloudCamera cloud = null;
IThingIPCCloud thingIPCCloud = ThingIPCSdk.getCloud();
if (thingIPCCloud != null) {
cloud = thingIPCCloud.createCloudCamera();
}
(2) 查询云存储开通状态
通过IThingCloudCamera.queryCloudServiceStatus
查询云存储开通状态。如果开通了,则转到下一步。
Code: Select all
mCloudCamera.queryCloudServiceStatus(mDeviceBean.getDevId(), new IThingResultCallback<CloudStatusBean>() {
@Override
public void onSuccess(CloudStatusBean result) {
// a. 根据result.getStatus()做对应处理
// 获取有云存储视频的日期
}
@Override
public void onError(String errorCode, String errorMessage) {
//
}
});
CloudStatusBean.getStatus()
, 根据返回值进行处理。
- 返回值 是10010(云存储服务已过期) 或者 10010(已开通云存储服务),则接下去获取有云存储视频的日期。
- 返回值 是10001(未购买云存储服务), 未购买云存储服务,需要先购买云存
(3) 获取有云存储视频的日期
- 首先先确定要播放的日期,
- 然后通过
IThingCloudCamera.getCloudDays
查询到对应的CloudDayBean
,则转到下一步。[/list]
Code: Select all
// 播放的时间点
long currentPlayTimestamp = 12312398909;
final String timezoneId = TimeZone.getDefault().getID();
mCloudCamera.getCloudDays(mDeviceBean.getDevId(), timezoneId, new IThingResultCallback<List<CloudDayBean>>() {
@Override
public void onSuccess(List<CloudDayBean> result) {
// a.把查询到数据存放在 List<CloudDayBean> mDayBeanList中
mDayBeanList.clear();
for (CloudDayBean bean : result) {
bean.setTimeZoneId(timezoneId);
}
mDayBeanList.addAll(result);
if (null != mDayBeanList && mDayBeanList.size() > 0) {
// b.1 根据currentPlayTimestamp 得到 对应的日期
// b.2 从b.1 得到日期,从mDayBeanList找到CloudDayBean
}
}
@Override
public void onError(String errorCode, String errorMessage) {
}
});
- 把查询到数据存放在 List<CloudDayBean> mDayBeanList中;
- 根据 指定的播放的时间点
currentPlayTimestamp
得到 对应的日期, 从mDayBeanList
中通过和CloudDayBean.getUploadDay
对比找到CloudDayBean
;
(4)获取指定日期的时间片数据和移动侦测事件列表数据
(4.1) 获取指定日期的时间片数据
- 从上一个步骤找到的
CloudDayBean
,得到开始事件(CloudDayBean.getCurrentStartDayTime()
)和结束时间(CloudDayBean.
getCurrentDayEndTime()
); - 通过
IThingCloudCamera.getTimeLineInfo
查询到这段时间内的视频片段,则转到下一步。
Code: Select all
// 播放的时间点
long currentPlayTimestamp = 12312398909;
long startTime = cloudDayBean.getCurrentStartDayTime();
long endTime = cloudDayBean.getCurrentDayEndTime();
mCloudCamera.getTimeLineInfo(mDeviceBean.getDevId(), startTime, endTime, new IThingResultCallback<List<TimePieceBean>>() {
@Override
public void onSuccess(List<TimePieceBean> result) {
// a.把查询到数据存放在 List<TimePieceBean> mTimePieceList中,
// 通过mTimePieceList可以显示时间轴
mTimePieceList.clear();
if (result != null && !result.isEmpty()) {
mTimePieceList.addAll(result);
...
}
if (null != mTimePieceList && !mTimePieceList.isEmpty()) {
// b.1 根据播放的时间点currentPlayTimestamp, 从mTimePieceList
// 找到合适的时间片段,如果没合适的则选第一个片段
// b.2 就下去就是播放视频
}
}
@Override
public void onError(String errorCode, String errorMessage) {
}
});
(5) 播放云视频
从上一步得到播放时间对应的视频片段TimeRangeBean
,从TimeRangeBean 得到开始时间(
getStartTime()
) 和 结束时间(getEndTime()
),进行播放视频。
Code: Select all
// !!!注意startTime,endTime,是10 位时间戳格式的时间戳
mCloudCamera.playCloudDataWithStartTime(startTime, endTime, isEvent,
new OperationCallBack() {
@Override
public void onSuccess(int sessionId, int requestId, String data, Object camera) {
// 开始播放
}
@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) {
// 播放结束
}
@Override
public void onFailure(int sessionId, int requestId, int errCode, Object camera) {
}
});
四、相关api 参考
云存储相关api