Google Widevine及其工作原理

Posted LiveVideoStack_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Google Widevine及其工作原理相关的知识,希望对你有一定的参考价值。

翻译、编辑:Alex

技术审校:刘姗

本文来自OTTVerse,作者为Krishna Rao Vijayanagar。

▲扫描图中二维码了解音视频技术大会更多信息▲

Easy-Tech#018#**——**Widevine DRM

Google Widevine是一种常用的DRM解决方案,支持android操作系统、多种智能电视、浏览器等。Widevine还支持MPEG-DASH、HLS、MSS以及CENC和CMAF,这种广泛的支持使它成为视频传输中非常受欢迎的DRM解决方案。

在本文中,我们将深入了解谷歌的Widevine DRM解决方案——它是一种流行的DRM解决方案,在Web和移动生态系统中获得了广泛支持。

01/Widevine DRM

Widevine DRM是谷歌旗下的DRM解决方案(谷歌于2010年收购了Widevine)。

通过之前文章对DRM的了解,我们已经知道,大部分商业DRM解决方案有着严格的版权管理和内容加密解密系统。但它们无法处理用户身份验证,谷歌的Widevine也不例外。

在本文中,让我们一起来了解Widevine的组成部分以及它的工作原理。

02/Widevine的历史和版本

我们先来了解Widevine的历史及其支持。Widevine一共有两个版本,分别是Classic和Modular。

Widevine Classic

Widevine Classic仅在传统设备中支持,并且要求媒体被打包成专有的**.wvm**格式。它曾支持旧版本的Android系统(3.1~5.1)、传统智能电视、Google TV等等,现在已不再使用。

Widevine Modular

Widevine Modular是Widevine的当前版本,支持MPEG-DASH、HLS和MSS协议,同时支持CMAF、CENC和html5标准(如EME和MSE)。

03/Widevine DRM的构成

Widevine主要由以下几部分构成:

1. CENC、CDM、EME和MSE

我们在《构建DRM系统的重要基石——EME、CDM、AES、CENC和密钥》中已详细介绍了它们,本文就不再赘述了。

2. Widevine许可证服务器

Widevine提供一个许可证服务器,其中包含了安全加密和解密媒体所需的信息。它有两个主要工作:

  • 打包器将媒体打包和加密后,信息被发送到许可证服务器,服务器利用这些信息来识别许可证密钥,并将密钥与电影对应。

  • 在播放期间,许可证服务器负责验证播放器对许可证和加密密钥的请求,从密钥库(数据库)中获取解密密钥,并使用许可证和解密密钥对播放器(客户端)做出响应。打包器、许可证服务器和播放器之间的通信都经过加密并通过 HTTPS 发送。

3. Shaka 打包器

Widevine提供了一个完全开源的MPEG-DASH打包软件——Shaka Packager,它:

  • 将所有的视频文件转换成fMP4格式(这里指的是ABR技术)。

  • 将每个文件分割成同等大小的切片。

  • 使用从Widevine许可证服务器获取的信息,根据CENC加密每个文件。

  • 创建一个mpd文件或者清单文件,其中包括描述DASH打包媒体的所有信息。你也可以插入CENC pssh(Protection System Specific Header)识别使用的DRM系统。

下面是一个使用Widevine DRM的mpd:

<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="eb676abb-cb34-5e96-bbcf-616630f1a3da" xmlns:cenc="urn:mpeg:cenc:2013"/>
<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
<cenc:pssh xmlns:cenc="urn:mpeg:cenc:2013">AAAAW3Bzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAADsIARIQ62dqu8s0Xpa7z2FmMPGj2hoNd2lkZXZpbmVfdGVzdCIQZmtqM2xqYVNkZmFsa3IzaioCSEQyAA==</cenc:pssh>
</ContentProtection>

显然上面使用的是CENC(通用加密)。你还可以看到pssh值和密钥ID(KID)。当播放器向许可证服务器请求正确的电影许可证时,这些唯一信息十分重要。

4. OEMCrypto Module

OEMCrypto Module使用来自播放器(以及许可证服务器)的信息解密内容。OEMCrypto Module位于与设备硬件绑定的可信层(Trusted Layer)中。它使用加密的许可证信息来解密媒体,并将媒体发送到视频堆栈(一般情况下,解密后的视频会被立即解码以及渲染)。

04/Widevine DRM工作原理

这一部分,我们将了解Widevine的工作原理。

第1步: 当用户按下“播放”时,第1步便开始了。应用从CDN中下载mpd。在解析mpd之后,便很容易确定该视频是否使用Widevine加密视频。浏览器从内容中提取初始化数据(initData)并将其作为事件发送到播放器。

注意: 我们假设这时用户身份已经得到验证。由于Widevine没有该功能,所以由应用来处理。

第2步: 播放器无法解密内容,需要专业的解密软件的帮助。所以,它将初始化信息发送给CDM(Content Decryption Module )。还记得CDM吗?我们曾在之前文章中详细讨论过。

