阿里云视频点播

  • 准备工作(可参考博主的“对象存储”的准备工作)
  • 找到视频点播并开通
  • 简介
    • 视频点播是集音视频采集、编辑、上传、自动化转码处理、媒体资源管理、分发加速于一体的一站式音视频点播的服务
  • 使用方式
    • 服务端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, "删除视频失败!"); } }

__EOF__

本文作者xsha_h
本文链接https://www.cnblogs.com/aitiknowledge/p/15944638.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   xsha_h  阅读(589)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示