Bootstrap

阿里云视频点播

目录

1、基本使用

1.1、手动上传视频

1.2、配置转码模板

1.3、获取 视频播放地址 及 web播放器代码

2、服务器 SDK

2.1、安装(引入依赖)

2.2、初始化

2.3、获取视频播放地址

问题:java.lang.NoSuchMethodError: com.google.gson.JsonParser.parseString(Ljava/lang/String;)Lcom/google/gson/JsonElement;

2.4、视频播放凭证

3、上传 SDK

3.1、安装(引入依赖)

3.2、上传视频


1、基本使用

1.1、手动上传视频

媒资库 > 音视频 > 单击 上传音/视频 > 单击 添加音/视频 > 选择文件,设置转码模板及其分类 > 单击 开始上传

若为第一次添加,需要配置存储管理,配置管理 > 媒资管理配置 > 存储管理,若已开通 OSS 服务会自动添加一个存储管理,将其设为默认即可。

1.2、配置转码模板

若没有配置转码模板,默认为不转码

配置管理 > 媒体处理配置 > 转码模板组 > 单击 添加转码模板组 > 选择模板类型 > 设置好后保存即可

这里讲一下 普通转码模板,可以设置视频 清晰度 和 参数,若封装格式为 hls,可以在下面 高级参数 中设置 视频加密(HLS加密方式,默认开启阿里云私有加密,阿里云私有加密暂不支持iOS系统的网页端播放),加密后无法通过 视频播放地址 直接播放,而是要通过视频 ID 获取凭证后播放。

1.3、获取 视频播放地址 及 web播放器代码

媒资库 > 音视频 > 在对应视频行的操作中点击管理,在跳出来的页面即可获取

2、服务器 SDK

2.1、安装(引入依赖)

官方文档:安装

        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.6.0</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-vod</artifactId>
            <version>2.16.11</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.83</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-kms</artifactId>
            <version>2.10.1</version>
        </dependency>

2.2、初始化

官方文档:初始化

public class InitObject {

    /**
     * 初始化 AccessKey
     * @param accessKeyId
     * @param accessKeySecret
     * @return
     * @throws ClientException
     */
    public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException {
        String regionId = "cn-shanghai";  // 点播服务接入地域
        DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
        DefaultAcsClient client = new DefaultAcsClient(profile);
        return client;
    }

}

2.3、获取视频播放地址

官方文档:音视频播放

下面的方法只能用于获取没有加密的视频的播放地址,若获取加密视频的,会报错:Exception in thread "main" com.aliyuncs.exceptions.ClientException: Forbidden.AliyunVoDEncryption : Currently only the AliyunVoDEncryption stream exists, you must use the Aliyun player to play or set the value of ResultType to Multiple.,需要先获取视频播放凭证。

    public static void main(String[] args) throws ClientException {
        // 创建初始化对象
        DefaultAcsClient client = InitObject.initVodClient("accessKeyId", "accessKeySecret");

        // 创建获取视频地址的 request 和 response
        GetPlayInfoRequest request = new GetPlayInfoRequest();
        GetPlayInfoResponse response = new GetPlayInfoResponse();

        // 向request对象设置视频id
        request.setVideoId("videoId");

        // 调用初始化对象的方法获取视频播放地址
        response = client.getAcsResponse(request);
        List<GetPlayInfoResponse.PlayInfo> playInfoList = response.getPlayInfoList();
        //播放地址
        for (GetPlayInfoResponse.PlayInfo playInfo : playInfoList) {
            System.out.print("PlayInfo.PlayURL = " + playInfo.getPlayURL() + "\n");
        }
        //Base信息
        System.out.print("VideoBase.Title = " + response.getVideoBase().getTitle() + "\n");

    }

问题:java.lang.NoSuchMethodError: com.google.gson.JsonParser.parseString(Ljava/lang/String;)Lcom/google/gson/JsonElement;

解决方法:改变 gson 的版本,这里改到 2.8.6 版本即可运行

2.4、视频播放凭证

官方文档:音视频播放

    /**
     * 获取视频凭证
     * @throws ClientException
     */
    @Test
    public void testGetPlayAuth() throws ClientException {
        // 根据视频id获取播放凭证
        // 创建初始化对象
        DefaultAcsClient client = InitObject.initVodClient("accessKeyId", "accessKeySecret");

        // 创建获取视频凭证的 request 和 response
        GetVideoPlayAuthRequest request = new GetVideoPlayAuthRequest();
        GetVideoPlayAuthResponse response = new GetVideoPlayAuthResponse();

        // 向request对象设置视频id
        request.setVideoId("videoId");

        // 调用初始化对象的方法获取视频播放凭证
        response = client.getAcsResponse(request);
        //播放凭证
        System.out.print("PlayAuth = " + response.getPlayAuth() + "\n");
        //VideoMeta信息
        System.out.print("VideoMeta.Title = " + response.getVideoMeta().getTitle() + "\n");
    }

3、上传 SDK

官方文档:Java上传SDK

3.1、安装(引入依赖)

先引入不需要手动下载的依赖,这里我修改了一下 fastjson 的版本

        <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.16.11</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.83</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>

然后引入要下载的依赖。首先要下载 Java 上传 SDK,下载地址:SDK简介与下载,下载后解压,进入解压后的文件夹,进入 VODUploadDemo-java-1.4.15/lib 目录,打开 cmd,输入下面指令将 aliyun-java-vod-upload-1.4.15.jar 安装到本地 Maven 仓库

mvn install:install-file -DgroupId=com.aliyun -DartifactId=aliyun-sdk-vod-upload -Dversion=1.4.15 -Dpackaging=jar -Dfile=aliyun-java-vod-upload-1.4.15.jar

说明:

-DgroupId 和 -DartifactId 是坐标

-Dversion 是版本

-Dpackaging 是文件类型,jar 就是 jar 包

-Dfile 是文件名

然后引入该依赖即可

        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-sdk-vod-upload</artifactId>
            <version>1.4.15</version>
        </dependency>

3.2、上传视频

官方文档:Java上传SDK

    /**
     * 本地上传视频
     */
    @Test
    public void testUploadVideo() {
        String accessKeyId = "";
        String accessKeySecret = "";
        String title = "本地上传1";     // 上传的文件在阿里云显示的名字
        String fileName = "C:\\Users\\zhang\\Desktop\\2\\jump.mp4";          // 本地文件路径和名称

        UploadVideoRequest request = new UploadVideoRequest(accessKeyId, accessKeySecret, title, fileName);
        /* 可指定分片上传时每个分片的大小,默认为2M字节 */
        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");
        }
    }

;