火山引擎提供一套自研的云端一体视频加密解决方案,采用私有加密算法,确保整个传输链路的安全性。相比 HLS 标准加密,私有加密更安全,使用门槛更低。本文为您介绍火山引擎私有加密的优势、架构、兼容性和使用流程。
优势介绍
- 每个视频文件都有独立的密钥,有效防止单一密钥泄露可能带来的安全风险。此外,密钥经过二次加密,提高了安全性。
- 提供适用于 Android、iOS、Web 等平台的播放器 SDK,可自动解密和播放加密内容。同时支持设备级 UnionInfo 校验,降低了密钥泄露后任意设备播放风险。
- 对视频数据进行加密处理,即使下载至本地,视频仍然是加密状态,也能有效防止视频被盗用。
方案架构
火山引擎私有加密方案由加密转码和解密播放两个核心模块组成。
- 加密转码
- 业务方上传视频。
- 视频点播存储源文件。
- 业务方触发加密转码。
- 点播转码服务从密钥管理服务获取密钥,加密视频文件。
- 转码完成后,存储加密后的视频文件。
- 解密播放
- 业务授权:移动端的 App 或 Web 页面访问视频时,首先访问业务方自己的 API 或后端页面。在这里,业务方可以增加自己的权限控制,例如要求用户登录才能播放,并建议使用 HTTPS。如果业务允许播放,则通过业务方子账号的 AK/SK 签发播放凭证,并将其返回给 App/Web 端。
- 获取播放地址:播放端把视频 ID 和播放凭证传给点播 SDK,SDK 负责:
- 从视频点播服务获取对应的多格式、多清晰度的播放地址。
- 获取对应的密钥。密钥会进行二次加密,安全性更高。
- 点播 SDK 通过播放地址获取加密视频文件。
- 点播 SDK 使用密钥对视频进行解密,然后播放。
兼容性说明
Native 端
类型 | 格式 |
---|
Android | HLS、DASH、MP4、OPUS |
iOS | HLS、DASH、MP4、OPUS |
Web 端
类型 | 格式 |
---|
H5 | - Android H5:HLS、DASH、MP4、OPUS
- iOS H5:HLS
|
|
浏览器 | - Chrome、Firefox:HLS、DASH、MP4、OPUS
- Safari:HLS、DASH、MP4
|
|
如何使用
前提条件
加密转码
- 在视频点播控制台创建媒体处理模板。音频转码模板、视频转码模板和极致超清模板均支持设置私有加密。您需开启 DRM 加密开关,如下图所示。
- (可选)在视频点播控制台创建工作流。根据您创建的媒体处理模板类型勾选相应的工作流任务并关联开启了 DRM 加密的媒体处理模板。
- 触发私有加密转码。视频点播支持在媒资上传和媒体处理环节触发转码。您可以直接通过单个媒体处理模板发起转码,或基于包含媒体处理任务的工作流去发起转码。具体请见以下文档:
- 查看私有加密转码结果。
- 控制台方式:
- 登录视频点播控制台,进入指定空间。
- 在媒资管理 > 视频管理页面,单击目标视频操作列的详情按钮,进入视频详情页面。
- 单击视频地址页签。您可以查看该加密转码输出的流会标识加密字样。
- OpenAPI 方式:调用 GetPlayInfo 接口,通过返回参数
PlayAuthId
是否有值区分,有值就是加密的。 - 事件通知:如果您已配置工作流执行完成事件通知,可以通过事件中的
TranscodeInfo
字段获取转码产物信息。其中 TranscodeInfo.Encrypt
字段为 true
表示已加密。
解密播放
经过火山引擎私有加密的视频,只能使用视频点播提供的点播 SDK 对加密内容进行解密播放。
Native 端
使用 Android/iOS 点播 SDK 播放私有加密视频时,您需参考以下文档通过 vid
和 playAuthToken
设置播放源:
Native 端整体解密播放流程如下:
- 发起播放请求:客户端携带
UnionInfo
发起播放请求。UnionInfo
是播放端从设备中提取的用于标识访问或设备唯一性的信息。可调用点播 SDK 的 getEngineUniqueId 方法生成设备唯一标识。 - 签发临时播放 Token:应用服务端通过视频点播服务端 SDK 本地签发包含
UnionInfo
的临时播放 Token。具体请见以下文档:
说明
签发临时播放 Token 时,除了 UnionInfo
参数,您还需指定 FileType
、Format
、
Codec
、Definition
参数,确保 SDK 能够获取到加密文件地址。
- 下发临时播放 Token:应用服务端将包含
UnionInfo
的临时播放 Token 下发给客户端。 - 请求播放信息:点播 SDK 内部通过临时播放 Token 发起获取播放信息请求。点播服务将
PlayUrl
和加密后的播放密钥返回给点播 SDK。说明
密钥通过 UnionInfo
二次加密,安全性更高。
- 请求加密视频内容:点播 SDK 内部通过
PlayUrl
向 CDN 请求加密视频内容。 - 解密播放:点播 SDK 内部先使用
UnionInfo
解密出真实的播放密钥,再使用密钥解密视频并播放。
Web 端
Web 点播 SDK 仅支持通过 Vid 模式播放私有加密视频。您需在实例化播放器时设置 unionId
、 getVideoByToken.playAuthToken
和 getVideoByToken.getDrmAuthToken
参数。示例代码请见播放私有加密视频。Web 端整体解密播放流程如下:
- 发起播放请求:客户端发起播放请求。应用服务端通过视频点播服务端 SDK 本地签发临时播放 Token,然后下发给客户端。具体请见以下文档:
- 请求播放信息:Web 点播 SDK 内部通过临时播放 Token 向点播服务请求播放信息,获取到
PlayUrl
、PlayAuthId
等信息。 - 请求私有加密 Token:Web 点播 SDK 内部携带
PlayAuthId
、Vid
、UnionInfo
向应用服务端请求获取私有加密 Token。应用服务端通过视频点播服务端 SDK 本地签发私有加密 Token,然后下发给客户端。具体请见以下文档:
说明
UnionInfo
是 SDK 使用您在实例化播放器时设置的 unionId
生成的,有效时长为 30 秒。
- 请求密钥:Web 点播 SDK 内部使用私有加密 Token 和
PlayAuthId
向点播密钥服务请求密钥。点播密钥服务解析出 UnionInfo
,使用 UnionInfo
对密钥进行二次加密,并返回给 Web 点播 SDK。Web 点播 SDK 使用 UnionInfo
解密出真实密钥。说明
密钥通过 UnionInfo
二次加密,安全性更高。
- 请求加密视频内容:Web 点播 SDK 内部通过
PlayUrl
向点播 CDN 请求加密视频内容。 - 解密播放:Web 点播 SDK 使用密钥解密视频并播放。