使用阿里云的视频点播服务

在这里插入图片描述
说明:是可以播放不加密的视频而想要播放加密的视频首先先要获取到视频播放的凭证

  1. 官方文档:https://help.aliyun.com/document_detail/53406.htm?spm=a2c4g.52200.0.0.37b42ca3KYz8Vw#task-1995280

1.导入依赖


  <dependency>

    <groupId>com.aliyun</groupId>

    <artifactId>aliyun-java-sdk-core</artifactId>

    <version>4.3.3</version>

  </dependency>

  <dependency>

    <groupId>com.aliyun</groupId>

    <artifactId>aliyun-java-sdk-vod</artifactId>

    <version>2.15.5</version>
  </dependency>
  <dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.2</version>
  </dependency>

1.1获取普通视频播放地址

InitObject.class

public class InitObject {
    
    
    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;
    }

}

TestVod.class

public class TestVod {
    
    
    public static void main(String[] args) throws Exception{
    
    
        // 1) 创建初始化对象
        DefaultAcsClient client = InitObject.initVodClient("accessKeyId", "accessKeySecret");
        // 2) 创建获取视频地址request和response
        GetPlayInfoRequest request = new GetPlayInfoRequest();
        GetPlayInfoResponse response = new GetPlayInfoResponse();
        // 3) 向request对象里面设置视频id
        request.setVideoId("a5f094f0ecd571edbfd06732b68e0102");
        // 4) 调用初始化对象里面的方法,传递request,获取数据
        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");

    }
}

1.2获取视频的播放凭证

   //1) 创建初始化对象
        DefaultAcsClient client = InitObject.initVodClient("accessKeyId","accessKeySecret");
        // 2) 创建获取视频地址request和response
        GetVideoPlayAuthRequest request = new GetVideoPlayAuthRequest();
        GetVideoPlayAuthResponse response =new GetVideoPlayAuthResponse();
        // 3) 向request对象里面设置视频id
        request.setVideoId("a5f094f0ecd571edbfd06732b68e0102");
        // 4) 调用初始化对象里面的方法,传递request,获取数据
        response = client.getAcsResponse(request);
        System.out.println("PlayAuth" + response.getPlayAuth());

1.3本地视频上传

1.先导入依赖aliyun-sdk-vod-upload依赖因为不开源所以需要我们下载

https://help.aliyun.com/document_detail/106648.htm?spm=a2c4g.53406.0.0.e9b14150Crl5hN#multiTask2011(下载11版本)

然后使用maven加载到本地仓库

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

然后pom中加入对应的坐标

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

本地文件上传代码

        String accessKeyId = "xxxx";
        String accessKeySecret = "xxxxxxx";
        String title = "mmm"; // 上传之后文件名称
        String fileName = "C:\\Users\\MTL\\Desktop\\WeChat_20230507204932.mp4"; // 本地文件路径和名称

        // 3 上传视频
        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);

        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");
        }

流文件上传代码

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

    @Value("${aliyun.vod.file.keyid}")
    private String keyId;
    @Value("${aliyun.vod.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;
    }
}

service中操作:

 public String uploadAlyVideo(MultipartFile file) {
    
    
        try {
    
    
            //fileName:上传文件原始名称
            String fileName = file.getOriginalFilename();
            //title:上传之后显示名称
            String title = fileName.substring(0, fileName.lastIndexOf("."));
            //inputStream:上传文件输入流
            InputStream inputStream = file.getInputStream();
            UploadStreamRequest request = new UploadStreamRequest(ConstantPropertiesUtil.ACCESS_KEY_ID,ConstantPropertiesUtil.ACCESS_KEY_SECRET, title, fileName, inputStream);

            UploadVideoImpl uploader = new UploadVideoImpl();
            UploadStreamResponse response = uploader.uploadStream(request);

            String videoId = response.getVideoId();
            return videoId;
        }catch(Exception e) {
    
    
            e.printStackTrace();
            return null;
        }
    }

官方说明

