点击上方“LiveVideoStack”关注我们
翻译、编辑:Alex 技术审校:刘姗 本文来自OTTVerse,作者为Krishna Rao Vijayanagar。
▲扫描图中二维码或点击阅读原文▲
了解音视频技术大会更多信息
Apple FairPlay
Easy-Tech
#020#
在本篇文章中,我们将了解Apple推出的FairPlay DRM解决方案(主要用于在iOS、tvOS和macOS设备上安全分发内容)。让我们一起来看下FairPlay DRM的重要构成、基本工作流和一些有趣的功能。
什么是Apple FairPlay?
FairPlay是Apple公司的DRM解决方案,它使用HLS协议安全地传输流媒体。iOS, tvOS和macOS原生支持FairPlay DRM。
Apple的FairPlay DRM向内容提供商提供技术和指导,包括:
在本篇文章中,我们将聚焦FairPlay DRM,以下是我们将要了解的内容。
FairPlay DRM的重要构成
在深入了解FairPlay以前,让我们先看看在FairPlay DRM讨论中反复提到的主要模块。
1. HLS打包器
在加密视频之前,必须先使用HLS协议打包视频。HLS是Apple公司开发的流媒体协议,用于ABR转码技术,并且支持MPEG-TS(ts)或者分段mp4(fmp4)容器格式的文件存储。
2. 使用SAMPLE-AES和AES-128加密
在打包后,必须使用AES-128 CBC模式加密内容(CBC代表Cipher Block Chaining,即密文分组链接)。
CBC模式通过上一个分组加密输出影响当前分组。
通过Apple FairPlay,你可以使用SAMPLE-AES或AES-128加密视频。
在我们了解SAMPLE-AES和AES-128的区别之前,请记住这两种技术都使用了AES-128(请阅读构建DRM系统的重要基石——EME、CDM、AES、CENC和密钥)加密,只是应用在视频上的方式不同。让我们看看它们是如何实现的。
2.1. 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的表示方式:
#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=0x73fbe3277bdf0bfc5217125bde4ca589test_0.ts#EXTINF:10,test_1.ts#EXTINF:10,
注意:给不了解m3u8的朋友科普一下,m3u8用于HLS视频流,描述了可用码率-分辨率组合数量、视频切片数量、每个切片长度以及切片播放顺序、加密细节、广告插入点等。请查看
https://datatracker.ietf.org/doc/html/rfc8216 了解更多细节。
2.2. AES-128
在AES-128技术中,切片(包括音频和视频)通过AES-128、CBC模式和PKCS7填充(Public-Key Cryptography Standards,公钥密码标准)完全加密。通过IV或者媒体序列号(代替IV),CBC在每个切片边界处重新启动。
下面是AES-128在m3u8文件中的表示方式:
#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=0x73fbe3277bdf0bfc5217125bde4ca589test_0.ts#EXTINF:10,test_1.ts#EXTINF:10,
3. 客户端应用
客户端应用是指用来在Apple操作系统(比如iOS、tvOS和macOS)上播放视频的应用或者播放器。
4. AVFoundation
AVFoundation的最佳定义来自Apple:
AVFoundation是一个全功能框架,用于处理iOS、macOS、watchOS和tvOS上基于时间的音视频媒体。通过AVFoundation,你可以轻松播放、创建和编辑QuickTime电影以及MPEG-4文件、播放HLS视频流并为你的App构建强大的媒体功能。
5. App Delegate
App Delegate是应用的根对象,充当应用程序的“控制器”。当其连接的对象达到某种状态或者发生某个事件时,App Delegate会获得通知。在FairPlay中,App Delegate负责播放器、AVFoundation框架和密钥服务器之间的协调和通信。
6. 密钥服务器和密钥安全模块
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将其发送给密钥服务器。
第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)结合使用实现离线播放。持久密钥是指密钥可以:
在租赁商业模式中,需要这样定义两个到期窗口:
为了说明这种租赁模式,FairPlay推出了“双到期时间窗口”这一功能,其中:
哪些平台支持FairPlay?
以下平台都支持FairPlay:
结语
我希望本篇对FairPlay的介绍能够对你有帮助。Apple开发者网页(https://developer.apple.com/)上有大量信息(开发指南和示例代码等)可以帮助你实现FairPlay DRM。
我们很快就会再见,保重!
致谢:
本文已获得作者Krishna Rao Vijayanagar授权翻译和发布,特此感谢。
原文链接:
https://ottverse.com/apple-fairplay-drm-how-does-it-work/
延伸阅读:
构建DRM系统的重要基石——EME、CDM、AES、CENC和密钥
喜欢我们的内容就点个“在看”吧!
本文分享自 LiveVideoStack 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!