聊聊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

相关推荐
Mercury Random1 小时前
Qwen 个人笔记
android·笔记
苏苏码不动了1 小时前
Android 如何使用jdk命令给应用/APK重新签名。
android
aqi002 小时前
FFmpeg开发笔记(五十三)移动端的国产直播录制工具EasyPusher
android·ffmpeg·音视频·直播·流媒体
xiaoduyyy3 小时前
【Android】ToolBar,滑动菜单,悬浮按钮和可交互提示等的使用方法
android
liyy6143 小时前
Android架构组件:MVVM模式的实战应用与数据绑定技巧
android
K1t05 小时前
Android-UI设计
android·ui
吃汉堡吃到饱6 小时前
【Android】浅析MVC与MVP
android·mvc
深海呐13 小时前
Android AlertDialog圆角背景不生效的问题
android
ljl_jiaLiang13 小时前
android10 系统定制:增加应用使用数据埋点,应用使用时长统计
android·系统定制
花花鱼13 小时前
android 删除系统原有的debug.keystore,系统运行的时候,重新生成新的debug.keystore,来完成App的运行。
android