产品百科 |如何基于阿里云 CDN 加速实现点播试看功能

简介: 阿里云视频点播服务提供了试看的完整解决方案,您可自由设置试看时长(或观看完整视频),播放服务会根据设置提供含有试看限制的特定的播放地址,可借此来实现完整的试看功能。

简介

阿里云视频点播服务提供了试看的完整解决方案,您可自由设置试看时长(或观看完整视频),播放服务会根据设置提供含有试看限制的特定的播放地址,可借此来实现完整的试看功能。

使用前提

试看的基本原理是,播放的 CDN 加速地址带有试看的指定时长信息,云端会对该信息进行鉴权,鉴权通过会返回指定的文件内容,否则拒绝访问、返回 403。

  • 点播试看功能基于阿里云 CDN 加速实现,且必须在视频点播 (VOD) 控制台配置 CDN 加速域名。
  • 此方案必须开启 A 鉴权,同时,为了防止试看参数被篡改,试看参数也作为 auth_key 计算的一部分。
  • 域名必须开启 range 回源和拖拽播放。具体可在域名管理 > 配置 (对应域名处)> 视频相关处开启。

使用步骤

  1. 首先将需要试看的域名开启试看功能,具体可参见配置方式。
    说明 如果域名没有开启试看,则请求点播时不能携带试看参数,否则返回的地址不能访问。
  2. 请求点播的播放服务,在请求时带试看参数,指定所需要试看的时间,具体可参见试看地址获取。
  3. 点播返回试看地址。
  4. 客户根据此地址访问 CDN,此地址只返回试看所需要的时长数据。

流程示例

image.png

配置方式

登录点播控制台,【媒体处理配置】>【分发加速配置】>【域名管理】>【选择域名 - 配置】>【访问控制】>【URL 鉴权】,开启 A 方式鉴权,同时打开支持试看开关。image.png

试看地址获取

通过点播获取

说明

  • 只有配置 CDN 加速域名的情况,才支持试看功能。
  • 如果域名没有开启试看,则请求点播时不能携带试看参数,否则返回的地址不能访问。
  • 目前支持的文件格式为 mp4、m3u8。
  • 由于试看时间与关键帧存在依赖 (点播转码输出文件默认 10 秒一个关键帧,可在转码模板修改),因此短视频不建议使用试看,长视频试看时间建议至少设置为 30 秒。
  • m3u8 文件试看精度为 ts 分段时长,具体可能存在误差,采用最大化原则,即 10 秒一个 ts,试看 15 秒,实际返回数据为 20 秒。

获取播放地址接口调用时,您可以设置 PlayConfig 结构中的 PreviewTime 来获取指定时长的播放试看地址。

示例代码如下:

package com.ali.vod.test;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.oss.ClientException;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.vod.model.v20170321.GetPlayInfoRequest;
import com.aliyuncs.vod.model.v20170321.GetPlayInfoResponse;
/**
 * @author wb-zzb
 * @date 2020/6/3
 */
public class VodPreviewTest {
    public static void main(String[] args) {
        //请根据点播服务接入区域填写,详情参见点播服务接入区域(https://help.aliyun.com/document_detail/98194.html?spm=a2c4g.11186623.6.612.51c6534bqLs9Wd)
        String regionId = "cn-shanghai";
        String accessKeyId = "<your accessKeyId>";
        String accessKeySecret = "<your accessKeySecret>";
        String videoId = "595d020bad3*****f37433451720";
        DefaultAcsClient client = InitVodClient(regionId, accessKeyId, accessKeySecret);
        GetPlayInfoResponse response = null;
        try {
            response = getPlayInfo(client, videoId);
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("response = " + JSONObject.toJSONString(response));
    }
    /**
     * 初始化Client
     *
     * @param regionId
     * @param accessKeyId
     * @param accessKeySecret
     * @return
     * @throws ClientException
     */
    public static DefaultAcsClient InitVodClient(String regionId, String accessKeyId, String accessKeySecret) throws ClientException {
        DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
        DefaultAcsClient client = new DefaultAcsClient(profile);
        return client;
    }
    /**
     * 获取视频播放地址
     *
     * @param client
     * @param videoId
     * @return
     * @throws Exception
     */
    public static GetPlayInfoResponse getPlayInfo(DefaultAcsClient client, String videoId) throws Exception {
        GetPlayInfoRequest request = new GetPlayInfoRequest();
        request.setVideoId(videoId);
        //设置过期时间,单位秒,不设置,默认3600s
        request.setAuthTimeout(3600L);
        request.setFormats("mp4");
        JSONObject playConfig = new JSONObject();
        //视频点播试看时长,单位为秒。最小值1
        playConfig.put("PreviewTime", "30");
        request.setPlayConfig(playConfig.toJSONString());
        return client.getAcsResponse(request);
    }
}

自行计算

