有奖捉虫:行业应用 & 管理与支持文档专题 HOT
本文主要介绍如何在 WEB 端播放 HLS 私有加密视频。
?

前置步骤

1. 创建加密视频搭建 token 服务,详情请参见 HLS 视频加密播概述
2. 配置 CORS 规则:由于 Web 端播放会对播放地址 ajax 跨域请求,需要在 COS 控制台或 CDN 控制台配置 CORS 规则,允许播放页跨域访问资源。
?

Web 端播放指引

1. 下载播放代码库:首先下载 JS 播放代码库,解压得到 cos_hls.js、jsencrypt.js 和 hls.js。
2. 引入到播放页面:根据播放器种类,在自己页面中引入文件,目前支持三种类型(hls.js/tcplayer/video.js)。
hls.js 引用示例:
<script src="./hls.js"></script>
<script src="./jsencrypt.js"></script>
<script src="./cos_hls.js"></script>
tcplayer 引用示例:
<link href="https://web.sdk.qcloud.com/player/tcplayer/release/v4.2.2/tcplayer.min.css" rel="stylesheet"/>
<script src="https://web.sdk.qcloud.com/player/tcplayer/release/v4.2.2/libs/hls.min.0.13.2m.js"></script>
<script src="https://web.sdk.qcloud.com/player/tcplayer/release/v4.2.2/tcplayer.v4.2.2.min.js"></script>
<script src="./jsencrypt.js"></script>
?
video.js 引用示例:
<link href="https://vjs.zencdn.net/8.11.8/video-js.css" rel="stylesheet" />
<script src="https://vjs.zencdn.net/8.11.8/video.js"></script>
<script src="./jsencrypt.js"></script>
<script src="./cos_hls.js"></script>
3. 调用播放的方法:前端使用 cos_hls.js 文件封装好的 cosHls 对象来播放加密的m3u8视频文件,cosHls 对象的 play 方法参数说明如下:
参数名
说明
是否必填
类型
默认值
container
video 标签的默认值
String
playerType
播放器种类(hls.js/tcplayer/video.js)
String
src
请求 m3u8 接口的文件地址,需要加?ci-process=pm3u8后缀
String
useCdn
标记 src 里的域名是不是 CDN 域名
Boolean
false
getToken
获取 token 和签名的回调函数
Function
4. 调用播放的代码示例
<script>
// cosHLs为cos_hls.js封装的对象,使用play方法播放视频文件
cosHls.play({
// video标签的id
container: 'video',
// 支持的播放器种类(hls.js/tcplayer/video.js)
playerType: 'hls.js',
// 请求m3u8接口的文件地址
src: 'https://examplebucket-1250000000.cos.ap-beijing.myqcloud.com/hls/video.m3u8?ci-process=pm3u8',
// 标记src里的域名是不是CDN域名(false/true)
// useCdn: false,
// 请求token和签名的函数
getToken(opt, callback) {
// 加密公钥,不需要用户填写,sdk会自动生成
var publicKey = opt.publicKey;
// 请求m3u8接口的文件地址,不需要用户填写,sdk会自动生成
var src = opt.src;
// 是否返回加密内容,与cosHls对象的ProtectContentKey参数保持一致,不需要用户填写,sdk会自动生成
var protectContentKey = opt.ProtectContentKey;
// 新建xhr对象,进行请求
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
// /samples/hls/token为自定义请求地址,用户可自自定义
xhr.open('POST', `/hls/token`, true);
xhr.setRequestHeader('Content-Type', 'application/json')
// 请求成功返回authorization 和 token
xhr.onload = function () {
var r = JSON.parse(xhr.responseText);
var authorization = r.authorization
var token = r.token
callback(null, {authorization, token});
};
xhr.onerror = function () {
callback('get token error');
};
// node服务所需要的参数,已从sdk获取,不需要用户填写
var data = {
src: src,
publicKey: window.btoa(publicKey),
protectContentKey: protectContentKey
};
xhr.send(JSON.stringify(data));
}
})
</script>
如以上示例,hls/token 接口的参数 src 、publicKey、ProtectContentKey 不需要用户填写,SDK 会自动生成,只需要传递给 token 接口。
5. 完整的代码示例:请参见 完整源码
?

浏览器兼容说明

注意:
当前示例在大部分浏览器场景下默认是私有加密,当检测到部分环境(iOS Safari 或 WebView)不兼容 Media Source Extensions 对象时,会自动降级为标准加密
?

Demo 体验

您可在线体验 HLS 私有加密播放功能,单击前往 HLS加密视频播放体验地址


http://www.vxiaotou.com