Clash自定义规则的类型
在本篇文章中,我们将了解Apple推出的FairPlay DRM解决方案(主要用于在iOS、tvOS和macOS设备上安全分发内容)。让我们一起来看下FairPlay DRM的重要构成、基本工作流和一些有趣的功能。
使用播放器端的技术,安全地与播放器交换密钥,以及请求DRM密钥、解密视频、解码以及显示内容。
在深入了解FairPlay以前,让我们先看看在FairPlay DRM讨论中反复提到的主要模块。
在加密视频之前Clash自定义规则的类型,必须先使用HLS协议打包视频。HLS是Apple公司开发的流媒体协议,用于ABR转码技术,并且支持MPEG-TS(ts)或者分段mp4(fmp4)容器格式的文件存储。
使用初始化向量(Initialization Vector或IV),可以确保即使同一明文(输入)用同一密钥被独立加密数次,也能生成不同的密文(加密过程中的输出)。
在我们了解SAMPLE-AES和AES-128的区别之前,请记住这两种技术都使用了AES-128(请阅读构建DRM系统的重要基石——EME、CDM、AES、CENC和密钥)加密,只是应用在视频上的方式不同。让我们看看它们是如何实现的。
在SAMPLE-AES技术中,你无需加密整个视频,只需使用AES-128的CBC模式加密音频数据包和视频帧的sample,这样一来,就可以节省加密和解密过程中的功耗(尤其在视频分辨率增加的情况下)。
比如,FairPlay协议规定,在H.264/AVC码流中,如果NAL单元类型是1或5,那么NAL就会被加密;其他情况则不会被加密。
为什么?因为单元类型为1和5的时候,NAL包含了非IDR和IDR帧信息。在视频编解码器的码流中,IDR帧代表了新的视频切片的开始。没有IDR帧,其他帧就无法被解码(直到下一个IDR或者I帧到达)。
这说明了SAMPLE-AES的目标是加密一小部分有价值的音视频内容,以节省处理资源和电池电量。
注意:给不了解m3u8的朋友科普一下,m3u8用于HLS视频流,描述了可用码率-分辨率组合数量、视频切片数量、每个切片长度以及切片播放顺序、加密细节、广告插入点等。请查看
在AES-128技术中,切片(包括音频和视频)通过AES-128、CBC模式和PKCS7填充(Public-Key Cryptography Standards,公钥密码标准)完全加密。通过IV或者媒体序列号(代替IV),CBC在每个切片边界处重新启动。
客户端应用是指用来在Apple操作系统(比如iOS、tvOS和macOS)上播放视频的应用或者播放器。
内容服务提供商可以使用Apple的示例代码开发自己的FairPlay客户端应用或者使用由DRM解决方案供应商提供FairPlay SDK。
AVFoundation是一个全功能框架,用于处理iOS、macOS、watchOS和tvOS上基于时间的音视频媒体。通过AVFoundation,你可以轻松播放、创建和编辑QuickTime电影以及MPEG-4文件、播放HLS视频流并为你的App构建强大的媒体功能。
App Delegate是应用的根对象,充当应用程序的“控制器”。当其连接的对象达到某种状态或者发生某个事件时,App Delegate会获得通知。在FairPlay中,App Delegate负责播放器、AVFoundation框架和密钥服务器之间的协调和通信。
接收和解密来自播放器的许可证请求。来自播放器的请求被称为SPC(Server Playback Context,服务器播放上下文)。
将内容密钥(由密钥服务器返回)装入CKC(Content Key Context,内容密钥上下文)信息中,发送回给播放器。
Apple同时提供测试向量来测试KSM实现。你可以使用这些测试向量检查你的KSM实现是否能够:
让我们来看下Fairplay的重要组成部分如何相互交互,从而实现FairPlay加密内容的播放。
第2步:应用通知AVFoundation它需要播放视频,并向HLS视频流提供m3u8播放列表的详细信息。
第8步:AVFoundation使用CKC中的内容密钥解密、解码,然后向用户安全地播放内容。
以上就是FairPlay DRM的基本工作流程。接下来,我们一起来了解FairPlay中几个有趣的功能。
AVContentKeySession是AVFoundation中处理解密密钥的工具,于WWDC 2017宣布推出。它提供了对内容密钥加载和生命周期的更多控制,目标是将密钥加载与媒体播放生命周期解耦。
在基本的FairPlay工作流中,播放开始后才加载内容密钥。在用户体验方面,这意味着用户需要等待SPC-CKC工作流完成之后才开始播放视频。这种等待增加了“首屏延迟(Startup Delay)”和 “延迟(Latency)”,对终端用户很不友好。
然而,使用AVContentKeySession,,应用程序就可以在用户按下播放键之前请求内容密钥(被称为“密钥预加载”)。
Apple FairPlay还拥有“双到期时间窗口(Dual Expiry Windows)”,这一功能可以和持久密钥(Persistent Key)结合使用实现离线播放。持久密钥是指密钥可以:
第二个窗口:用户一按下播放键,电影必须在48小时内观看。第二个时间窗口到期后,30天的时间窗口也会到期。
第二个密钥在用户开始播放视频时获得,它取代了第一个密钥(播放期)。当超过第二个密钥的过期窗口,用户就无法访问或者播放视频内容了。
假设用户在租赁电影后,从来没有观看过。在这种情况下,电影的第一个密钥成为系统上的唯一密钥,超过有效期后它会自动失效。
我希望本篇对FairPlay的介绍能够对你有帮助。Apple开发者网页()上有大量信息(开发指南和示例代码等)可以帮助你实现FairPlayDRM。
本文为澎湃号作者或机构在澎湃新闻上传并发布,仅代表该作者或机构观点,不代表澎湃新闻的观点或立场,澎湃新闻仅提供信息发布平台。申请澎湃号请用电脑访问。