第3步: CDM接收到来自播放器的初始化信息,并创建“许可证请求”,然后将其发送回给播放器。

第4步: 播放器接收到许可证请求后,将该请求通过代理发送给Widevine许可证服务器。许可证请求也已被加密,所以不会在传输过程中被访问或者破解。

第5步: 许可证服务器接收到播放器发送的请求,然后:

  • 解密请求,提取初始化信息,并通过初始化信息找到其数据库中的许可证。

  • 找到许可证后,将它加密,然后发送给播放器。

  • 加密信息包括解密内容的密钥以及许可证信息(过期时间等)。

第6步: 播放器接收到许可证服务器发送的许可证,将它传递给CDM(通过EME)。信息既已被加密,播放器和其他软件都无法读取或者滥用信息。

第7步: 因为CDM不在设备的可信层中,它必须将信息传递给位于可信层中的OEMCrypto Module。解密实际发生在OEMCrypto Module中。在一些实现中,解码也在OEMCrypto Module中。由浏览器对容器进行实际解析。

第8步: 一旦内容被解复用、解密或者解码,便会以视频切片的形式发送给屏幕,并不会存储在设备上。

下面是一张来自Widevine的流程图,说明了我们刚刚所讨论的内容。

05/Widevine安全级别——L1、L2和L3

有趣的是,Widevine还拥有三个安全级别——L1、L2和L3。

在我们学习安全级别之前,让我们先来了解TEE(可信执行环境,Trusted Execution Environment)。维基百科这样定义TEE:

主处理器的安全区域,能够确保加载代码和数据的私密性和完整性。

TEE对于DRM而言至关重要,因为它极大提升了安全性,并为确保解密密钥和解密视频不被盗取和泄露发挥了关键作用。

理解这些之后,让我们来看下Widevine安全级别 L1、L2和 L3的区别。

安全级别L1

  • L1是Widevine中最高的安全级别,提供硬件级别的解密(比软件安全)。

  • 内容解密、媒体解码以及渲染在TEE中完成。

  • 如果你想从服务商那里获得高清内容视频服务,你的设备需要经过认证达到L1标准。

安全级别L2

  • 在L2,只有媒体解密在TEE中执行。

  • 解密视频被发送给应用,进行解码和渲染。

安全级别L3

  • L3最不安全,用于没有TEE的低端硬件。

  • 加密在软件-CDM(像是浏览器中的那些)中进行。

  • 在L3安全级别的设备中,内容供应商阻止加密的高清视频播放。

06/商业规则

下方的数据片段说明可以插入Widevine的商业规则和许可证规则。它非常明确地解释了特定资产的租赁、播放、续订和许可期限。内容供应商可以使用它来创建复杂的规则以满足他们的商业模式。


   "payload":"<license challenge>",
   "content_id":"<content id>",
   "provider":"<provider>",
   "allowed_track_types":"<types>",
   "content_key_specs":[
      
         "track_type":"<track type 1>"
      ,
      
         "track_type":"<track type 2>"
      ,
      "..."
   ],
   "policy_overrides":
      "can_play":"<can play>",
      "can persist":"<can persist>",
      "can_renew":"<can renew>",
      "rental_duration_seconds":"<rental duration>",
      "playback_duration_seconds":"<playback duration>",
      "license_duration_seconds":"<license duration>",
      "renewal_recovery_duration_seconds":"<renewal recovery duration>",
      "renewal_server_url":"<renewal server url>",
      "renewal_delay_seconds":"<renewal delay>",
      "renewal_retry_interval_seconds":"<renewal retry interval>",
      "renew_with_usage":"<renew with usage>"
   


哪里支持Widevine?

Widevine Modular(或Widevine)在多个平台上获得了支持,比如:

  • Android (4.4+)

  • Android TV

  • Amazon Fire TV

  • Chromecast

  • Smart TV

  • Chrome、Firefox、Edge等浏览器

如果硬件厂商想要支持Widevine,他们可以联系谷歌并签订合同以获得需要的支持(如CDM、测试向量等)。

07/结   语

我希望现在你已经很好地理解了谷歌Widevine DRM的工作原理。网上有很多信息(源代码、播放器和SDK)可以帮助你更加深入地了解Widevine。

我们下次再见,保重!

致谢:

本文已获得作者Krishna Rao Vijayanagar授权翻译和发布,特此感谢。

原文链接:

https://ottverse.com/widevine-drm-hUow-does-it-work/


以上是关于Google Widevine及其工作原理的主要内容,如果未能解决你的问题,请参考以下文章

在 Chromecast 上播放 Widevine DRM

Google Widevine DRM 密钥轮换

获取 Widevine 许可证服务器密钥

理解直播及其工作原理

理解ABR及其工作原理

Apple FairPlay DRM及其工作原理