| 4 min read

最近在工作遇到了关于 pssh0 的关键词标记。当然你第一样看,可能并不清楚这个是什么东西,但是如果你是做多媒体 DRM 的,你或许会对 PSSH 有所了解。这里结合着搜索的资料简单介绍下这个 PSSH是什么东西,而这里面的 0 又是什么含义。

PSSH-Protection System Specific Headers 顾名思义,就是保护系统特定头部信息。当视频内容受到 DRM 保护时,内容会被加密,并且会将元数据添加到内容中。添加此类元数据的过程称为 DRM 信号传输。
PSSH 是一个标准化容器,用于保存用于保护数字内容的保护系统所特有的元数据。因此,PSSH 是 DRM 信号传输的一部分。
PSSH不包含加密密钥本身(它是一个秘密),但它包含有关加密的必要信息,例如密钥 ID、加密方案以及从许可证服务器获取密钥所需的其他信息。

PSSH 最终在“ISO/IEC 23001-7:2023 MPEG 系统技术 - 第 7 部分:ISO 基础媒体文件格式文件中的常见加密”中定义。

当打包商对视频应用 DRM 保护时,它会加密内容,但也会向内容添加一些元数据,通常以名为 PSSH Box的容器形式出现。每个用于保护视频的 DRM 系统都有一个单独的 PSSH 盒(即,一个视频可以包含多个 PSSH 盒 - 每个 DRM 系统一个)。

PSSH Box 包含 DRM 系统特定的PSSH 数据。例如,对于 PlayReady,PSSH 数据是 PlayReady Header,定义在此处:https ://learn.microsoft.com/en-us/playready/specifications/playready-header-specification 。

打包商通常不会自己生成加密密钥,而是从安全密钥服务(此处充当 PSSH 生成器)请求密钥。当打包商从密钥服务请求密钥时,它还会收到用于保护视频的 DRM 系统的 PSSH 盒。密钥服务会生成密钥和 PSSH 盒并将它们返回给打包商。

PSSH 框的具体返回方式由相应的密钥获取协议定义,例如 AWS SPEKE 或 Widevine 通用加密。

当播放器播放内容时,它会检测到内容已加密并读取相应的 PSSH 盒。然后播放器使用 PSSH 盒中的信息从许可证服务器获取密钥。

PSSH

PSSH 盒是二进制结构,因此不容易读取。
Axinom 提供了一套免费工具,可以解析 PSSH 盒并以更易读的方式显示内容。
PSSH Box Decoder(https://tools.axinom.com/decoders/PsshBox)解析 PSSH 盒并显示其内容。
PSSH 数据解码器(https://tools.axinom.com/decoders/PsshData)解析 DRM 系统特定的 PSSH 数据并显示其内容。

PSSH Box 的格式是 DRM 系统特定的。

对于 PlayReady 和 Widevine 来说,PSSH Box 格式本质上是相同的。唯一的区别是:

系统 ID 取决于 DRM 系统
嵌套 PSSH 数据的格式
对于 FairPlay,DRM 信令通常是#EXT-X-KEY可以插入到 HLS 清单的完整标签或该标签的 URI 属性。

(这取决于用于获取密钥的密钥获取协议。)

其中包含的数据基本上是密钥 ID 和可选的初始化向量 (IV)。

例子:

#EXT-X-KEY:METHOD=SAMPLE-AES,URI="skd://302f80dd-411e-4886-bca5-bb1f8018a024:77FD1889AAF4143B085548B3C0F95B9A",KEYFORMATVERSIONS="1",KEYFORMAT="com.apple.streamingkeydelivery"

以下 ID 是为特定 DRM 系统保留的(另请参阅DRM 系统):

  • Widevine: edef8ba9-79d6-4ace-a3c8-27dcd51d21ed
  • FairPlay: 94ce86fb-07ff-4f43-adb8-93d2fa968ca2
  • PlayReady: 9a04f079-9840-4286-ab92-e65be0885f95

PSSH v0 and v1

PSSH Box 有两个版本:版本 0 和版本 1。

虽然版本 0 是最常用的,但版本 1 是“推荐的”版本,但在撰写本文时尚未得到更广泛的采用。

在版本 1 中,系统 ID 为“1077efec-c0b2-4d02-ace3-3c1e52e2fb4b”的 PSSH 盒被称为“通用 PSSH 盒” - 这是所有 DRM 系统实现标准化的一步。

这是在 EME 规范“cenc”初始化数据格式中定义的。

版本 0 的不同之处仅在于,它不包含KID-count和KID list与上面的链接中显示的内容相比。

这些你应该知道 pssh0 的含义了吧。

如果你对 DRM 感兴趣,你可以阅读这里 深入理解 DRM 系列

阅读更多

You Can Speak "Hi" to Me in Those Ways