全部产品
云市场

短视频上传

更新时间:2018-12-19 16:58:34

简介

短视频上传VODSVideoUploadClient主要针对需要同时上传封面图片+视频的场景,旨在简化用户的接口调用,内部是在VODUploadClient的基础上封装实现的。短视频上传只支持STS方式上传,要想通过上传地址加凭证方式上传短视频请使用VODUploadClient分别上传封面图片+视频。

整体步骤

  1. 请求STS,相关概念请参见相关文档;
  2. 初始化上传实例;
  3. 回调设置,所有的上传状态包括进度,上传成功,上传失败,凭证过期都在这里进行处理;
  4. 启动上传;
  5. 回调处理;

1. 请求STS

通过STS方式,客户端需要向AppServer发送请求,AppServer向阿里云STS服务请求临时STS凭证。请求成功将返回STS凭证,AppServer需要将结果返回给客户端。

2. 初始化

首先,我们需要声明一个VODSVideoUploadClient属性,注意不能是局部变量。

  1. //1.初始化短视频上传对象
  2. VODSVideoUploadClient vodsVideoUploadClient = new VODSVideoUploadClientImpl(this.getApplicationContext());
  3. vodsVideoUploadClient.init();
  1. //2.构建上传参数
  2. //参数请确保存在,如不存在SDK内部将会直接将错误throw Exception
  3. // 文件路径保证存在之外因为Android 6.0之后需要动态获取权限,请开发者自行实现获取"文件读写权限".
  4. VodHttpClientConfig vodHttpClientConfig = new VodHttpClientConfig.Builder()
  5. .setMaxRetryCount(2)//重试次数
  6. .setConnectionTimeout(15 * 1000)//连接超时
  7. .setSocketTimeout(15 * 1000)//socket超时
  8. .build();
  9. //构建短视频VideoInfo,常见的描述,标题,详情都可以设置
  10. SvideoInfo svideoInfo = new SvideoInfo();
  11. svideoInfo.setTitle(new File(videoPath).getName());//标题
  12. svideoInfo.setDesc("");//文件详情
  13. svideoInfo.setCateId(1);//分类id
  14. //构建点播上传参数(重要)
  15. VodSessionCreateInfo vodSessionCreateInfo =new VodSessionCreateInfo.Builder()
  16. .setImagePath(imagePath)//图片地址
  17. .setVideoPath(videoPath)//视频地址
  18. .setAccessKeyId(accessKeyId)//临时accessKeyId
  19. .setAccessKeySecret(accessKeySecret)//临时accessKeySecret
  20. .setSecurityToken(securityToken)//securityToken
  21. .setExpriedTime(expriedTime)//STStoken过期时间
  22. .setRequestID(requestID)//requestID,开发者可以传将获取STS返回的requestID设置也可以不设.
  23. .setIsTranscode(true)//是否转码.如开启转码请AppSever务必监听服务端转码成功的通知
  24. .setSvideoInfo(svideoInfo)//短视频视频信息
  25. .setVodHttpClientConfig(vodHttpClientConfig)//网络参数
  26. .build();

3. 启动上传并设置上传的回调

从以下上传代码片段中可以看到,启动上传需要设置上传回调,需要实现VODSVideoUploadCallback回调:

  1. vodsVideoUploadClient.uploadWithVideoAndImg(vodSessionCreateInfo, new VODSVideoUploadCallback() {
  2. @Override
  3. public void onUploadSucceed(String videoId, String imageUrl) {
  4. //上传成功返回视频ID和图片URL.
  5. Log.d(TAG,"onUploadSucceed"+ "videoId:"+ videoId + "imageUrl" + imageUrl);
  6. }
  7. @Override
  8. public void onUploadFailed(String code, String message) {
  9. //上传失败返回错误码和message.错误码有详细的错误信息请开发者仔细阅读
  10. Log.d(TAG,"onUploadFailed" + "code" + code + "message" + message);
  11. }
  12. @Override
  13. public void onUploadProgress(long uploadedSize, long totalSize) {
  14. //上传的进度回调,非UI线程
  15. Log.d(TAG,"onUploadProgress" + uploadedSize * 100 / totalSize);
  16. progress = uploadedSize * 100 / totalSize;
  17. handler.sendEmptyMessage(0);
  18. }
  19. @Override
  20. public void onSTSTokenExpried() {
  21. Log.d(TAG,"onSTSTokenExpried");
  22. //STS token过期之后刷新STStoken,如正在上传将会断点续传
  23. vodsVideoUploadClient.refreshSTSToken(accessKeyId,accessKeySecret,securityToken,expriedTime);
  24. }
  25. @Override
  26. public void onUploadRetry(String code, String message) {
  27. //上传重试的提醒
  28. Log.d(TAG,"onUploadRetry" + "code" + code + "message" + message);
  29. }
  30. @Override
  31. public void onUploadRetryResume() {
  32. //上传重试成功的回调.告知用户重试成功
  33. Log.d(TAG,"onUploadRetryResume");
  34. }
  35. });

4. 暂停、恢复 、取消上传

常见的比如退后台的暂停,进入前台继续上传的逻辑Demo中有体现。开发者可以自由的组装暂停上传,恢复上传和取消上传的逻辑。

暂停上传:

  1. //需要保证跟resume成对出现
  2. vodsVideoUploadClient.pause();

恢复上传:

  1. //需要保证跟pause成对出现
  2. vodsVideoUploadClient.resume();

取消上传:

  1. //取消上传之后就认为上传流程结束了,不能再调用resume恢复
  2. vodsVideoUploadClient.cancel();

5. 回调处理

5.1 上传进度

每上传一个分片,会触发onUploadProgress回调,回调参数包括已上传文件大小uploadedSize和总文件大小totalSize

5.2 上传成功

上传成功时,会触发onUploadSucceed回调。回调包含上传结果videoIdimageUrl属性

视频上传成功后会返回videoId作为视频id,拿到videoId之后需要获取播放地址进行播放。相关文档可以参考获取播放地址播放。图片上完成后会返回imageUrl,开启URL鉴权后imageUrl会有过期时间。相关配置可以参考URL鉴权

5.3 上传失败

上传失败时,会触发onUploadFailed(String code, String message)回调。在该回调方法中,我们可以通过codemessage查看具体原因,页面上给予用户提示。错误码参见:点播错误码oss错误码

5.4 凭证过期处理

上传凭证和STS过期,会触发onSTSTokenExpried回调。在该回调方法中,我们可以向AppServer重新请求新的STS凭证,并调用以下方法继续上传:

  1. refreshSTSToken(accessKeyId,accessKeySecret,securityToken,expriedTime);

5.5 超时处理

上传超时,会触发uploadRetry回调并自动重试。在该回调方法中,我们可以在页面上给予用户提示或者调用cancel方法停止上传。此外,可以设置maxRetryCount属性,指定最大重试次数。超时重试发现可以继续上传时,会触发uploadRetryResume回调并恢复上传。