You need to enable JavaScript to run this app.
导航
火山引擎私有加密(新版)
最近更新时间:2025.06.09 14:14:21首次发布时间:2025.05.15 20:18:50
我的收藏
有用
有用
无用
无用

火山引擎提供一套自研的云端一体视频加密解决方案,采用私有加密算法,确保整个传输链路的安全性。相比 HLS 标准加密,私有加密更安全,使用门槛更低。本文为您介绍火山引擎私有加密的优势特性、方案架构和使用流程。

方案架构

火山引擎私有加密方案由加密转码解密播放两个核心模块组成。
Image

说明

关键概念:

  • DEK (Data Encryption Key):用于加密音视频数据的密钥。
  • KEK (Key Encryption Key):用于加密或“封装”数据加密密钥的密钥。可调用客户端播放器 SDK 生成公钥和私钥对。公钥会经过一层加密(即 DrmKEK),传给服务端,用于加密 DEK。私钥则由客户端自行保存,无需传给服务端,用于解密 DEK。
  • 加密转码:
    1. 业务方上传视频。
    2. 视频点播存储源文件。
    3. 业务方触发加密转码操作。
    4. 点播转码服务从密钥管理服务获取密钥,对视频文件进行加密。
    5. 转码完成后,存储加密后的视频文件。
  • 解密播放:
    1. 业务授权:移动端 App 或 Web 页面访问视频时,需先访问业务方自身的 API 或后端页面。业务方在此可添加自身的权限控制机制,如要求用户登录后才能播放,建议采用 HTTPS 协议。若业务允许播放,业务方通过子账号的 AK/SK 签发播放 Token,并将其返回给 App/Web 端。
    2. 获取播放地址:播放端将视频 ID 和播放 Token 传递给播放器 SDK,由 SDK 负责:
      • 从视频点播服务获取相应的多格式、多清晰度播放地址。
      • 获取对应的密钥。该密钥会进行二次加密,以提高安全性。
    3. 解密播放:
      • 播放器 SDK 通过播放地址获取加密视频文件。
      • 运用加密密钥对视频进行解密后播放。

优势特性
  • 每个视频文件均使用独立密钥,可有效防范因单一密钥泄露可能引发的安全风险。此外,密钥经过二次加密,进一步提升了安全性。
  • 提供适配 Android、iOS、Web 等平台的播放器 SDK,能够自动解密并播放加密内容。同时,支持设备级 UnionInfo 校验,可降低密钥泄露后任意设备播放的风险。
  • 对视频数据进行加密处理,即便视频下载至本地,仍处于加密状态,可有效防止视频被盗用。

费用说明
  • 火山引擎私有加密属于免费服务,但需通过视频转码实现加密功能。转码将产生费用,具体计费标准请参考转码计费
  • 经火山引擎私有加密的视频,仅可使用视频点播提供的播放器 SDK 对加密内容进行解密播放。播放器 SDK 使用 License 计费,具体计费标准请参考播放器 SDK 计费

使用流程

前提条件

加密转码

  1. 视频点播控制台创建媒体处理模板。音频转码模板、视频转码模板和极致超清模板均支持开启私有加密。您需开启私有加密开关,如下图所示。
    Image

    说明

    媒体处理模板的其他参数配置请见以下文档:

  2. (可选)在视频点播控制台创建工作流。根据您创建的媒体处理模板类型勾选相应的工作流任务并关联开启了私有加密的媒体处理模板。
    Image
  3. 触发私有加密转码。您可以直接通过单个媒体处理模板发起转码,或基于包含媒体处理任务的工作流去发起转码。具体请见以下文档:
    • 单模板处理:可在视频点播控制台通过指定单个媒体处理模板来触发媒体处理任务,具体请见触发单模板处理任务
    • 工作流处理:可设置空间级别的默认工作流、上传时指定工作流 ID 或上传后手动触发工作流。具体操作请见触发工作流
  4. 查看私有加密转码结果。
  1. 登录视频点播控制台,进入指定空间。
  2. 媒资管理 > 视频管理页面,单击目标视频操作列的详情按钮,进入视频详情页面。
  3. 单击视频地址页签。您可以查看该加密转码输出的流会标识私有加密字样。
    Image

解密播放

经火山引擎私有加密的视频,仅可使用视频点播提供的播放器 SDK 对加密内容进行解密播放。

Native 端

Native 端 Vid 模式下整体解密播放流程如下:
Image

  1. 生成 UnionInfo 和 DrmKek:调用播放器 SDK 的 getEngineUniqueIdgetEngineUniqueKek 方法生成 UnionInfo(设备唯一信息)和 DrmKek(对称加密的加密公钥)。

    • Android 播放器 SDK:

      String unionInfo = TTVideoEngine.getEngineUniqueId(context);
      String kek = TTVideoEngine.getEngineUniqueKek(context); 
      
    • iOS 播放器 SDK:

      NSString *kek = [TTVideoEngine getEngineUniqueKek];
      NSString* unionInfo = [TTVideoEngine getEngineUniqueId]];
      
  2. 请求临时播放 Token:携带上一步所生成的 UnionInfo 和 DrmKek,向应用服务端发起请求,以生成临时播放 Token。应用服务端通过视频点播服务端 SDK 本地签发临时播放 Token,然后下发给客户端。服务端在生成 Token 时,需将 FileType 参数设为 private_evideoUnionInfo 参数为播放器 SDK 生成的 UnionInfo,DrmKEK 参数设为播放器 SDK 生成的 DrmKek。具体示例代码,请见以下文档:

  3. 设置播放源:播放器 SDK 仅支持通过 Vid 模式播放私有加密视频。参考以下文档传入 Vid 和临时播放 Token 设置播放源:

  4. 请求播放信息:播放器 SDK 自发向点播服务端发起请求以获取视频信息。点播服务端会对播放密钥进行多次加密处理,从而最大程度地提高密钥的安全性。最终,点播服务端会将视频地址和经过加密的播放密钥返回给播放器 SDK。

  5. 请求加密视频内容:播放器 SDK 内部通过 PlayUrl 向 CDN 请求加密视频内容。

  6. 解密播放:播放器 SDK 解析出真实密钥,最终使用该密钥对视频进行解密并播放。

Web 端

详见 Web 播放器 SDK - 播放私有加密视频(新版)