HLS 视频加密播放实践

最近更新时间:2024-09-06 17:09:51

我的收藏
本文主要介绍数据万象 HLS 加密方案,包含视频加密和视频播放的过程。

视频加密能力简介

视频加密是指对视频中的内容进行加密处理,加密后的视频无法分发给无访问权限的用户观看,即使视频被下载到本地,视频本身也是被加密的,无法正常播放和二次分发,从而保障您的视频版权不受到非法侵犯,有效防止视频泄露和盗链问题。视频加密可广泛用于在线教育及财经等领域。

方案架构

整体方案架构包含视频加密与播放加密后的视频两大部分流程说明。

视频加密流程




视频加密
1. 上传视频:业务APP通过控制台、服务端 API 等方式,将视频上传到COS。
2. 触发视频处理:上传视频后,触发视频处理。触发后,视频在转码的过程中进行加密。
3. 获取加密密钥:视频转码并加密,从数据万象密钥管理模块获取加密密钥。
4. 加密后的视频写入存储:视频转码并加密后,输出的视频内容被写入到COS存储中。

播放加密后的视频




解密视频并播放
1. 将加密视频URL添加上签名token:向业务侧APP服务发起请求,在播放地址后拼接签名token。
2. 下载加密后的视频内容:接收业务侧播放器请求,如有CDN存在,CDN回源COS,下载加密后的视频内容。
3. 获取解密密钥:业务侧播放器携带含签名token的url从数据万象密钥管理模块请求解密密钥。
4. 解密并播放:播放器获取密钥后,解密视频并播放。
说明:
业务方需开通腾讯云数据万象服务(CI)、存储服务(COS)。

接入指引

基于上述原理架构,进行如下操作步骤,便可以实现对视频的加密与解密播放。

步骤一:上传视频,转码为 HLS 加密视频

1. 上传视频:在对象存储控制台 存储桶列表,进入要存储视频的存储桶,上传要转码的视频到存储桶。
2. 创建自定义模板:左侧菜单找到任务和工作流>模板配置,选择音视频转码,单击创建转码模板,在弹窗里封装格式选择 HLS,并配置其他转码选项(可保留默认配置),该模板可用于后续创建任务和创建工作流。



在最后一步的高级设置里开启视频加密,点击完成



3. 创建转码任务:到任务和工作流>任务管理点击创建任务任务类型选择音视频转码,选择刚创建的HLS加密模板,选择目标存储桶和文件名后,点击确定。



4. 找到转码后的视频文件:等任务执行完成后,找到创建任务时填的目标路径,可看到生成后的.m3u8 和 .ts 后缀的加密视频文件。



5. 复制播放密钥:到 对象存储控制台,桶详情页面的数据处理>媒体处理,在上方选中媒体处理页签。编辑开启媒体处理,并生成和复制播放密钥。用于后续 token 服务搭建。




步骤二:搭建用于获取 token 的服务

HLS 加密视频播放流程里,需要开发者自行搭建服务,用于获取 HLS 播放 token 和签名。

token 计算规则

HLS 播放 token 采用 JWT(JSON Web Token),一种由 Header、PayLoad 和 Signature 组合得到的数字令牌。

token 计算公式

1. 计算 Signature:Signature = HMACSHA256(base64UrlEncode(Header) + "." + base64UrlEncode(Payload), Key)
2. 计算 Token: Token = base64UrlEncode(Header) + '.' + base64UrlEncode(Payload) + '.' + base64UrlEncode(Signature)

Payload 的参数说明

以上 Payload 的参数说明如下:
节点名称(关键字)
父节点
描述
类型
是否必选
Type
token 类型,固定值为 CosCiToken
String
AppId
用户的 appId
String
BucketId
需要播放的文件所在的 BucketId
String
Object
需要播放的文件名
String
Issuer
token 颁发者,固定为 client
String
IssuedTimeStamp
token 颁发秒级时间戳
int
ExpireTimeStamp
token 过期秒级时间戳,默认1天过期
int
UsageLimit
token 使用次数限制,默认限制100次
int
ProtectContentKey
是否加密解密密钥(播放时解密ts视频流的密钥),1表示对解密密钥加密,0表示不对解密密钥加密。 默认为0
int
ProtectSchema
保护模式,仅支持 rsa1024 ,则表示使用 RSA 非对称加密的方式保护,公私钥对长度为1024bit
String
否(当 ProtectContentKey=1 时必选)
PublicKey
公钥。1024 bit 的 RSA 公钥,需使用 Base64 进行编码
String
否(当 ProtectContentKey=1 时必选)

token 计算步骤

按照以上计算规则,这里提供一个计算过程的例子,假设某用户 需要播放 test-125000000 桶下的 hls_test.m3u8 加密视频,示例如下:

token 服务代码实现

HLS 播放 token 是在 HLS 加密视频播放步骤里需要用于拼接播放链接的参数,采用 JWT(JSON Web Token)格式计算得出,是一种由 Header、PayLoad 和 Key 计算并组合得到的数字令牌。token 服务可以参考 Nodejs 示例Go 示例

步骤三:播放 HLS 加密视频

获取播放器签名 token 后,您可以分别使用 Web 端播放 HLS 加密视频Android 端播放 HLS 加密视频iOS 端播放 HLS 加密视频小程序端播放 HLS 加密视频的播放器 Demo 进行验证,具体内容请参考 Demo 的源码。

费用说明

视频 HLS 加密将收取 转码费用