阿里云视频点播上传视频,教程和问题解决:一直是上传中,并且代码中没有明显的报错信息, 只打印出 ErrorCode=null ErrorMessage=sun/misc/BASE64Ecoder

下面是阿里云视频点播的视频上传教程,以及记录我遇到的问题是如何解决的。

阿里云视频点播的时候,我遇到了很难的一个bug,我上传的视频本地代码瞬间执行完成,没有明显报错信息,只有代码里面,可以通过response 打印出了 ErrorCode=null ErrorMessage=sun/misc/BASE64Ecoder 这是第一个表面的现象。

然后是第二个表面现象:阿里云官网的视频状态也一直是上传中。

我查了很多资料,说是必须是1.8的jdk,或者是设置IDE的jre,但是都不能解决根本,唯一的方法就是换版本,大致原因是因为目前的依赖版本中使用到了那个BASE64的转码类,但是这个类不能用。

解决办法,首先在工程pom文件中导入如下依赖:

 <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>aliyun-java-sdk-core</artifactId>
        <version>4.5.1</version>
    </dependency>
    <dependency>
        <groupId>com.aliyun.oss</groupId>
        <artifactId>aliyun-sdk-oss</artifactId>
        <version>3.10.2</version>
    </dependency>
     <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>aliyun-java-sdk-vod</artifactId>
        <version>2.15.11</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.28</version>
    </dependency>
    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20170516</version>
    </dependency>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.2</version>
    </dependency>

版本一定要和我一样。
然后还有一个问题,就是最重要的一个jar包,阿里目前并没有开源,要自己想办法弄到工程里面去。你可以直接导入到现有的工程中,如lib包中,但是我下面展示如何装到本地的maven仓库中,这样你所有的工程都可以使用。

首先你要确定你的maven是否可以通过命令行执行相关命令,使用【mvn --version】命令进行测试,可以打印出版本信息就行,不能的话,自己百度一下如何把maven的命令设置到环境变量中。

然后就是正题,在 【aliyun-java-vod-upload-1.4.13.jar】这个文件所在的文件夹打开DOS命令窗口,执行 【mvn install:install-file -DgroupId=com.aliyun -DartifactId=aliyun-sdk-vod-upload -Dversion=1.4.13 -Dpackaging=jar -Dfile=aliyun-java-vod-upload-1.4.13.jar】即可完成安装。

至于这个文件,我下面教你怎么弄到手,进入 阿里云登录上,然后进入【https://help.aliyun.com/document_detail/51992.html?spm=a2c4g.11186623.2.6.10c95186fbfSe3】这个页面。点击下方图片红框处即可下载一个压缩包,目前应该是1.4.13版本,也最好是这个版本。然后压缩包的lib文件夹下有一个名字一样的jar包,只要它自己一个,拿出来就行了。
在这里插入图片描述

附上上传视频的Java代码:
第一种:本地上传方式:

package com.dkf.test;

import com.aliyun.vod.upload.impl.UploadVideoImpl;
import com.aliyun.vod.upload.req.UploadVideoRequest;
import com.aliyun.vod.upload.resp.UploadVideoResponse;
import org.junit.Test;
import org.yaml.snakeyaml.external.biz.base64Coder.Base64Coder;

public class TestUploadVideo {
    
    
    //这是做阿里云OSS时的两个密钥数据
    private String keyid="";
    private String keysecret="";

    @Test
    public void test() {
    
    
        //3.音视频上传-本地文件上传
        //视频标题(必选)
        String title = "Video";
        //本地文件上传和文件流上传时,文件名称为上传文件绝对路径,如:/User/sample/文件名称.mp4 (必选)
        //文件名必须包含扩展名
        String fileName = "G:/test.mp4";

        //本地文件上传
        UploadVideoRequest request = new UploadVideoRequest(keyid, keysecret, title, fileName);
        /* 可指定分片上传时每个分片的大小,默认为1M字节 */
        request.setPartSize(2 * 1024 * 1024L);
        /* 可指定分片上传时的并发线程数,默认为1,(注:该配置会占用服务器CPU资源,需根据服务器情况指定)*/
        request.setTaskNum(1);

        UploadVideoImpl uploader = new UploadVideoImpl();
        UploadVideoResponse response = uploader.uploadVideo(request);

        System.out.print("RequestId=" + response.getRequestId() + "\n");  //请求视频点播服务的请求ID
        if (response.isSuccess()) {
    
    
            System.out.print("VideoId=" + response.getVideoId() + "\n");
        } else {
    
    
            /* 如果设置回调URL无效,不影响视频上传,可以返回VideoId同时会返回错误码。其他情况上传失败时,VideoId为空,此时需要根据返回错误码分析具体错误原因 */
            System.out.print("VideoId=" + response.getVideoId() + "\n");
            System.out.print("ErrorCode=" + response.getCode() + "\n");
            System.out.print("ErrorMessage=" + response.getMessage() + "\n");
        }
    }
}

关于这个密钥怎么弄我就不说了,很简单,没什么悬疑。Ok有什么问题,下载不下来等,可以加qq1919213538联系我,可以下载的东西一定免费分享。

第二种:流式上传方式,即页面上传视频文件到阿里云:

//使用流式上传接口
    public String uploadVideo(MultipartFile file) {
    
    
        UploadStreamRequest request = null;
        try{
    
    
            /**
             * title : 上传之后显示的名称
             * fileName: 上传文件原始名称
             * inputStream : 上传文件输入流
             */
            String fileName = file.getOriginalFilename();
            //title不让它带后缀名,个人建议
            String title = fileName.substring(0, fileName.lastIndexOf("."));
            InputStream inputStream = file.getInputStream();
            request = new UploadStreamRequest(ConstantVodUtils.KEY_ID, ConstantVodUtils.KEY_SECRET, title, fileName, inputStream);
        }catch (Exception e){
    
    
            e.printStackTrace();
        }
        //一般我们都需要保存上传视频的ID
        String videoId = null;
        //创建实现上传的对象
        UploadVideo uploader = new UploadVideoImpl();
        //上传动作,到这一步,已经上传成功
        UploadStreamResponse response = uploader.uploadStream(request);
        //下面是打印信息,用于测试,并且保存下videoId,
        //以便后面通过videoId获取到视频的播放地址或播放凭证
        System.out.println("RequestId=" + response.getRequestId());
        if(response.isSuccess()){
    
    
            videoId = response.getVideoId();
            System.out.println("VideoId=" + response.getVideoId());
        }else{
    
    
            System.out.println("videoId=" + response.getVideoId());
            System.out.println("ErrorCode=" + response.getCode());
            System.out.println("ErrorMessage=" + response.getMessage());
        }
        return videoId;
    }

猜你喜欢

转载自blog.csdn.net/qq_42458992/article/details/113527778