通过阅读本文,您可以了解短视频上传的方式和基本流程。

操作步骤

  1. 请求STS。更多信息,请参见使用STS方式上传
    说明 短视频上传只支持STS方式上传,要想通过上传地址和凭证方式进行短视频上传请使用VODUploadClient分别上传封面图片和视频。
  2. 初始化上传实例。
    1. 声明VODSVideoUploadClient属性,不能是局部变量。
      //初始化短视频上传对象
      VODSVideoUploadClient vodsVideoUploadClient = new VODSVideoUploadClientImpl(this.getApplicationContext());
      vodsVideoUploadClient.init();
    2. 构建上传参数。
      //构建上传参数
      //参数请确保存在,如不存在SDK内部将会直接将错误throw Exception
      //文件路径保证存在之外因为Android 6.0之后需要动态获取权限,请开发者自行实现获取"文件读写权限"
      VodHttpClientConfig vodHttpClientConfig = new VodHttpClientConfig.Builder()
              .setMaxRetryCount(2)//重试次数
              .setConnectionTimeout(15 * 1000)//连接超时
              .setSocketTimeout(15 * 1000)//socket超时
              .build();
       //构建短视频VideoInfo,常见的描述、标题、详情都可以设置
       SvideoInfo svideoInfo = new SvideoInfo();
       svideoInfo.setTitle(new File(videoPath).getName());//标题
       svideoInfo.setDesc("");//文件详情
       svideoInfo.setCateId(1);//分类ID
       //构建点播上传参数(重要)
       VodSessionCreateInfo vodSessionCreateInfo =new    VodSessionCreateInfo.Builder()
      .setImagePath(imagePath)//图片地址
      .setVideoPath(videoPath)//视频地址
      .setAccessKeyId(accessKeyId)//临时accessKeyId
      .setAccessKeySecret(accessKeySecret)//临时accessKeySecret
      .setSecurityToken(securityToken)//securityToken
      .setExpriedTime(expriedTime)//STStoken过期时间
      .setRequestID(requestID)//requestID,开发者可以传将获取STS返回的requestID设置也可以不设
      .setIsTranscode(true)//是否转码,如开启转码请AppSever务必监听服务端转码成功的通知
      .setSvideoInfo(svideoInfo)//短视频信息
      .setVodHttpClientConfig(vodHttpClientConfig)//网络参数
                              .build();
  3. 回调设置。

    启动上传前需要设置上传回调,需要实现VODSVideoUploadCallback回调:

    vodsVideoUploadClient.uploadWithVideoAndImg(vodSessionCreateInfo, new VODSVideoUploadCallback() {
                        @Override
                        public void onUploadSucceed(String videoId, String imageUrl) {
                        //上传成功返回视频ID和图片URL
                        Log.d(TAG,"onUploadSucceed"+ "videoId:"+ videoId + "imageUrl" + imageUrl);
                        }
                        @Override
                        public void onUploadFailed(String code, String message) {
                            //上传失败返回错误码和message,错误码有详细的错误信息请开发者仔细阅读
                            Log.d(TAG,"onUploadFailed" + "code" + code + "message" + message);
                        }
                        @Override
                        public void onUploadProgress(long uploadedSize, long totalSize) {
                            //上传的进度回调,非UI线程
                            Log.d(TAG,"onUploadProgress" + uploadedSize * 100 / totalSize);
                            progress = uploadedSize * 100 / totalSize;
                            handler.sendEmptyMessage(0);
                        }
                        @Override
                        public void onSTSTokenExpried() {
                            Log.d(TAG,"onSTSTokenExpried");
                            //STS token过期之后刷新STStoken,如正在上传将会断点续传
                            vodsVideoUploadClient.refreshSTSToken(accessKeyId,accessKeySecret,securityToken,expriedTime);
                        }
                        @Override
                        public void onUploadRetry(String code, String message) {
                            //上传重试的提醒
                            Log.d(TAG,"onUploadRetry" + "code" + code + "message" + message);
                        }
                        @Override
                        public void onUploadRetryResume() {
                            //上传重试成功的回调,告知用户重试成功
                            Log.d(TAG,"onUploadRetryResume");
                        }
                    });
  4. 启动上传。

    上传控制方法如下所示:

    • 暂停上传。
      //需要保证跟resume成对出现
      vodsVideoUploadClient.pause();
    • 恢复上传。
      //需要保证跟pause成对出现
      vodsVideoUploadClient.resume();
    • 取消上传。
      //取消上传之后,上传流程结束,不能再调用resume恢复
      vodsVideoUploadClient.cancel();
  5. 回调处理。
    • 上传进度

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

    • 上传成功

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

      说明
      • 视频上传成功后会返回videoId作为视频ID,拿到videoId之后需要获取播放地址进行播放。更多信息,请参见获取播放地址播放
      • 图片上完成后会返回imageUrl,开启URL鉴权后imageUrl会有过期时间。更多信息,请参见URL鉴权
    • 上传失败

      上传失败时,会触发onUploadFailed回调。在该回调方法中,可以通过codemessage查看具体原因,并在页面上提示。更多错误码信息,请参见错误码表OSS错误码

    • 凭证过期处理
      STS过期,会触发uploadTokenExpired回调。在该回调方法中,可以向AppServer重新请求新的STS凭证,并调用以下方法继续上传。
      refreshSTSToken(accessKeyId,accessKeySecret,securityToken,expriedTime);
    • 超时处理

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