聊聊Android中的DRM工具-Widevine

曾几何时,我一直好奇,像爱奇艺、腾讯视频、优酷这些视频平台是如何控制版权的,就比如,如何防止用户下载后发布到其他渠道,最近接触了DRM技术,瞬间就懂了。

DRM介绍

DRM(Digital Rights Management),即数字版权管理,是在数字内容交易过程中,对知识产权进行保护的技术、工具和处理过程。它的目的是防止数字内容被未经授权的用户复制、修改和分发,以保护知识产权所有者的权益。在日常生活中,我们经常与 DRM 技术打交道。比如,电影上映前,我们不能在视频网站上观看电影,只能去电影院。这是内容提供(发行)商对自己的数字内容进行管理的一种结果。

DRM工作原理

先贴一张图,然后我们再做简单的说明

上图中,RAM想要给SHYAM传递小纸条,但因为距离较远,中间需要三个人进行传达,为了防止这三个人偷看小纸条内容,他们找来了HARI,HARI手上有一本密码本,每次RAM传递小纸条之前先找HARI拿到密码本,然后根据密码本的规则对小纸条内容进行加密,然后再将加密后的小纸条传递给SHYAM,这样,即使中间三个人偷看了小纸条,因为没有密码本,所以也看不懂纸条的内容。SHYAM收到小纸条后,再向HARI获取密码本,然后对小纸条内容进行解密,这样SHYAM就能看到原始内容了。

现在,我们把RAM看成是视频发行商 ,SHYAM看成是观众 ,HARI看成是版权管理商,就有了以下这种关系图

从上图中可以看出,我们想要向认证用户安全地发送一部电影。需要:

  • 向DRM厂商的服务器请求密码本
  • 然后使用密码本加密视频
  • 将电影视频发送给用户
  • 用户向DRM厂商的服务器请求密码本解密视频
  • 现在用户就可以观看电影了

这下视频版权管理是不是就一目了然了。但以上只是最初DRM的设计思想,现实中却无法正常运行,因为还没有解决多种分辨率的问题,这就需要对视频进行切片(ABR)和打包。

视频切片和打包

ABR: 通过使用ABR技术,电影可以被编码成不同的码率-分辨率组合(也称为码率阶梯)并被分割成小的视频块或者切片。每个视频切片包含几秒钟视频,可以被单独解码。

打包是指将电影分割成小的视频切片,并使用清单(manifest)或者播放列表对其进行描述。当用户想要播放电影的时候,他需要按照播放列表的信息播放。

根据可用带宽,播放器请求特定码率版本的视频切片,CDN响应后返回被请求切片。

这就结束了吗?不,这里面还存在很大的一个问题需要解决,视频的加密问题。

视频加密

前面说,视频发行商在发布视频时,需要向DRM服务商获取密码本,这里的密码本实际上是一种授权,就是说经过DRM服务商的授权,他才会对你的视频进行版权保护,并不是对视频内容进行加密,真正的视频加密还得涉及到密码学相关的技术,最常用的加密方式是AES,AES属于对称加密,这就涉及到密钥的保存。在DRM中,密钥也保存在DRM服务商手上,随着视频清单一起发送给视频播放器

好了,DRM的核心原理大概就是这些,如果想了解更详细的内容,可阅读下面的参考文献。

DRM厂商

上述DRM工作原理图中,有一个很重要的角色就是DRM服务商,目前主要有三大服务商,分别对应自己的DRM技术方案,分别是:

  • Apple FairPlay

  • Google Widevine

  • Microsoft PlayReady

国内爱奇艺最近也自主研发了自己的DRM解决方案:iQIYI DRM-S。而国内的视频平台几乎都是打包了所有的的DRM方案,以针对不同的平台和系统。以下是爱奇艺的整体DRM解决方案

Widevine介绍

Widevine仅适用于基于Chromium的操作系统、Android设备以及其他Google相关设备和浏览器。

Widevine的安全级别

  • L1

在L1级别,提供了最高的安全性。内容在设备内进行解密,并使用硬件保护,以防止原始数据泄露。通常用于高质量视频和高分辨率的流媒体。获得L1认证的设备可以播放高质量的内容。像Amazon Prime Video和Netflix等流媒体服务需要L1安全性。如果在未获得认证的设备上观看,无法播放高清或超高清的高质量内容。

  • L2

