1、pom

<dependencies>
    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>aliyun-java-sdk-core</artifactId>
    </dependency>
    <dependency>
        <groupId>com.aliyun.oss</groupId>
        <artifactId>aliyun-sdk-oss</artifactId>
    </dependency>
    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>aliyun-java-sdk-vod</artifactId>
    </dependency>
    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>aliyun-sdk-vod-upload</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
    </dependency>
    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
    </dependency>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
    </dependency>

    <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
    </dependency>
</dependencies>

2、安装非开源jar包

安装SDK
以 1.4.12 版本为例,步骤如下:

1.下载Java示例代码VODUploadDemo-java-1.4.12.zip开发包(包含示例代码和所需jar包), 见 视频上传SDK下载 ;

2.将解压后lib目录下的所有jar文件拷贝至您的项目中;

3.SDK依赖的jar包版本说明

注意:以下列举出部分依赖jar包的版本,您可直接在您的项目中添加maven依赖,也可以将VODUploadDemo-java-1.4.12.zip包中的所有jar包引入您的项目中使用。其中,aliyun-java-vod-upload-1.4.12.jar 还未正式开源,请您直接引入jar包至您的项目中使用。

在本地Maven仓库中安装jar包:
下载视频上传SDK,解压,进入lib目录,执行以下代码

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

3、application.properties

# 服务端口
server.port=8003
# 服务名
spring.application.name=service-vod

# 环境设置:dev、test、prod
spring.profiles.active=dev

#阿里云 vod
#不同的服务器,地址不同
aliyun.vod.file.keyid= your accessKeyId
aliyun.vod.file.keysecret=  your accessKeySecret

# 最大上传单个文件大小:默认1M
spring.servlet.multipart.max-file-size=1024MB
# 最大置总上传的数据大小 :默认10M
spring.servlet.multipart.max-request-size=1024MB

配置读取 秘钥的类

//当项目启动,spring接口,spring加载之后,执行接口一个方法
@Component
public class ConstPropertiesUtils implements InitializingBean {

    @Value("${aliyun.oss.file.keyid}")
    private String keyId;
    @Value("${aliyun.oss.file.keysecret}")
    private String keySecret;
    public static String ACCESS_KEY_ID;
    public static String ACCESS_KEY_SECRET;

    //以上属性初始化完后,会执行此方法
    @Override
    public void afterPropertiesSet() throws Exception {
        ACCESS_KEY_ID = keyId;
        ACCESS_KEY_SECRET = keySecret;

    }
}

1. 初始化

//初始化
public class InitVod {
    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;
    }
}

上传视频

 @Override
    public String getVodId(MultipartFile file) {
        try {
            String fileName = file.getOriginalFilename();//文件原始名字
            //01.mp4(01)
            String title = fileName.substring(0,fileName.lastIndexOf("."));//上传后阿里的名字
            InputStream inputStream =file.getInputStream();
            UploadStreamRequest request = new UploadStreamRequest(ConstPropertiesUtils.ACCESS_KEY_ID, ConstPropertiesUtils.ACCESS_KEY_SECRET, title, fileName, inputStream);
            UploadVideoImpl uploader = new UploadVideoImpl();
            UploadStreamResponse response = uploader.uploadStream(request);
            System.out.print("RequestId=" + response.getRequestId() + "\n");  //请求视频点播服务的请求ID
            if (response.isSuccess()) {
                return response.getVideoId();
            } else { //如果设置回调URL无效,不影响视频上传,可以返回VideoId同时会返回错误码。其他情况上传失败时,VideoId为空,此时需要根据返回错误码分析具体错误原因

            return response.getVideoId();
            }

        } catch (IOException e) {
            e.printStackTrace();
            return "上传失败";
        }

    }

删除视频

 @Override
    public Result deleteVoid(String id) {
        try {
            //初始化
            DefaultAcsClient client = InitVod.initVodClient(ConstPropertiesUtils.ACCESS_KEY_ID, ConstPropertiesUtils.ACCESS_KEY_SECRET);
            DeleteVideoRequest request = new DeleteVideoRequest();
            //支持传入多个视频ID,多个用逗号分隔
            //设置视频id
            request.setVideoIds(id);
            //调用初始化对象删除
            client.getAcsResponse(request);
            return Result.success();
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error();
        }

    }

点播视频

第一种获取视频播放凭证
可以播放加密的视频

**
	 * 获取视频播放凭证
	 * @throws ClientException
	 */
@Test
public void testGetVideoPlayAuth() throws ClientException {

    //初始化客户端、请求对象和相应对象
    DefaultAcsClient client =InitVod.initVodClient(accessKeyId, accessKeySecret);
    GetVideoPlayAuthRequest request = new GetVideoPlayAuthRequest();
    GetVideoPlayAuthResponse response = new GetVideoPlayAuthResponse();

    try {

        //设置请求参数
        request.setVideoId("视频ID");
        //获取请求响应
        response = client.getAcsResponse(request);

        //输出请求结果
        //播放凭证
        System.out.print("PlayAuth = " + response.getPlayAuth() + "\n");
        //VideoMeta信息
        System.out.print("VideoMeta.Title = " + response.getVideoMeta().getTitle() + "\n");
    } catch (Exception e) {
        System.out.print("ErrorMessage = " + e.getLocalizedMessage());
    }

    System.out.print("RequestId = " + response.getRequestId() + "\n");
}