  • 在生成 authkey 时如果有试看参数,计算 md5hash 时要带上试看时长参数,即在原来 URL 鉴权 md5hash 计算方式的基础上,加入试看时长的计算。试看 md5hash 的计算方法为 MD5 (uri-timestamp-rand-uid-auth_key-preview_time)。
  • 在最后加上 & end={试看时长},如果需要看完整视频,试看参数不设置即可,并且不参与进行 auth_key 计算。

示例代码如下:

private String generateRand() {
        return UUID.randomUUID().toString().replaceAll("-", "");
    }
    public String genAuthKey(String object, String privateKey, Long expireTime, Long previewTime) {
        String rand = "0";
        String uid = "0";
        if (StringUtils.isBlank(privateKey)) {
            return "";
        }
        rand = generateRand();
        long timestamp = System.currentTimeMillis() / 1000 + (expireTime == null ? 0 : expireTime);
        String authStr = timestamp + "-" + rand + "-" + uid;
        String md5Str = object + "-" + authStr + "-" + privateKey;
        if(previewTime!=0)
            md5Str = md5Str + "-" + previewTime;
        String auth_key = authStr + "-" + MD5Util.md5( md5Str);
        return auth_key;
    }
    public void previewTest() throws Exception {
        try {
            String key = "your cdn auth key";
            String fileUrl = "http://test.yourdomain.com/test/bee21427ca3346848835c1bd786054c5-19bd8528c1d51576cd726cf86471ca0****.mp4";
            URL url = new URL(fileUrl);
            String file = url.getFile();
            Long previewtime = 120L;
            Long expireTime = 1800L;
            String auth_key =genAuthKey(file, key, expireTime, previewtime);
            fileUrl = fileUrl + "?auth_key=" + auth_key;
            if(previewtime != 0)
                fileUrl = fileUrl + "&end=" + previewtime;
            System.out.println(fileUrl);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


「视频云技术」你最值得关注的音视频技术公众号,每周推送来自阿里云一线的实践技术文章,在这里与音视频领域一流工程师交流切磋。

image.png

相关文章
|
3月前
|
文字识别 API 数据安全/隐私保护
可以使用阿里云文字识别服务中的个人证照识别功能。
可以使用阿里云文字识别服务中的个人证照识别功能。【1月更文挑战第21天】【1月更文挑战第102篇】
17 1
|
2月前
|
域名解析 网络协议 安全
阿里云CDN
本文介绍阿里云CDN产品中涉及的基本概念,便于您更准确地理解和使用CDN产品。
59 5
|
1月前
|
安全 网络安全 CDN
阿里云CDN HTTPS 证书配置流程
阿里云CDN HTTPS 证书配置流程
167 1
|
1月前
|
算法 Java 开发工具
使用阿里云KMS产品针对 Springboot 接口参数加密解密功能
针对Springboot里面使用开源工具使用加解密,替换成阿里云KMS产品进行加解密;
121 1
|
2月前
|
文字识别 安全 API
阿里云文字识别OCR的发票凭证识别功能可以通过API接口的形式进行调用
【2月更文挑战第5天】阿里云文字识别OCR的发票凭证识别功能可以通过API接口的形式进行调用
79 5
|
2月前
|
弹性计算 Ubuntu Linux
阿里云助力《幻兽帕鲁》快速开服:全新自动部署功能上线,仅需10秒即可完成部署!
阿里云助力《幻兽帕鲁》快速开服:全新自动部署功能上线,仅需10秒即可完成部署!阿里云服务器搭建帕鲁服务器游戏,服务器稳定无卡顿,先下载SteamCMD,并运行;然后下载Palserver,修改服务ini配置,启动PalServer,进入游戏服务器。今天分享阿里云创建幻兽帕鲁服务器教程。
|
2月前
|
弹性计算 搜索推荐 Linux
阿里云自动部署【幻兽帕鲁/Palworld】功能上线,10秒全自动开服!
阿里云轻量应用主机Lighthouse上线幻兽帕鲁应用模板功能 ,用户只需要点三次鼠标,最快10秒就能自动安装好幻兽帕鲁主机,和自己的朋友一起开心“抓帕鲁”。同时,用户还可以在阿里云控制台的面板直接调整幻兽帕鲁的经验倍率、死亡惩罚等游戏配置,实现便捷、个性化的游戏体验。
阿里云自动部署【幻兽帕鲁/Palworld】功能上线,10秒全自动开服!
|
2月前
|
API 网络安全
阿里云视觉智能平台中人脸搜索功能在长时间不使用后第一次使用时出现连接失败
阿里云视觉智能平台中人脸搜索功能在长时间不使用后第一次使用时出现连接失败
228 2
|
3月前
|
文字识别 API 数据安全/隐私保护
以使用阿里云文字识别服务中的个人证照识别功能
以使用阿里云文字识别服务中的个人证照识别功能【1月更文挑战第24天】【1月更文挑战第118篇】
87 2
|
3月前
|
存储 编解码 弹性计算
阿里云网盘与相册开发版提供了丰富的功能和全面的加速解决方案
阿里云网盘与相册开发版提供了丰富的功能和全面的加速解决方案【1月更文挑战第13天】【1月更文挑战第63篇】
27 2

相关产品