Java Upload SDK

更新时间:2023-02-01 18:26:06

目录


为便于Java开发者在自己的程序中能便捷的使用Cloud VoD文件上传接口,我们提供Java语言的上传SDK工具包,您可以通过将SDK嵌入到自己的程序中来实现视频上传到Cloud VoD平台。

功能特性

  • 支持普通上传、分片上传。
  • 分片上传支持多个片并发上传。
  • 当文件大小小于50M,SDK将自动采用普通上传。
  • 当文件大小大于等于50M,SDK将自动使用分片上传。
  • 文件上传后会自动比较hash值,确保文件完整无缺失。
  • 分片文件上传过程中如果失败,会自动重试,重新上传失败的片,默认重试3次。

准备工作

  • 该SDK仅支持Java平台使用,要求JDK 1.6及以上版本,建议采用JDK 1.8版本。
  • 使用前请确认开通Cloud VoD服务,并获取您的用户ID(userID)和密钥(AccessKey Secret)。

使用说明

将SDK引入Java工程

  1. 下载并解压Java SDK
  2. 引入cnc-java-sdk-cloudv-upload-xxx.jar到您的java工程。
  3. 引入lib文件夹内的所有第三方依赖jar包到您的java工程。

视频上传

调用的类

com.cnc.cloudv.sdk.upload.CloudvUploadHandler

调用方法

public String upload(String uploadFilePath, String userId, String secretKey, UploadObserver uploadObserver, UploadFileParam uploadFileParam) 

输入参数

参数名 类型 必填 描述
uploadfilePath string 必填 要上传文件的完整路径。
userId string 必填 账号ID,可以联系客户支持来获取您的账号ID。
secretKey string 必填 AccessKey Secret,您可以在安全设置 > 访问控制 > 用户信息管理 > AccessKey管理下查看您的密钥信息。
uploadObserver UploadObserver 非必填 实现UploadObserver接口的对象,用于接收上传开始、上传成功、上传失败、上传进度的回调通知。 如需要自定义,详情请查看上传进度通知。
uploadFileParam UploadFileParam 非必填 用于上传过程中的各类参数设置,具体如下描述。

uploadFileParam格式说明

参数名 类型 必填 描述
categoryNameBeanList list 非必填 视频类别,可以同时设置父类别和子类别。
例如,[{“childName”:“child-category1”,“parentName”:“parent-category1”},{“ childName”:“child-category2”,“parentName”:“parent-category2”}]。
transCodeCombineName string 非必填 转码组合模板名。 如果设值,上传视频成功后会自动进行转码。
waterMarkName string 非必填 水印名称。仅在有通过transCodeCombineName制定具体转码模版时,该参数才有效。如果transCodeCombineName有值,而waterMarkName没值,则代表转码不加水印。
domain string 非必填 播放域名。填写域名名称,不填或者填写的域名不存在则会使用点播视频的默认域名。

返回结果

类型 描述
string 视频ID,视频信息唯一标识。

示例

