该库允许解析/序列化与 Widevine 或 PlayReady 有效负载的 PSSH 盒式
该模块支持 macOS 10.13+ 和 iOS 11.0+。其他平台(watchOS 4.0+、tvOS 11.0+、Windows、Linux、Android)有实验性支持
PSSH 是一个标准化的容器,它包含用于保护数字内容的安全保护系统特定的元数据。因此,PSSH 是 DRM 信号传输的一部分。
PSSH 不包含加密密钥本身(这是一个秘密),但它包含有关加密的必要信息,例如密钥 ID、加密方案以及其他从许可服务器获取密钥所需的信息。
字段名称 | 类型 | 描述 |
---|---|---|
盒式大小 | UInt32 (大端序) | 盒式容器字节数量,包括 '盒式大小' 4 个字节 |
魔法头 | 字符串(4 个字节) | 常量盒式容器魔法头 - "pssh"(0x70,0x73,0x73,0x68) |
PSSH 版本 | UInt8 | PSSH 盒式有两种版本:0(常用)和 1(新'推荐') |
标志 | 字节数组(3 个) | PSSH 盒式位标志 |
系统 ID | 字节数组 | 常量系统 UUID 字节数组(16 个) |
初始化数据大小 | UInt32 (大端序) | PSSH 盒式初始化数据大小(字节) |
初始化数据 | 字节数组 | PSSH 盒式初始化数据。根据系统 ID 包含有效负载实例的原始数据 |
系统 ID 变体
DRM 技术 | 标识符(系统 ID) |
---|---|
Widevine | edef8ba9-79d6-4ace-a3c8-27dcd51d21ed |
PlayReady | 9a04f079-9840-4286-ab92-e65be0885f95 |
FairPlay | 94ce86fb-07ff-4f43-adb8-93d2fa968ca2 |
通用(版本 1) | 1077efec-c0b2-4d02-ace3-3c1e52e2fb4b |
更多详细信息,请参阅 Axinom
Microsoft DRM 系统。PlayReady 初始化数据混合了二进制(PSSH 数据和内部记录)和 XML(记录头)格式
二进制 PlayReady PSSH 数据是顶级模型。包含以下字段
字段名称 | 类型 | 描述 |
---|---|---|
初始化数据大小 | UInt32(小端序) | 数据字节计数,包括 '初始化数据大小' 4 个字节 |
记录计数 | UIn16(小端序) | PlayReady 记录计数 |
记录数据 | 字节数组 | 记录数据序列 |
记录数据序列中的每个项包含以下字段
字段名称 | 类型 | 描述 |
---|---|---|
记录类型 | UInt16(小端序) | 记录类型键:1 - 记录头,2 - 保留,3 - 内部许可证存储 |
记录值大小 | UIn16(小端序) | 记录对象大小(字节) |
值数据 | 字节数组 | 记录对象数据。包含有效负载实例的原始数据记录类型 |
更多详细信息,请参阅 Microsoft 文档
使用的Widevine PSSH数据架构来自protobuf模型。
SwPSSH可通过SPM获取。
.package(url: "https://github.com/mIwr/SwPSSH.git", .from(from: "1.0.0"))
SwPSSH可用于CocoaPods。要安装模块,只需将其添加到Podfile。
- iOS
platform :ios, '11.0'
...
pod 'SwPSSH'
- macOS
platform :osx, '10.13'
...
pod 'SwPSSH'
- tvOS
platform :tvos, '11.0'
...
pod 'SwPSSH'
- watchOS
platform :watchos, '4.0'
...
pod 'SwPSSH'
与PSSH站框容器工作的主类是PSSHBox。它提供了解析和序列化站框容器上普遍数据的方法。当您成功解析了PSSH站框后,可以将初始化数据转换为Widevine或PlayReady。
import SwPSSH
...
let pssh: PSSHBox? = PSSHBox.from(b64EncodedBox: PSSHBoxEncoded)
let playReadyPayload: PlayReadyPsshData? = pssh?.playReadyPayload//Tries to parse PlayReady PSSH data from raw init data
let wdvPayload: WidevinePsshData? = pssh?.wdvPayload//Tries to parse Widevine PSSH data from raw init data