第二种方式只能播放未加密的

/**
	 * 获取视频播放地址
	 * @throws ClientException
	 */
@Test
public void testGetPlayInfo() throws ClientException {

    //初始化客户端、请求对象和相应对象
    DefaultAcsClient client =InitVod.initVodClient(accessKeyId, accessKeySecret);
    GetPlayInfoRequest request = new GetPlayInfoRequest();
    GetPlayInfoResponse response = new GetPlayInfoResponse();

    try {

        //设置请求参数
        //注意:这里只能获取非加密视频的播放地址
        request.setVideoId("视频ID");
        //获取请求响应
        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");

    } catch (Exception e) {
        System.out.print("ErrorMessage = " + e.getLocalizedMessage());
    }

    System.out.print("RequestId = " + response.getRequestId() + "\n");
}

播放代码

//根据视频id获取视频凭证
    @GetMapping("getPlayAuth/{id}")
    public R getPlayAuth(@PathVariable String id) {
        try {
            //创建初始化对象
            DefaultAcsClient client =
                    InitVodCilent.initVodClient(ConstantVodUtils.ACCESS_KEY_ID, ConstantVodUtils.ACCESS_KEY_SECRET);
            //创建获取凭证request和response对象
            GetVideoPlayAuthRequest request = new GetVideoPlayAuthRequest();
            //向request设置视频id
            request.setVideoId(id);
            //调用方法得到凭证
            GetVideoPlayAuthResponse response = client.getAcsResponse(request);
            String playAuth = response.getPlayAuth();
            return R.ok().data("playAuth",playAuth);
        }catch(Exception e) {
            throw new GuliException(20001,"获取凭证失败");
        }
    }

2、集成视频播放器
参考文档:https://help.aliyun.com/document_detail/51991.html
参考 【播放器简单使用说明】一节
引入脚本文件和css文件

<link rel="stylesheet" href="https://g.alicdn.com/de/prismplayer/2.8.1/skins/default/aliplayer-min.css" />
<script charset="utf-8" type="text/javascript" src="https://g.alicdn.com/de/prismplayer/2.8.1/aliplayer-min.js"></script>

初始化视频播放器

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<link rel="stylesheet" href="https://g.alicdn.com/de/prismplayer/2.8.1/skins/default/aliplayer-min.css" />
<script charset="utf-8" type="text/javascript"
    src="https://g.alicdn.com/de/prismplayer/2.8.1/aliplayer-min.js"></script>

<body>
    <div class="prism-player" id="J_prismPlayer"></div>

    <script>
        var player = new Aliplayer({
            id: 'J_prismPlayer',
            width: '100%',//宽度
            autoplay: false,//自动播放
            cover: 'http://liveroom-img.oss-cn-qingdao.aliyuncs.com/logo.png',
   //播放配置(重要配置)
   //播放方式一:支持播放地址播放,此播放优先级最高,此种方式不能播放加密视频
// source: '你的视频播放地址',
//如果播放加密视频,则需设置encryptType=1,非加密视频无需设置此项
            encryptType: '1',
            vid: '视频id',
            playauth: '视频授权码',
       // 以下可选设置
         cover: 'http://guli.shop/photo/banner/1525939573202.jpg', // 封面
         qualitySort: 'asc', // 清晰度排序
         mediaType: 'video', // 返回音频还是视频
         isLive: false, // 直播
         rePlay: false, // 循环播放
         preload: true,
         controlBarVisibility: 'hover', // 控制条的显示方式:鼠标悬停
         useH5Prism: true, // 播放器类型:html5
  

        }, function (player) {
            console.log('播放器创建好了。')
        });
    </script>
</body>

</html>

3、播放地址播放
在Aliplayer的配置参数中添加如下属性

//播放方式一:支持播放地址播放,此播放优先级最高,此种方式不能播放加密视频
source : '你的视频播放地址',

4、播放凭证播放(推荐)
阿里云播放器支持通过播放凭证自动换取播放地址进行播放,接入方式更为简单,且安全性更高。播放凭证默认时效为100秒(最大为3000秒),只能用于获取指定视频的播放地址,不能混用或重复使用。如果凭证过期则无法获取播放地址,需要重新获取凭证。

encryptType:'1',//如果播放加密视频,则需设置encryptType=1,非加密视频无需设置此项
vid : '视频id',
playauth : '视频授权码',

注意:播放凭证有过期时间,默认值:100秒 。取值范围:100~3000。
设置播放凭证的有效期
在获取播放凭证的测试用例中添加如下代码

request.setAuthInfoTimeout(200L);

在线配置参考:https://player.alicdn.com/aliplayer/setting/setting.html

加入播放组件

功能展示 https://player.alicdn.com/aliplayer/presentation/index.html

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