You need to enable JavaScript to run this app.
导航
火山引擎私有加密(旧版)
最近更新时间:2025.05.22 14:04:34首次发布时间:2022.05.09 17:09:03
我的收藏
有用
有用
无用
无用

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

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

方案架构

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

  • 加密转码
    1. 业务方上传视频。
    2. 视频点播存储源文件。
    3. 业务方触发加密转码。
    4. 点播转码服务从密钥管理服务获取密钥,加密视频文件。
    5. 转码完成后,存储加密后的视频文件。
  • 解密播放
    1. 业务授权:移动端的 App 或 Web 页面访问视频时,首先访问业务方自己的 API 或后端页面。在这里,业务方可以增加自己的权限控制,例如要求用户登录才能播放,并建议使用 HTTPS。如果业务允许播放,则通过业务方子账号的 AK/SK 签发播放凭证,并将其返回给 App/Web 端。
    2. 获取播放地址:播放端把视频 ID 和播放凭证传给播放器 SDK,SDK 负责:
      • 从视频点播服务获取对应的多格式、多清晰度的播放地址。
      • 获取对应的密钥。密钥会进行二次加密,安全性更高。
    3. 播放器 SDK 通过播放地址获取加密视频文件。
    4. 播放器 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

使用流程

前提条件

加密转码

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

    说明

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

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

解密播放

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

Native 端

Vid 模式

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

  1. 生成设备唯一标识UnionInfo 是播放端从设备中提取的用于标识访问或设备唯一性的信息。可调用播放器 SDK 的 getEngineUniqueId 方法生成设备唯一标识。
  2. 发起播放请求:客户端携带 UnionInfo 发起播放请求。应用服务端通过视频点播服务端 SDK 本地签发包含 UnionInfo 的临时播放 Token,然后将包含 UnionInfo 的临时播放 Token 下发给客户端。签发临时播放 Token 的示例代码请见以下文档:

    说明

    签发临时播放 Token 时,除了 UnionInfo 参数,您还需指定 FileTypeFormat
    CodecDefinition 参数,确保 SDK 能够获取到加密文件地址。

  3. 设置播放源:播放器 SDK 仅支持通过 Vid 模式播放私有加密视频。参考以下文档传入 Vid 和临时播放 Token 设置播放源:
  4. 请求播放信息:播放器 SDK 内部通过临时播放 Token 发起获取播放信息请求。点播服务将 PlayUrl 和加密后的播放密钥返回给播放器 SDK。

    说明

    密钥通过 UnionInfo 二次加密,安全性更高。

  5. 请求加密视频内容:播放器 SDK 内部通过 PlayUrl 向 CDN 请求加密视频内容。
  6. 解密播放:播放器 SDK 内部先使用 UnionInfo 解密出真实的播放密钥,再使用密钥解密视频并播放。

DirectUrl 模式

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

  1. 生成 UnionInfo:调用播放器 SDK 的 getEngineUniqueId 方法生成 UnionInfo(设备唯一信息)。

  2. 发起播放请求:客户端携带 UnionInfo 向应用服务端发起播放请求。应用服务端通过视频点播服务端 SDK 调用 GetPlayInfo 接口获取视频播放地址及播放密钥。请求参数中,除了 UnionInfo 参数,您还需指定 FileTypeFormatCodecDefinition 参数,确保 SDK 能够获取到加密文件地址。点播服务端会将视频地址以及加密后的播放密钥返回给应用服务端,即返回参数中的 MainPlayUrl (视频播放地址)和 PlayAuth(加密后的密钥)。具体示例代码,请见以下文档:

  3. 设置播放源:参考以下示例代码传入 MainPlayUrlPlayAuth 设置播放源:

  • Android 播放器 SDK:

    String videoId = "your video id";
    // 视频地址
    String url = "http://chw.byte-test.com/848e602532464e80984de05c01f6b5fa/main.m3u8?t=6356ce6e&sign=14db6f9cb85fce01bc8f8917218a1db4";
    String playAuth = "l7wZ9Em+A/JKvQXASrkG6HmlMaWl"; // 使用服务端 SDK 获取的 playAuth
    
    DirectUrlSource source =  new DirectUrlSource.Builder()
            .setVid(videoId)
            .addItem(new DirectUrlSource.UrlItem.Builder()
                    .setUrl(url)
                    .setCacheKey(TTVideoEngine.computeMD5(url))
                    .setPlayAuth(playAuth)
                    .build())
            .build();
    
  • iOS 播放器 SDK:

    // 视频地址
    NSString *url = @"http://***.byte-test.com/848e602532464e80984de05c01f6b5fa/main.m3u8?t=6356ce6e&exper=120&sign=c0b97ac806***ec7728974cbc00cd2b";
    
    // 使用服务端 SDK 获取的 playAuth
    NSString *playAuth = @"l7wZ9Em+A/JKvQXASrkG6HmlMaWl";
    // cache key , 建议使用 url 的 md5 值
    NSString *cacheKey = url.md5String;
    
    TTVideoEngineUrlSource *urlSouce = [[TTVideoEngineUrlSource alloc] initWithUrl:url1 cacheKey:cacheKey];
    urlSouce.decryptionKey = playAuth;
    
    [self.videoEngine setVideoEngineVideoSource:urlSouce];
    
  1. 请求加密视频内容:播放器 SDK 内部通过 PlayUrl 向 CDN 请求加密视频内容。
  2. 解密播放:播放器 SDK 内部解密出真实的播放密钥,再使用密钥解密视频并播放。

Web 端

Web 播放器 SDK 仅支持通过 Vid 模式播放私有加密视频。整体解密播放流程如下:
Image

  1. 发起播放请求:客户端发起播放请求。应用服务端通过视频点播服务端 SDK 本地签发临时播放 Token,然后下发给客户端。具体请见以下文档:
  2. 设置播放源:在实例化播放器时设置 unionIdgetVideoByToken.playAuthTokengetVideoByToken.getDrmAuthToken 参数。示例代码请见播放私有加密视频
  3. 请求播放信息:Web 播放器 SDK 内部通过临时播放 Token 向点播服务请求播放信息,获取到 PlayUrlPlayAuthId 等信息。
  4. 请求私有加密 Token:Web 播放器 SDK 内部携带 PlayAuthIdVidUnionInfo 向应用服务端请求获取私有加密 Token。应用服务端通过视频点播服务端 SDK 本地签发私有加密 Token,然后下发给客户端。具体请见以下文档:

    说明

    UnionInfo 是 SDK 使用您在实例化播放器时设置的 unionId 生成的,有效时长为 30 秒。

  5. 请求密钥:Web 播放器 SDK 内部使用私有加密 Token 和 PlayAuthId 向点播密钥服务请求密钥。点播密钥服务解析出 UnionInfo,使用 UnionInfo 对密钥进行二次加密,并返回给 Web 播放器 SDK。Web 播放器 SDK 使用 UnionInfo 解密出真实密钥。

    说明

    密钥通过 UnionInfo 二次加密,安全性更高。

  6. 请求加密视频内容:Web 播放器 SDK 内部通过 PlayUrl 向点播 CDN 请求加密视频内容。
  7. 解密播放:Web 播放器 SDK 使用密钥解密视频并播放。