SwPSSH 1.0.1

SwPSSH 1.0.1

mIwr 维护。



 
依赖于
SwiftProtobuf>= 0
CryptoSwift>= 0
 

SwPSSH 1.0.1

  • mIwr

SwPSSH - 保护系统特定头 (PSSH) 盒式容器 swift 实现

Swift Package Manager compatible Platform

内容

简介

该库允许解析/序列化与 Widevine 或 PlayReady 有效负载的 PSSH 盒式

该模块支持 macOS 10.13+ 和 iOS 11.0+。其他平台(watchOS 4.0+、tvOS 11.0+、Windows、Linux、Android)有实验性支持

通用的 PSSH 盒式容器架构

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

PlayReady PSSH 数据架构

Microsoft DRM 系统。PlayReady 初始化数据混合了二进制(PSSH 数据和内部记录)和 XML(记录头)格式

二进制 PlayReady PSSH 数据是顶级模型。包含以下字段

字段名称 类型 描述
初始化数据大小 UInt32(小端序) 数据字节计数,包括 '初始化数据大小' 4 个字节
记录计数 UIn16(小端序) PlayReady 记录计数
记录数据 字节数组 记录数据序列

记录数据序列中的每个项包含以下字段

字段名称 类型 描述
记录类型 UInt16(小端序) 记录类型键:1 - 记录头,2 - 保留,3 - 内部许可证存储
记录值大小 UIn16(小端序) 记录对象大小(字节)
值数据 字节数组 记录对象数据。包含有效负载实例的原始数据记录类型

更多详细信息,请参阅 Microsoft 文档

Widevine PSSH 数据架构

使用的Widevine PSSH数据架构来自protobuf模型

设置

Swift包管理器

SwPSSH可通过SPM获取。

.package(url: "https://github.com/mIwr/SwPSSH.git", .from(from: "1.0.0"))

CocoaPods

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