如何播放云存储视频

App开发相关产品技术讨论,包括OEM App、App SDK等话题


Post Reply
zhongshu
Posts: 7

一、背景
通过集成sdk,播放上传到云端的 IPC 录制的视频。

二、主要步骤

  1. 创建设备对象
  2. 查询云存储服务的开通状态,保证云储服务开通。
  3. 在步骤2,云存储服务在有效期,则获取有云存储视频的日期。
  4. 获取指定日期的相关数据,包括云存储事件、时间轴数据、鉴权信息等。
  5. 选择一个云存储事件或者一个时间点,开始播放云视频。

三、详细步骤
(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

Last edited by zhongshu on 2024年 Oct 18日 09:35, edited 1 time in total.

Tags:
dengkeng
Posts: 2

Re: 播放云存储视频教程

very good o( ̄▽ ̄)d

Post Reply