public class UploadVideoDemo {
    
    
    //账号AK信息请填写(必选)
    private static final String accessKeyId = "<Your accessKeyId>";
    //账号AK信息请填写(必选)
    private static final String accessKeySecret = "<Your accessKeySecret>";
public static void main(String[] args) {
    
    
    // 视频文件上传
    // 视频标题(必选)
    String title = "测试标题";
    // 1.本地文件上传和文件流上传时,文件名称为上传文件绝对路径,如:/User/sample/文件名称.mp4 (必选)
    // 2.网络流上传时,文件名称为源文件名,如文件名称.mp4(必选)。
    // 3.流式上传时,文件名称为源文件名,如文件名称.mp4(必选)。
    // 任何上传方式文件名必须包含扩展名
    String fileName = "/Users/test/video/test.mp4";
    // 本地文件上传
    testUploadVideo(accessKeyId, accessKeySecret, title, fileName);

    // 待上传视频的网络流地址
    String url = "http://test.aliyun.com/video/test.mp4";

    // 2.网络流上传
    // 文件扩展名,当url中不包含扩展名时,需要设置该参数
    String fileExtension = "mp4";
    testUploadURLStream(accessKeyId, accessKeySecret, title, url, fileExtension);

    // 3.文件流上传
    testUploadFileStream(accessKeyId, accessKeySecret, title, fileName);

    // 4.流式上传,如文件流和网络流
    InputStream inputStream = null;
    // 4.1 文件流
    try {
    
    
        inputStream = new FileInputStream(fileName);
    } catch (FileNotFoundException e) {
    
    
        e.printStackTrace();
    }
    // 4.2 网络流
    try {
    
    
        inputStream = new URL(url).openStream();
    } catch (IOException e) {
    
    
        e.printStackTrace();
    }
    testUploadStream(accessKeyId, accessKeySecret, title, fileName, inputStream);
}

/**
 * 本地文件上传接口
 *
 * @param accessKeyId
 * @param accessKeySecret
 * @param title
 * @param fileName
 */
private static void testUploadVideo(String accessKeyId, String accessKeySecret, String title, String fileName) {
    
    
    UploadVideoRequest request = new UploadVideoRequest(accessKeyId, accessKeySecret, title, fileName);
    /* 可指定分片上传时每个分片的大小,默认为2M字节 */
    request.setPartSize(2 * 1024 * 1024L);
    /* 可指定分片上传时的并发线程数,默认为1,(注:该配置会占用服务器CPU资源,需根据服务器情况指定)*/
    request.setTaskNum(1);
    /* 是否开启断点续传, 默认断点续传功能关闭。当网络不稳定或者程序崩溃时,再次发起相同上传请求,可以继续未完成的上传任务,适用于超时3000秒仍不能上传完成的大文件。
    注意:断点续传开启后,会在上传过程中将上传位置写入本地磁盘文件,影响文件上传速度,请您根据实际情况选择是否开启*/
    //request.setEnableCheckpoint(false);
    /* OSS慢请求日志打印超时时间,是指每个分片上传时间超过该阈值时会打印debug日志,如果想屏蔽此日志,请调整该阈值。单位:毫秒,默认为300000毫秒*/
    //request.setSlowRequestsThreshold(300000L);
    /* 可指定每个分片慢请求时打印日志的时间阈值,默认为300s*/
    //request.setSlowRequestsThreshold(300000L);
    /* 是否显示水印(可选),指定模板组ID时,根据模板组配置确定是否显示水印*/
    //request.setIsShowWaterMark(true);
    /* 自定义消息回调设置及上传加速设置(可选), Extend为自定义扩展设置,MessageCallback为消息回调设置,AccelerateConfig为上传加速设置(上传加速功能需要先申请开通后才能使用)*/
    //request.setUserData("{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackType\":\"http\",\"CallbackURL\":\"http://example.aliyundoc.com\"},\"AccelerateConfig\":{\"Type\":\"oss\",\"Domain\":\"****Bucket.oss-accelerate.aliyuncs.com\"}}");
    /* 视频分类ID(可选) */
    //request.setCateId(0);
    /* 视频标签,多个用逗号分隔(可选) */
    //request.setTags("标签1,标签2");
    /* 视频描述(可选)*/
    //request.setDescription("视频描述");
    /* 封面图片(可选)*/
    //request.setCoverURL("http://cover.example.com/image_01.jpg");
    /* 模板组ID(可选)*/
    //request.setTemplateGroupId("8c4792cbc8694e7084fd5330e5****");
    /* 工作流ID(可选)*/
    //request.setWorkflowId("d4430d07361f0*be1339577859b0****");
    /* 存储区域(可选)*/
    //request.setStorageLocation("in-201703232118266-5sejd****.oss-cn-shanghai.aliyuncs.com");
    /* 开启默认上传进度回调 */
    //request.setPrintProgress(false);
    /* 设置自定义上传进度回调(必须继承 VoDProgressListener)*/
    /*默认关闭。如果开启了这个功能,上传过程中服务端会在日志中返回上传详情。如果不需要接收此消息,需关闭此功能*/
    //request.setProgressListener(new PutObjectProgressListener());
    /* 设置您实现的生成STS信息的接口实现类*/
    // request.setVoDRefreshSTSTokenListener(new RefreshSTSTokenImpl());
    /* 设置应用ID*/
    //request.setAppId("app-100****");
    /* 点播服务接入点 */
    //request.setApiRegionId("cn-shanghai");
    /* ECS部署区域*/
    // request.setEcsRegionId("cn-shanghai");
    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");
    }
}

