10个版本
0.1.9 | 2024年7月28日 |
---|---|
0.1.8 | 2024年7月26日 |
0.1.6 | 2024年6月13日 |
0.1.5 | 2024年2月27日 |
0.1.0 | 2024年1月28日 |
#436 在 视频
每月下载量749
在 2 个物品中使用 (通过 dash-mpd)
57KB
1K SLoC
pssh-box
此包定义了Rust数据结构,允许您存储、解析和序列化保护系统特定标题(PSSH)盒子,这些盒子为数字版权管理(DRM)系统的初始化提供数据。
PSSH盒子用于
-
在MP4片段中类型为
pssh
的MP4盒子 -
在DASH MPD显示中的
<cenc:pssh>
元素中 -
传递给Web浏览器加密媒体扩展的DRM初始化数据
-
m3u8播放列表的EXT-X-SESSION-KEY字段中
一个PSSH盒子包含单个DRM系统的信息。此库支持以下DRM系统的PSSH数据格式
- 谷歌拥有的Widevine,广泛用于DASH流媒体
- 微软拥有的PlayReady,广泛用于DASH流媒体
- 华为拥有的WisePlay
- Irdeto
- Marlin
- Nagra
- Netflix为DASH类似流媒体使用的非官方Apple FairPlay变体
- 通用加密
PSSH盒子包含(取决于DRM系统)关于获取内容密钥的key_ID的信息,所使用的加密方案(例如cenc、cbc1、cens或cbcs),许可服务器URL和校验和数据。
功能
此包提供以下功能
-
从二进制缓冲区解析PSSH盒子(如在MP4片段中找到),或从base64编码的字符串(如在MPD显示中的
<cenc:pssh>
元素中找到),或从十六进制编码的字符串。 -
扫描二进制缓冲区以查找PSSH盒子的位置,使用函数
find_iter
。 -
使用函数
pprint
美化打印PSSH。 -
将PSSH盒子序列化为二进制、Base64或十六进制(基16)格式,使用在
to_bytes()
、to_base64()
和to_hex()
方法上对一个PsshBox
结构体进行。
在example/decode-pssh.rs
中提供了一个用于解码PSSH盒子和PSSH数据(以各种格式)的命令行实用工具。
如果您想在Web应用程序中使用此功能,可能会对pssh-box-wasm库感兴趣,该库提供了将此代码用作WebAssembly的功能。
使用方法
let boxes = from_base64("AAAAZ3Bzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAEcSEKqL5HpT2ymw4FM7KEUKHLsaA3NmciIkYWE4YmU0N2EtNTNkYi0yOWIwLWUwNTMtM2IyODQ1MGExY2JiKgJTREjj3JWbBg==")
.unwrap();
assert_eq!(boxes.len(), 1);
let pssh = &boxes[0];
assert_eq!(pssh.system_id, WIDEVINE_SYSTEM_ID);
if let PsshData::Widevine(ref pd) = pssh.pssh_data {
assert!(pd.provider.clone().is_some_and(|p| p.eq("sfr")));
assert_eq!(pd.key_id[0], hex::decode("aa8be47a53db29b0e0533b28450a1cbb").unwrap());
assert_eq!(pd.content_id, Some(hex::decode("61613862653437612d353364622d323962302d653035332d336232383435306131636262").unwrap()));
}
构建
在构建过程中使用protoc编译器将Widevine PSSH数据的protobuf接口定义转换为Rust结构体。这发生在build.rs
文件中。默认配置使用预先构建的protobuf编译器,必须在本地安装(例如,从Debian软件包protobuf-compiler
安装)。
作为替代方案,如果启用了vendored-protoc
功能,则使用protobuf-src
crate构建protoc编译器的供应商版本。这需要一个可工作的C++编译器和cmake支持,并且通常不太可靠(特别是protobuf的abseil-cpp组件往往导致在稍微不寻常的平台上的构建失败)。在Windows上构建的最简单解决方案似乎是MSYS2的UCRT64环境;请参阅我们的GitHub持续集成工作流程,了解一个有效的配方。
许可证
此项目使用MIT许可证。有关更多信息,请参阅LICENSE
文件。
依赖项
~5–9MB
~151K SLoC