在本篇文章中,我们将了解Apple推出的FairPlay DRM解决方案(主要用于在iOS、tvOS和macOS设备上安全分发内容)。让我们一起来看下FairPlay DRM的重要构成、基本工作流和一些有趣的功能。
什么是Apple FairPlay?
FairPlay是Apple公司的DRM解决方案,它使用HLS协议安全地传输流媒体。iOS, tvOS和macOS原生支持FairPlay DRM。
Apple的FairPlay DRM向内容提供商提供技术和指导,包括:
- 对内容编码
- 安全地存储密钥和对应的密钥ID
- 使用播放器端的技术,安全地与播放器交换密钥,以及请求DRM密钥、解密视频、解码以及显示内容。
在本篇文章中,我们将聚焦FairPlay DRM,以下是我们将要了解的内容。
- FairPlay支持的算法
- FairPlay的重要构成
- FairPlay的工作原理
FairPlay DRM的重要构成
在深入了解FairPlay以前,让我们先看看在FairPlay DRM讨论中反复提到的主要模块。
HLS打包器
在加密视频之前,必须先使用HLS协议打包视频。HLS是Apple公司开发的流媒体协议,用于ABR转码技术,并且支持MPEG-TS(ts)或者分段mp4(fmp4)容器格式的文件存储。
使用SAMPLE-AES和AES-128加密
在打包后,必须使用AES-128 CBC模式加密内容(CBC代表Cipher Block Chaining,即密文分组链接)。
CBC模式通过上一个分组加密输出影响当前分组。
- 使用初始化向量(Initialization Vector或IV),可以确保即使同一明文(输入)用同一密钥被独立加密数次,也能生成不同的密文(加密过程中的输出)。
- IV是随机的,这样可以阻止黑客通过观察密文,识别重复模式并获取密钥。
通过Apple FairPlay,你可以使用SAMPLE-AES或AES-128加密视频。
在我们了解SAMPLE-AES和AES-128的区别之前,请记住这两种技术都使用了AES-128(请阅读DRM 的基本组成部分:EME、CDM、AES、CENC 和密钥)加密,只是应用在视频上的方式不同。让我们看看它们是如何实现的。
SAMPLE-AES
在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的目标是加密一小部分有价值的音视频内容,以节省处理资源和电池电量。
想要了解更多细节,请参考Apple的MPEG-2 Stream Encryption Format for HTTP Live Streaming规范:https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/HLS_Sample_Encryption/Intro/Intro.html#//apple_ref/doc/uid/TP40012862-CH5-SW1
下面是m3u8播放清单中SAMPLE-AES的表示方式:
- EXT-X-KEY显示:SAMPLE-AES
- 后接内容密钥(Content Key)的URI
- IV(初始化向量)和密钥一起使用
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:9.96,
#EXT-X-KEY:METHOD=SAMPLE-AES,URI="https://dummyurl/test.key",IV=0x73fbe3277bdf0bfc5217125bde4ca589
test_0.ts
#EXTINF:10,
test_1.ts
#EXTINF:10,
注意:给不了解m3u8的朋友科普一下,m3u8用于HLS视频流,描述了可用码率-分辨率组合数量、视频切片数量、每个切片长度以及切片播放顺序、加密细节、广告插入点等。请查看
https://datatracker.ietf.org/doc/html/rfc8216 了解更多细节。
AES-128
在AES-128技术中,切片(包括音频和视频)通过AES-128、CBC模式和PKCS7填充(Public-Key Cryptography Standards,公钥密码标准)完全加密。通过IV或者媒体序列号(代替IV),CBC在每个切片边界处重新启动。
下面是AES-128在m3u8文件中的表示方式:
- EXT-X-KEY显示:AES-128
- 后接内容密钥的URI
- IV(初始化向量)和密钥一起使用
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:9.96,
#EXT-X-KEY:METHOD=AES-128,URI="https://dummyurl/test.key",IV=0x73fbe3277bdf0bfc5217125bde4ca589
test_0.ts
#EXTINF:10,
test_1.ts
#EXTINF:10,
客户端应用
客户端应用是指用来在Apple操作系统(比如iOS、tvOS和macOS)上播放视频的应用或者播放器。
- 它负责向许可证服务器发送请求信息以获取解密密钥。
- 内容服务提供商可以使用Apple的示例代码开发自己的FairPlay客户端应用或者使用由DRM解决方案供应商提供FairPlay SDK。
AVFoundation
AVFoundation的最佳定义来自Apple:
AVFoundation是一个全功能框架,用于处理iOS、macOS、watchOS和tvOS上基于时间的音视频媒体。通过AVFoundation,你可以轻松播放、创建和编辑QuickTime电影以及MPEG-4文件、播放HLS视频流并为你的App构建强大的媒体功能。
App Delegate
App Delegate是应用的根对象,充当应用程序的“控制器”。当其连接的对象达到某种状态或者发生某个事件时,App Delegate会获得通知。在FairPlay中,App Delegate负责播放器、AVFoundation框架和密钥服务器之间的协调和通信。
密钥服务器和密钥安全模块
- 密钥服务器管理用于加密和解密FairPlay所保护内容的密钥。
- 密钥安全模块(Key Security Module,KSM):
- 接收和解密来自播放器的许可证请求。来自播放器的请求被称为SPC(Server Playback Context,服务器播放上下文)。
- 将内容密钥(由密钥服务器返回)装入CKC(Content Key Context,内容密钥上下文)信息中,发送回给播放器。
- Apple允许你使用它们的示例参考代码实现自己的KSM
- Apple同时提供测试向量来测试KSM实现。你可以使用这些测试向量检查你的KSM实现是否能够:
- 妥善处理到来的SPC信息,然后
- 将其正确格式化并返回给播放器有效的CKC信息。
FairPlay DRM工作原理
让我们来看下Fairplay的重要组成部分如何相互交互,从而实现FairPlay加密内容的播放。
第1步:用户打开内容提供商的App,然后按下“播放键”,开始观看某部电影。
第2步:应用通知AVFoundation它需要播放视频,并向HLS视频流提供m3u8播放列表的详细信息。
第3步:AVFoundation下载并解析m3u8文件。
第4步:AVFoundation在m3u8中搜索#EXT-X-KEY,以检查视频是否被加密。如果内容已被加密,AVFoundation将向AVFoundation App Delegate请求内容密钥并解密内容。
第5步:作为回应,App Delegate向AVFoundation框架请求生成SPC信息。
第6步:收到来自AVFoundation的SPC后,App Delegate将其发送给密钥服务器。
- 密钥服务器中的KSM打开SPC
- 密钥服务器使用SPC中的信息查找内容密钥
- 发送内容密钥至KSM,KSM将其放入CKC(内容密钥上下文)中
第7步:KSM向AVFoundation App Delegate发送CKC。App Delegate将CKC推送至AVFoundation中。
第8步:AVFoundation使用CKC中的内容密钥解密、解码,然后向用户安全地播放内容。
以上就是FairPlay DRM的基本工作流程。接下来,我们一起来了解FairPlay中几个有趣的功能。
获取加密密钥的AVContentKeySession
AVContentKeySession是AVFoundation中处理解密密钥的工具,于WWDC 2017宣布推出。它提供了对内容密钥加载和生命周期的更多控制,目标是将密钥加载与媒体播放生命周期解耦。
为什么AVContentKeySession如此重要?
在基本的FairPlay工作流中,播放开始后才加载内容密钥。在用户体验方面,这意味着用户需要等待SPC-CKC工作流完成之后才开始播放视频。这种等待增加了“首屏延迟(Startup Delay)”和 “延迟(Latency)”,对终端用户很不友好。
然而,使用AVContentKeySession,,应用程序就可以在用户按下播放键之前请求内容密钥(被称为“密钥预加载”)。
通过预加载密钥,内容提供商可以减少首屏延迟(延迟)并提升用户体验。
视频租赁的双到期时间窗口
Apple FairPlay还拥有“双到期时间窗口(Dual Expiry Windows)”,这一功能可以和持久密钥(Persistent Key)结合使用实现离线播放。持久密钥是指密钥可以:
- 安全地存储在设备上。
- 在预定义时间段播放租赁内容,而无需联系许可证服务器(离线播放)。
在租赁商业模式中,需要这样定义两个到期窗口:
- 第一个窗口:当用户租借电影时,电影可以在30天的时间窗口内观看(举例)。
- 第二个窗口:用户一按下播放键,电影必须在48小时内观看。第二个时间窗口到期后,30天的时间窗口也会到期。
为了说明这种租赁模式,FairPlay推出了“双到期时间窗口”这一功能,其中:
- 来自许可证服务器中的第一个密钥确立了更长的租赁期(存储期)。
- 第二个密钥在用户开始播放视频时获得,它取代了第一个密钥(播放期)。当超过第二个密钥的过期窗口,用户就无法访问或者播放视频内容了。
- 假设用户在租赁电影后,从来没有观看过。在这种情况下,电影的第一个密钥成为系统上的唯一密钥,超过有效期后它会自动失效。
哪些平台支持FairPlay?
以下平台都支持FairPlay:
- 使用EME(加密媒体扩展,Encrypted Media Extensions)的Safari浏览器
- iOS设备
- Apple TV
- Airplay(Apple的无线内容传输协议)
作者:Krishna Rao Vijayanagar
原文:https://ottverse.com/apple-fairplay-streaming-drm-how-does-it-work/
本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/23272.html