/**
 * URL网络流上传。支持断点续传,最大支持48.8TB的单个文件。
 * 该上传方式需要先将网络文件下载到本地磁盘,再进行上传,所以要保证本地磁盘有充足的空间。
 * 当您设置的URL中不包括文件扩展名时,需要单独设置fileExtension,表示文件扩展名。
 * @param accessKeyId
 * @param accessKeySecret
 * @param title
 * @param fileName
 * @param url
 */
private static void testUploadURLStream(String accessKeyId, String accessKeySecret, String title, String url, String fileExtension) {
    
    
    UploadURLStreamRequest request = new UploadURLStreamRequest(accessKeyId, accessKeySecret, title, url);

    /* 文件扩展名*/
    request.setFileExtension(fileExtension);
    /* 网络文件下载连接超时,单位毫秒,0-表示不限制*/
    request.setDownloadConnectTimeout(1000);
    /* 网络文件下载读取超时,单位毫秒,0-表示不限制*/
    request.setDownloadReadTimeout(0);
    /* 网络文件下载后保存的本地目录*/
    request.setLocalDownloadFilePath("/Users/download");
    /* 是否显示水印(可选),指定模板组ID时,根据模板组配置确定是否显示水印*/
    //request.setShowWaterMark(true);
    /* 自定义消息回调设置及上传加速设置(可选),Extend为自定义扩展设置,MessageCallback为消息回调设置,AccelerateConfig为上传加速设置(上传加速功能需要先申请开通后才能使用) */
    //request.setUserData("{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackType\":\"http\",\"CallbackURL\":\"http://example.aliyundoc.com\"},\"AccelerateConfig\":{\"Type\":\"oss\",\"Domain\":\"****Bucket.oss-accelerate.aliyuncs.com\"}}");
    /* 视频分类ID(可选) */
    //request.setCateId(0);
    /* 视频标签,多个用逗号分隔(可选) */
    //request.setTags("标签1,标签2");
    /* 视频描述(可选) */
    //request.setDescription("视频描述");
    /* 封面图片(可选)*/
    //request.setCoverURL("http://cover.example.com/image_01.jpg");
    /* 模板组ID(可选)*/
    //request.setTemplateGroupId("8c4792cbc8694e7084fd5330e56****");
    /* 工作流ID(可选)*/
    //request.setWorkflowId("d4430d07361f0*be1339577859b0****");
    /* 存储区域(可选)*/
    //request.setStorageLocation("in-201703232118266-5sejd****.oss-cn-shanghai.aliyuncs.com");
    /* 开启默认上传进度回调 */
    //request.setPrintProgress(true);
    /* 设置自定义上传进度回调 (必须继承 VoDProgressListener)*/
    /*默认关闭。如果开启了这个功能,上传过程中服务端会在日志中返回上传详情。如果不需要接收此消息,需关闭此功能*/
    //request.setProgressListener(new PutObjectProgressListener());
    /* 设置应用ID*/
    //request.setAppId("app-100****");
    /* 点播服务接入点 */
    //request.setApiRegionId("cn-shanghai");
    /* ECS部署区域*/
    // request.setEcsRegionId("cn-shanghai");
    UploadVideoImpl uploader = new UploadVideoImpl();
    UploadURLStreamResponse response = uploader.uploadURLStream(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");
    }
}

/**
 * 文件流上传接口
 *
 * @param accessKeyId
 * @param accessKeySecret
 * @param title
 * @param fileName
 */
