离线drm。使用 exoplayer 获取离线安全内容

offline drm. using exoplayer for offline secure content

我能否在 SD 卡上下载具有 DRM 保护的视频,并仅在我使用 Exoplayer 的应用程序或以某种方式安全保存的视频中播放。我不希望用户可以将我的视频复制到另一台设备,并且我希望将其保存在 SD 卡上,因为用户可以下载的视频大小和数量

现在我决定使用 Facebook conceal library。快速简便的加密方法。我下载我的内容并将其传递给隐藏库,当我想播放视频时使用字节流来读取视频部分。

但如果您找到更好更简单的方法,请告诉我。

你可以找到一个例子here

您可以使用Exoplayer 进行离线观看。但是您必须从 DrmSessionManager 扩展您自己的 class。这里的Key是在mediaDrm.getKeyRequest.

中使用MediaDrm.KEY_TYPE_OFFLINE作为keyType

mediaDrm.provideKeyResponse 中,您需要获取 KeySetId 并稍后在对同一视频发出另一个请求时使用 mediaDrm.restoreKeys

也不要忘记在恢复密钥后使用 STATE_OPENED_WITH_KEYS 设置播放器的状态。

您可以在此处找到更多相关信息: http://developer.android.com/reference/android/media/MediaDrm.html#KEY_TYPE_OFFLINE https://developer.android.com/reference/android/media/MediaDrm.html#restoreKeys(byte[],byte[])

在最新版本的 ExoPlayer 2.2.0 中,它提供了内置于 ExoPlayer 中的此功能。 ExoPlayer 有一个助手 class 可以下载和刷新离线许可证密钥

OfflineLicenseHelper.java
/**
 * Helper class to download, renew and release offline licenses. It utilizes {@link
 * DefaultDrmSessionManager}.
 */
public final class OfflineLicenseHelper<T extends ExoMediaCrypto> {

您可以从 ExoPlayer repo

获取最新代码

如需更多灵感,您可以查看此已关闭的 issue

我创建了一个用于 DRM 离线播放的示例应用程序 content.You 可以从 here

访问它