public static void main(String[] args) {
    try {
        CloudvUploadHandler cloudvUploadHandler = new CloudvUploadHandler();
        String filePath = "F:\\test.mp4";
        String userId = "xxxxxx";
        String secretKey = "xxxxxxxxxxxxxxxxxxxx";
        CategoryNameBean categoryNameBean = new CategoryNameBean();
        categoryNameBean.setParentName("Parent Category");
        categoryNameBean.setChildName("Child Category");
        List<CategoryNameBean> categoryNameBeanList = new ArrayList<CategoryNameBean>();
        categoryNameBeanList.add(categoryNameBean);
        String transCodeCombineName = "Transcoding Template Name";
        String waterMarkName = "Watermark";
        String domain = "Your domain";

        UploadFileParam uploadFileParam = new UploadFileParam();
        uploadFileParam.setCategoryNameBeanList(categoryNameBeanList);
        uploadFileParam.setTransCodeCombineName(transCodeCombineName);
        uploadFileParam.setWaterMarkName(waterMarkName);
        uploadFileParam.setDomain(domain);
        String videoId = cloudvUploadHandler.upload(filePath, userId, secretKey, null, uploadFileParam);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

高级配置

一般情况下,默认配置即可满足上传的速度与稳定性。在一些特殊情况,如果上传速度或稳定性无法满足您的要求,您可以调整相关的上传参数,上传参数配置设置后将全局生效。

上传配置

配置项

配置项 描述 默认值 配置实例
BLOCK_SIZE 分片上传时块的大小。取值范围:4M-32M,且为4的倍数。 4MB BaseBlockUtil.BLOCK_SIZE = 32 * BaseBlockUtil.MB
CHUNK_SIZE 分片上传时片的大小。取值范围:4M-32M,且为4的倍数。不能大于设置的块大小。
适当增大片大小可能会提高上传速度。
4MB BaseBlockUtil.CHUNK_SIZE = 4 * BaseBlockUtil.MB
THREAD_NUN 分片上传时的并发数,配置范围为1-10。如果配置为5,表示可并发上传5个分片。 5 BaseBlockUtil.THREAD_NUN = 5
FILE_BUFFER_SIZE 读取要上传的文件的缓冲区大小。适当增大设置可能会提高上传速度,但内存使用也将会变大。需要设置为4的倍数。 4KB BaseBlockUtil.FILE_BUFFER_SIZE = 1024 * BaseBlockUtil.KB
TRIED_TIMES 上传失败时自动重试的次数。 3 BaseBlockUtil.TRIED_TIMES = 5

示例

public static void main(String[] args) {
    try {
        //设置块大小
        BaseBlockUtil.BLOCK_SIZE = 32 * BaseBlockUtil.MB;
        //设置片大小
        BaseBlockUtil.CHUNK_SIZE = 4 * BaseBlockUtil.MB;
        //设置片并发数
        BaseBlockUtil.THREAD_NUN = 5;
        //设置文件缓冲区大小
        BaseBlockUtil.FILE_BUFFER_SIZE = 2 * BaseBlockUtil.MB;
        //设置上传失败重试次数
        BaseBlockUtil.TRIED_TIMES = 5;
        CloudvUploadHandler cloudvUploadHandler = new CloudvUploadHandler();
        String filePath = "D:\\test.mp4";
        String userId = "xxxxxx";
        String secretKey = "xxxxxxxxxxxxxxxxxxxx";
        String videoId = cloudvUploadHandler.upload(filePath, userId, secretKey, null);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

上传进度通知

您可以自定义实现消费上传进度通知,包括获取上传进度(开始上传、上传进度、上传成功、上传失败)。

使用方法

  1. 新建一个类实现com.cnc.cloudv.sdk.upload.observer.UploadObserver接口。
  2. 实现接口中的onBegin、onSuccess4、onFail和onProcess四个方法。
  3. 在调用方法中增加入参uploadObserver。
public interface UploadObserver {
    /**
     * 在开始上传之前调用,回传id
     * @param id
     * @param filePath
     */
    void onBegin(String id, String filePath);

    /**
     * 上传成功后调用
     * @param result
     */
    void onSuccess(UploadResult result);

    /**
     * 上传发生异常时调用
     * @param ex
     */
    void onFail(Exception ex);

    /**
     * 每次上传分片成功后回调
     *
     * @param uploaded 已上传的字节数
     * @param total    总字节数
     */
    void onProcess(long uploaded, long total);
}

示例

UploadObserver的实现方法:

public class CustomUploadObserver implements UploadObserver {
    private static final Logger LOGGER = LoggerFactory.getLogger(CustomUploadObserver.class);
    private String videoId;
    private String filePath;

    @Override
    public void onBegin(String videoId, String filePath) {
        this.videoId = videoId;
        this.filePath = filePath;
        LOGGER.info("videoId:{}, filePath:{}, 开始上传", videoId, filePath);
    }

    @Override
    public void onSuccess(UploadResult result) {
        LOGGER.info("videoId:{}, filePath:{}, 上传成功", videoId, filePath);
    }

    @Override
    public void onFail(Exception ex) {
        String message = "videoId:" + videoId + "filePath:" + filePath + ",上传出错";
        LOGGER.error("message:{}, error:", message, ex);
        throw new RuntimeException(message, ex);
    }

    @Override
    public void onProcess(long uploaded, long total) {
        LOGGER.info("videoId:{},filePath:{}, 上传进度:{},", videoId, filePath, uploaded * 100 / total + "%");
    }
}

调用方法:

public static void main(String[] args) {
        try {
            CloudvUploadHandler cloudvUploadHandler = new CloudvUploadHandler();
            String filePath = "D:\\test.mp4";
            String userId = "xxxxxx";
            String secretKey = "xxxxxxxxxxxxxxxxxxxx";
            CustomUploadObserver uploadObserver = new CustomUploadObserver();
            String videoId = cloudvUploadHandler.upload(filePath, userId, secretKey,  uploadObserver);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

本篇文档内容对您是否有帮助?
有帮助
我要反馈
提交成功!非常感谢您的反馈,我们会继续努力做到更好!