全部产品
云市场

视频上传

更新时间:2020-02-13 20:08:28

简介

阿里云点播上传SDK(ApsaraVideo for Upload SDK)是阿里视频云端到云到端服务的重要一环,为您提供上传到点播和OSS上更加易用的,使用上传SDK可以上传包括图片、视频、音频等在内各种数据文件,提供各个端上的SDK以供开发者使用。支持Web端(JavaScript)、移动端(Android,iOS)、服务端(JAVA),以及上传OpenAPI,也可以通过阿里云控制台直接上传。

如何快速接入上传方案

Step1.文件导入

复制AlivcLittleVideo模块com.aliyun.apsara.alivclittlevideo.view.publish包中的代码和相关资源文件。上传复制文件

Step2.功能使用

  1. 通过addView的方式,把AlivcVideoPublishView实例化对象添加到页面中。示例代码如下:

    1. //创建上传view对象
    2. mAlivcVideoPublishView = new AlivcVideoPublishView(this);
    3. //设置上传凭证过期监听
    4. mAlivcVideoPublishView.setOnAuthInfoExpiredListener(new OnAuthInfoExpiredListener() {
    5. @Override
    6. public void onImageAuthInfoExpired() {
    7. //TODO 重新获取图片上传凭证信息
    8. //......
    9. //刷新图片上传凭证信息
    10. mAlivcVideoPublishView.refreshImageUploadAuthInfo(data.getImageId(),
    11. data.getImageURL(),
    12. data.getUploadAddress(),
    13. data.getUploadAuth());
    14. }
    15. @Override
    16. public void onVideoAuthInfoExpired(String videoId) {
    17. //TODO 刷新视频上传凭证
    18. //......
    19. //刷新视频上传凭证信息
    20. mAlivcVideoPublishView.refreshVideoAuth(data.getUploadAddress(),
    21. data.getUploadAuth());
    22. }
    23. });
    24. //设置上传结果回调监听
    25. mAlivcVideoPublishView.setOnUploadCompleteListener(new MyUploadCompleteListener(this));
    26. FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
    27. FrameLayout.LayoutParams.MATCH_PARENT,
    28. FrameLayout.LayoutParams.MATCH_PARENT);
    29. mContentView.addView(mAlivcVideoPublishView, params);

    2、调用AlivcVideoPublishView的startUpload方法开始对视频进行合成、上传。

    1. mAlivcVideoPublishView.startUpload(
    2. //编辑配置信息相关的json文件路径
    3. mConfigPath,
    4. //视频合成路径
    5. mComposeOutputPath,
    6. //视频id
    7. mVideoUploadAuthInfo.getVideoId(),
    8. //视频上传地址
    9. mVideoUploadAuthInfo.getUploadAddress(),
    10. //视频上传凭证
    11. mVideoUploadAuthInfo.getUploadAuth(),
    12. //视频描述
    13. mVideoDesc,
    14. //封面图片地址
    15. mThumbnailPath,
    16. //图片id
    17. mImageUploadAuthInfo.getImageId(),
    18. //图片访问地址
    19. mImageUploadAuthInfo.getImageURL(),
    20. //图片上传地址
    21. mImageUploadAuthInfo.getUploadAddress(),
    22. //图片上传凭证
    23. mImageUploadAuthInfo.getUploadAuth());

视频上传方案说明

短视频合成上传的整体流程为:视频编辑完成之后,需要对编辑的效果进行合成,生成一个全新的视频,再把生成的视频上传到阿里云点播服务中去。由于视频合成、上传的过程中比较消耗时间,所以很多用户希望在这个过程中不影响app其他功能的正常使用。本方案主要针对这个问题作出解决。

视频合成

合成方式分为两种,当前页面合成(前台页面)和其他页面合成(后台合成,这里后台并不是真正的app退到后台)。

  • 前台合成:利用编辑的核心类AliyunIEditor,在编辑完成之后直接调用其compose方法对编辑的视频进行合成,这会造成用户必须在视频合成完成之后才能显示其他页面。

  • 后台合成:利用SDK提供的合成核心类AliyunIVodCompose,通过传入配置文件路径,调用其compose方法对编辑的视频进行合成。可以在其他页面完成合成操作。

本解决方案中就是利用后台合成的方式,实现在合成的过程中不阻塞用户的其他操作。其实现步骤为:

  1. 设置编辑后跳转的页面

    编辑模块提供了注册Acitivity的功能,通过注册的Activity替换编辑完成之后默认跳转的发布界面。示例代码如下:

    1. // 注册编辑完成之后跳转的页面
    2. AliyunSvideoActionConfig.getInstance().registerPublishActivity(PublishActivity.class.getName());

    tip:注册Activity的代码必须在进入编辑之前调用。

  2. 接收参数

    在用户自己的发布界面中接收合成所需要的参数。

    1. //接收编辑配置信息相关的json文件路径
    2. mConfigPath = intent.getStringExtra("project_json_path");
    3. //接收选择封面的路径
    4. mThumbnailPath = intent.getStringExtra("svideo_thumbnail");

    tip:只能在注册的Activity中接收参数。

  3. 开始合成

    利用SDK提供的合成核心类AliyunIVodCompose,通过传入接收到的配置文件路径,调用其compose方法对编辑的视频进行合成。

    1. //创建AliyunICompose对象
    2. AliyunIVodCompose mCompose = AliyunComposeFactory.createAliyunVodCompose();
    3. mCompose.init(context);
    4. //开始合成
    5. mCompose.compose(
    6. //配置文件路径
    7. mConfigPath,
    8. //合成视频输出路径
    9. DefaultSvideoParam.DIR_COMPOSE+"/output_compose_video.mp4",
    10. //合成回调监听
    11. new AliyunIComposeCallBack() {
    12. @Override
    13. public void onComposeError(int i) {
    14. //TODO: 合成出错
    15. }
    16. @Override
    17. public void onComposeProgress(int i) {
    18. //TODO: 合成进度
    19. }
    20. @Override
    21. public void onComposeCompleted() {
    22. //TODO: 合成完成
    23. }
    24. });

视频上传

客户端提供了两种授权方式上传到点播,STS方式上传、上传地址和凭证上传。

本解决方案中是通过上传地址和凭证上传的方式,实现视频上传的功能。其具体实现为:利用SDK提供的合成核心类AliyunIVodCompose,通过传入视频信息、视频图片的上传地址和凭证、封面路径等,调用uploadImageWithVod方法对封面上传,调用其uploadVideoWithVod方法对视频进行上传。

  1. //上传封面
  2. mCompose.uploadImageWithVod(
  3. //封面本地路径
  4. mThumbnailPath,
  5. //封面上传地址
  6. mImageAddress ,
  7. //上传凭证
  8. mImageAuth,
  9. //进度回调
  10. aliyunIVodUploadCallBack );
  1. //上传视频
  2. mCompose.uploadVideoWithVod(
  3. //视频本地地址
  4. mOutputFilePath,
  5. //视频上传地址
  6. mVideoAddress,
  7. //上传凭证
  8. mVideoAuth ,
  9. //进度回调
  10. aliyunIVodUploadCallBack);