阿里云视频点播功能java应用中简单集成

阿里云视频点播功能java应用中简单集成

开通
阿里云官网搜索 “视频点播” ,默认计费方式-按量积分,具体计费标准

集成
引入依赖

  <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>

1、上传
这里上传功能本人是根据视频id获取播放url ,视频id下图。

在这里插入图片描述
以下为根据视频id获取对应播放url 入库

 /**
     * 根据mediaId 获取url
     *
     * @param reqionId  
     * @param accessKeyId    
     * @param accessKeyIdSecret   
     * @param videoId  
     * @return
     */
    public static String getPlayURL(String reqionId, String accessKeyId, String accessKeyIdSecret, String videoId) {
        // 创建SubmitMediaInfoJob实例并初始化
        DefaultProfile profile = DefaultProfile.getProfile(
                reqionId,                // // 点播服务所在的地域ID,中国大陆地域请填cn-shanghai
                accessKeyId,        // 您的AccessKey ID
                accessKeyIdSecret);    // 您的AccessKey Secret
        IAcsClient client = new DefaultAcsClient(profile);
        GetPlayInfoRequest request = new GetPlayInfoRequest();
        // 视频ID。
        request.setVideoId(videoId);

        try {
            GetPlayInfoResponse response = client.getAcsResponse(request);
            System.out.println(new Gson().toJson(response));
            String playUrl = "";
            for (GetPlayInfoResponse.PlayInfo playInfo : response.getPlayInfoList()) {
                // 播放地址
                playUrl = playInfo.getPlayURL();
            }

            return playUrl;
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }

        return null;
    }

2、剪辑
由于需求要求要有未购买之前试看功能, 增加剪辑
剪辑需要对视频客户端进行初始化(音频/视频通用)

 /**
     * 初始化客户端(视频剪辑用)
     *
     * @param accessKeyId
     * @param accessKeySecret
     * @return
     * @throws ClientException
     */
    public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException {
        String regionId = "cn-shanghai";  // 点播服务接入区域 一般为cn-shanghai 后续若要修改再行扩展
        DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
        DefaultAcsClient client = new DefaultAcsClient(profile);
        return client;
    }

开始剪辑, 此处由于没有特殊需求,从0秒开始剪辑

  /**
     * 视频剪辑
     *
     * @param accessKeyId  您的AccessKey ID
     * @param accessKeySecret  您的AccessKey Secret
     * @param mediaId   视频id
     * @param limit    剪辑时长  单位:秒  
     * @return
     */
    public String videoCut(String accessKeyId, String accessKeySecret, String mediaId, Long limit) {

        DefaultAcsClient client = null;
        try {
            client = AliVodUtils.initVodClient(accessKeyId, accessKeySecret);
        } catch (ClientException e) {
            throw new RuntimeException("视频客户端初始化失败,请检查您的配置");
        }

        ProduceEditingProjectVideoRequest request = new ProduceEditingProjectVideoRequest();
        // Build Editing Project Timeline
        request.setTimeline(AliVodUtils.buildTimeline(mediaId, "Video", 0f, Float.parseFloat(String.valueOf(limit))));

        ProduceEditingProjectVideoResponse response = null;
        try {
            response = client.getAcsResponse(request);
            if (response != null){
                // Produce Media ID
                return response.getMediaId();

                // Request ID 暂时用不到,后续如果需要对视频进行其他操作,再行扩展
//                String requestId = response.getRequestId();
            }
        } catch (ServerException e){
            throw new RuntimeException("服务异常,请检查视频ID与免费时长是否正确");
        } catch (ClientException e){
            throw new RuntimeException("视频处理失败,请检查您配置的accessKeyId与accessKeySecret是否正确");
        } catch (Exception e) {
            throw new RuntimeException("网络异常,请稍后再试");
        }

        return null;
    }
    
 /**
     * 获取事件线
     *
     * @param mediaId  视频id
     * @param type Video or Image 默认Video
     * @param in    从xx 秒开始剪辑
     * @param out  剪辑到xx秒
     * @return
     */
    public static String buildTimeline(String mediaId, String type, Float in, Float out){
        JSONObject timeline = new JSONObject();

        // Video Track
        JSONArray videoTracks = new JSONArray();
        JSONObject videoTrack = new JSONObject();
        // Video Track Clips
        JSONArray videoTrackClips = new JSONArray();
        JSONObject videoTrackClip1 = new JSONObject();
        videoTrackClip1.put("MediaId", mediaId);
        videoTrackClip1.put("Type", type);
        videoTrackClip1.put("Duration", 900);
        videoTrackClip1.put("in", in);
        videoTrackClip1.put("Out", out);
        videoTrackClips.add(videoTrackClip1);
        videoTrack.put("VideoTrackClips", videoTrackClips);
        videoTracks.add(videoTrack);
        timeline.put("VideoTracks", videoTracks);
        return timeline.toString();
    }

音频剪辑处理基本一致,不同之处在于以上时间线获取
videoTrackClip1.put(“Type”, “Volume”); --此处设置类型不一致

 /**
     * 音频获取时间线
     *
     * @param mediaId
     * @param in
     * @param out
     * @return
     */
    public static String buildTimelineVolume(String mediaId, Float in, Float out){
        JSONObject timeline = new JSONObject();
        // Video Track
        JSONArray videoTracks = new JSONArray();
        JSONObject videoTrack = new JSONObject();

        // Video Track Clips
        JSONArray videoTrackClips = new JSONArray();
        JSONObject videoTrackClip1 = new JSONObject();
        videoTrackClip1.put("MediaId", mediaId);
        videoTrackClip1.put("Type", "Volume");     
        videoTrackClip1.put("Duration", out);
        videoTrackClip1.put("in", in);
        videoTrackClip1.put("Out", out);
        videoTrackClips.add(videoTrackClip1);
        videoTrack.put("VideoTrackClips", videoTrackClips);
        videoTracks.add(videoTrack);
        timeline.put("VideoTracks", videoTracks);

        return timeline.toString();
    }

播放方面我们使用自己播放器。
注1:需要使用以上功能,必须先开通-配置管理-分发加速器-域名管理 功能并可正常使用。如图
在这里插入图片描述
域名具体配置方法此处不再说明。

注2:本文只是根据自身需求,有部分功能未涉及。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值