L2具有较高的安全性,但不像L1那么严格。即使设备未获得L1认证,仍然可以播放内容。一些设备使用软件来保护数据。对于较低分辨率的视频和音乐内容,可能会使用L2。如果想要享受更高质量的内容,建议使用获得L1认证的设备,而不是L2。虽然L2可能不够满足要求,但某些内容仍然可能提供高质量的视频。因此,不能一概而论地认为必须使用L1。

  • L3

L3的安全级别最低。主要用于模拟器和一些旧设备等情况,内容保护相对较弱,分析和复制相对容易。此外,一些服务如Amazon Prime Video和Netflix也可能使用L3。虽然可以使用L3,但风险较高,不应期望高质量的内容。使用L3时需要谨慎考虑这些因素。

查看Widevine级别

可以使用DRM Info App查看设备的widevine安全级别,该App可以在Google Play上找到,文末贴了App的下载链接。大多数主流制造商的智能手机通常都支持L1至L3的某一个级别。如果发现您的设备不支持Widevine,那可能是制造商为了简化流程或者您的智能手机不符合标准。

如果app打开闪退,说明设备并不支持Widevine。

测试Widevine功能

许多流媒体app都使用了Widevine,比如Youku、腾讯视频、IQIYI、YouTube、Netflix等,这里推荐使用Google的官方播放器ExoPlayer进行测试,文末提供下载链接

(重点)在Android中集成Widevine

step1:获取Widevine源码

官网下载Widevine源码,注意,AOSP默认是没有Widevine源码的,需要手动集成,因为需要跟Google签订法律协议,然后由Google授权访问Widevine代码库,具体见Google官网流程。

step2:将源码放置到vendor目录下vendor/widevine/

step3:添加编译配置

device/qcom/{product combo name}/BoardConfig.mk中添加

makefile 复制代码
#这里设置的L3级别,L1级别需要跟Google签订协议,获取Keybox
BOARD_WIDEVINE_OEMCRYPTO_LEVEL := 3

device/qcom/{product combo name}/{product combo name}.mk中添加

makefile 复制代码
PRODUCT_PROPERTY_OVERRIDES += drm.service.enabled=true
PRODUCT_PACKAGES += com.google.widevine.software.drm.xml \
              com.google.widevine.software.drm
PRODUCT_PACKAGES += libwvdrmengine

vendor/qcom/proprietary/common/config/device-vendor.mk中修改

makefile 复制代码
SECUREMSM += InstallKeybox
#L3级别需要删除oemcrypto库
#SECUREMSM += liboemcrypto
#SECUREMSM += liboemcrypto.a
SECUREMSM += libhdcpsrm

最后编译刷机,使用app工具验证即可,如果能显示Widevine级别,说明集成成功。

总结

好了,现在你应该彻底知道Widevine是怎么回事了

参考链接

中学生也能看懂的DRM

构建DRM系统的重要基石------EME、CDM、AES、CENC和密钥

爱奇艺DRM修炼之路

什么是Widevine?Widevine DRM详解

Google Widevine

Widevine安全级别查看app:

链接:pan.baidu.com/s/1lIJq-_eg... 提取码:fnk6

ExoPlayer:

链接:pan.baidu.com/s/1dUseWHIi... 提取码:nszh

相关推荐
SRC_BLUE_1730 分钟前
SQLI LABS | Less-39 GET-Stacked Query Injection-Intiger Based
android·网络安全·adb·less
无尽的大道4 小时前
Android打包流程图
android
镭封5 小时前
android studio 配置过程
android·ide·android studio
夜雨星辰4875 小时前
Android Studio 学习——整体框架和概念
android·学习·android studio
邹阿涛涛涛涛涛涛5 小时前
月之暗面招 Android 开发,大家快来投简历呀
android·人工智能·aigc
IAM四十二6 小时前
Jetpack Compose State 你用对了吗?
android·android jetpack·composer
奶茶喵喵叫6 小时前
Android开发中的隐藏控件技巧
android
Winston Wood8 小时前
Android中Activity启动的模式
android
众乐认证8 小时前
Android Auto 不再用于旧手机
android·google·智能手机·android auto
三杯温开水8 小时前
新的服务器Centos7.6 安卓基础的环境配置(新服务器可直接粘贴使用配置)
android·运维·服务器