• 阿里云视频点播


    • 准备工作(可参考博主的“对象存储”的准备工作)
    • 找到视频点播并开通
    • 简介
      • 视频点播是集音视频采集、编辑、上传、自动化转码处理、媒体资源管理、分发加速于一体的一站式音视频点播的服务
    • 使用方式
      • 服务端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, "删除视频失败!");
              }
          }
          
  • 相关阅读:
    青少年机器人技术等级考试实际操作试卷(三级)201812 new
    SQL预编译 new
    青少年机器人技术等级考试实际操作试卷(三级)201809 new
    青少年机器人技术等级考试实际操作试卷(三级)201803 new
    SQL基本练习 new
    Asp.Net MVC 自定义一个ActionResult用于AJAX交互
    使用 TeamLab 来协同和管理工作
    使用Chose来美化Select
    在Asp.Net下使用couchbase实现分布式缓存
    如何修改couchbase的RAM
  • 原文地址:https://www.cnblogs.com/aitiknowledge/p/15944638.html
Copyright © 2020-2023  润新知