private static void testUploadFileStream(String accessKeyId, String accessKeySecret, String title, String fileName) {
    
    
    UploadFileStreamRequest request = new UploadFileStreamRequest(accessKeyId, accessKeySecret, title, fileName);
    /* 是否使用默认水印(可选),指定模板组ID时,根据模板组配置确定是否使用默认水印*/
    //request.setShowWaterMark(true);
    /* 自定义消息回调设置及上传加速设置(可选),Extend为自定义扩展设置,MessageCallback为消息回调设置,AccelerateConfig为上传加速设置(上传加速功能需要先申请开通后才能使用)*/
    //request.setUserData("{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackType\":\"http\",\"CallbackURL\":\"http://example.aliyundoc.com\"},\"AccelerateConfig\":{\"Type\":\"oss\",\"Domain\":\"****Bucket.oss-accelerate.aliyuncs.com\"}}");
    /* 视频分类ID(可选)*/
    //request.setCateId(0);
    /* 视频标签,多个用逗号分隔(可选) */
    //request.setTags("标签1,标签2");
    /* 视频描述(可选)*/
    //request.setDescription("视频描述");
    /* 封面图片(可选)*/
    //request.setCoverURL("http://cover.example.com/image_01.jpg");
    /* 模板组ID(可选)*/
    //request.setTemplateGroupId("8c4792cbc8694e7084fd5330e56****");
    /* 工作流ID(可选)*/
    //request.setWorkflowId("d4430d07361f0*be1339577859b0****");
    /* 存储区域(可选)*/
    //request.setStorageLocation("in-201703232118266-5sejd****.oss-cn-shanghai.aliyuncs.com");
    /* 开启默认上传进度回调 */
    //request.setPrintProgress(true);
    /* 设置自定义上传进度回调(必须继承 VoDProgressListener)*/
    /*默认关闭。如果开启了这个功能,上传过程中服务端会在日志中返回上传详情。如果不需要接收此消息,需关闭此功能*/
    //request.setProgressListener(new PutObjectProgressListener());
    /* 设置应用ID*/
    //request.setAppId("app-100****");
    /* 点播服务接入点 */
    //request.setApiRegionId("cn-shanghai");
    /* ECS部署区域*/
    // request.setEcsRegionId("cn-shanghai");
    UploadVideoImpl uploader = new UploadVideoImpl();
    UploadFileStreamResponse response = uploader.uploadFileStream(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");
    }
}

/**
 * 流式上传接口
 *
 * @param accessKeyId
 * @param accessKeySecret
 * @param title
 * @param fileName
 * @param inputStream
 */
private static void testUploadStream(String accessKeyId, String accessKeySecret, String title, String fileName, InputStream inputStream) {
    
    
    UploadStreamRequest request = new UploadStreamRequest(accessKeyId, accessKeySecret, title, fileName, inputStream);
     /* 是否使用默认水印(可选),指定模板组ID时,根据模板组配置确定是否使用默认水印*/
    //request.setShowWaterMark(true);
    /* 自定义消息回调设置及上传加速设置(可选), Extend为自定义扩展设置,MessageCallback为消息回调设置,AccelerateConfig为上传加速设置(上传加速功能需要先申请开通后才能使用)*/
    //request.setUserData("{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackType\":\"http\",\"CallbackURL\":\"http://example.aliyundoc.com\"},\"AccelerateConfig\":{\"Type\":\"oss\",\"Domain\":\"****Bucket.oss-accelerate.aliyuncs.com\"}}");
    /* 视频分类ID(可选) */
    //request.setCateId(0);
    /* 视频标签,多个用逗号分隔(可选) */
    //request.setTags("标签1,标签2");
    /* 视频描述(可选)*/
    //request.setDescription("视频描述");
    /* 封面图片(可选)*/
    //request.setCoverURL("http://cover.example.com/image_01.jpg");
    /* 模板组ID(可选)*/
    //request.setTemplateGroupId("8c4792cbc8694e7084fd5330e56****");
    /* 工作流ID(可选)*/
    //request.setWorkflowId("d4430d07361f0*be1339577859b0****");
    /* 存储区域(可选)*/
    //request.setStorageLocation("in-201703232118266-5sejd****.oss-cn-shanghai.aliyuncs.com");
    /* 开启默认上传进度回调 */
    // request.setPrintProgress(true);
    /* 设置自定义上传进度回调(必须继承 VoDProgressListener) */
    /*默认关闭。如果开启了这个功能,上传过程中服务端会在日志中返回上传详情。如果不需要接收此消息,需关闭此功能*/
    // request.setProgressListener(new PutObjectProgressListener());
     /* 设置应用ID*/
    //request.setAppId("app-100****");
    /* 点播服务接入点 */
    //request.setApiRegionId("cn-shanghai");
    /* ECS部署区域*/
    // request.setEcsRegionId("cn-shanghai");
    UploadVideoImpl uploader = new UploadVideoImpl();
    UploadStreamResponse response = uploader.uploadStream(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");
    }
  }
}

猜你喜欢

转载自blog.csdn.net/weixin_46266624/article/details/130547746