阿里云视频点播

  • 准备工作(可参考博主的“对象存储”的准备工作)
  • 找到视频点播并开通
  • 简介
    • 视频点播是集音视频采集、编辑、上传、自动化转码处理、媒体资源管理、分发加速于一体的一站式音视频点播的服务
  • 使用方式
    • 服务端API:阿里云提供固定的地址,向地址传递相关的参数,就可以实现相关的功能,可查看官方文档
    • 服务端SDK:sdk对api的方式进行封装,调用阿里云提供的类或者接口里面的方法实现相关的功能,接下来,就实现一些视频的基本功能
  • 首先添加Maven仓库,在setting.xml中添加
    <repositories>
        <repository>
            <id>sonatype-nexus-staging</id>
            <name>Sonatype Nexus Staging</name>
            <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>
    
  • 添加依赖,安装SDK,这里就是在pom.xml中添加了
    <dependencies>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.5.1</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.62</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-kms</artifactId>
            <version>2.10.1</version>
        </dependency>
    </dependencies>
    
  • 在项目的一个目录中创建一个初始化类,初始化操作
    package com.xsha.vodservice;
    
    import com.aliyuncs.DefaultAcsClient;
    import com.aliyuncs.exceptions.ClientException;
    import com.aliyuncs.profile.DefaultProfile;
    
    public class InitObject {
        //填入AccessKey信息
        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;
        }
    }
    
  • 功能点开发
    • 根据视频ID获取视频播放地址(所以不推荐使用)
      • 根据视频ID获取地址,加密不能播放。在其他地方(类)定义一个方法,按照下面的步骤来即可,这里暂时使用测试的方法执行
        @Test
        public void run() throws Exception {
            // 根据视频ID获取视频播放地址
            // 1.创建初始化对象
            DefaultAcsClient client = InitObject.initVodClient("your accessId", "your accessSecret");
        
            // 2.创建获取视频地址request和response
            GetPlayInfoRequest request = new GetPlayInfoRequest();
            GetPlayInfoResponse response = new GetPlayInfoResponse();
        
            // 3.向request对象里面设置视频id
            request.setVideoId("6912a5ffbaf54fe381f61d4969a24daa");
        
            // 4.调用初始化对象里面的方法,传递request获取数据
            response = client.getAcsResponse(request);
        
            // 播放地址
            List<GetPlayInfoResponse.PlayInfo> playInfoList = response.getPlayInfoList();
            for (GetPlayInfoResponse.PlayInfo playInfo : playInfoList) {
                System.out.println("PlayInfo.PlayURL = "+playInfo.getPlayURL()+"\n");
            }
            // 获取基础信息(标题)
            System.out.println("VideoBase.Title = "+response.getVideoBase().getTitle()+"\n");
        }
        
    • 根据视频ID获取视频播放凭证(推荐使用)
      // 根据视频ID获取视频播放凭证
      @Test
      public void getPlayAuth() throws Exception {
      
          // 1.创建初始化对象
          DefaultAcsClient client = InitObject.initVodClient("your accessId", "your accessSecret");
      
          // 2.创建获取视频地址request和response
          GetVideoPlayAuthRequest request = new GetVideoPlayAuthRequest();
          GetVideoPlayAuthResponse response = new GetVideoPlayAuthResponse();
      
          // 3.向request对象里面设置视频id
          request.setVideoId("6912a5ffbaf54fe381f61d4969a24daa");
      
          // 4.调用初始化对象里面的方法,传递request获取数据
          response = client.getAcsResponse(request);
      
          //播放凭证
          System.out.print("PlayAuth = " + response.getPlayAuth() + "\n");
          //VideoMeta信息
          System.out.print("VideoMeta.Title = " + response.getVideoMeta().getTitle() + "\n");
      }
      
    • 视频功能
      • 参考示例:https://help.aliyun.com/document_detail/53406.html
      • 注意点:有一个依赖包是下载不来的,我们需要手动下载并解压(其他包也是一样的)
        • 地址:https://help.aliyun.com/document_detail/51992.htm?spm=a2c4g.11186623.0.0.cd125b78wCpMw2#topic-1959787-table-jql-3ej-tg4
        • 找到所属语言的Demo:V1.4.14 SDK及Demo源码
        • 下载之后进行解压,在解压的目录中找到lib目录,找到你下载不来的jar包:aliyun-java-vod-upload.jar
        • 复制该jar包到你的maven的lib目录下
        • 再到开发工具中File->Project Structure->Modules->dependencies-> + ->JARs or directories,找到你添加maven下lib目录下的jar包,Apply->OK
        • 在开发工具中刷新下maven,最后就可以了(这时可以不用再写upload的依赖了)
      • 上传测试(本地文件传输,注意点不能漏)
        // 本地上传文件
        @Test
        public void uploadLocalFile() {
            // 第一二个参数是accessId和accessSecret,第三个参数是上传之后文件的名字,第四个参数是文件路径名称
            String accessId = "your accessId";
            String accessSecret = "your accessSecret";
            String title = "first video";
            String fileName = "绝对路径\\6 - What If I Want to Move Faster.mp4";
            UploadVideoRequest request = new UploadVideoRequest(accessId, accessSecret, 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");
            }
        }
        
      • 可采用流式文件传输(可参考博主的“对象存储”中提到的流式存储)
        @Override
        public String uploadAliyunVideo(MultipartFile file) throws IOException {
            String fileName = file.getOriginalFilename();
            String title = fileName.substring(0, fileName.lastIndexOf("."));
            InputStream inputStream = file.getInputStream();
            UploadStreamRequest request = new UploadStreamRequest(ConstantVodUtils.ACCESS_KEY_ID, ConstantVodUtils.ACCESS_KEY_SECRET, title, fileName, inputStream);
            UploadVideoImpl uploader = new UploadVideoImpl();
            UploadStreamResponse response = uploader.uploadStream(request);
            String videoId = null;
        
            if(response.isSuccess()) {
                videoId = response.getVideoId();
            } else {
                videoId = response.getVideoId();
            }
            return videoId;
        }
        
        • 此时上传文件时,会报文件大小上传错误,所以在配置文件中配置文件上传大小
          # 最大上传单个文件大小:默认1MB
          spring.servlet.multipart.max-file-size=1024MB
          # 最大上传多个文件大小:默认10MB
          spring.servlet.multipart.max-request-size=1024MB
          
      • 删除测试
        @Override
        public void deleteAliyunVideo(String videoId) throws MyException {
            try {
                // 初始化对象
                DefaultAcsClient client = InitObject.initVodClient(ConstantVodUtils.ACCESS_KEY_ID, ConstantVodUtils.ACCESS_KEY_SECRET);
                // 创建删除视频的request对象
                DeleteVideoRequest request = new DeleteVideoRequest();
                // 向request设置视频的id,也可以是"id1, id2,id3, ..."删除多个
                request.setVideoIds(videoId);
                // 调用初始化对象的方法实现删除
                client.getAcsResponse(request);
            }catch (Exception e){
                e.printStackTrace();
                throw new MyException(20001, "删除视频失败!");
            }
        }
        
posted @ 2022-03-01 08:00  xsha_h  阅读(572)  评论(2编辑  收藏  举报