如何在我的 Android 应用程序中集成 Widevine DRM 以保护视频
How To Integrate Widevine DRM In My Android App To Secure Videos
我正在构建一个 android 应用程序,人们可以在其中托管视频,我希望人们能够在他们的 android 设备上流式传输和下载受 DRM 保护的视频。
我对 widevine 做了很多研究,我知道它 google 是 DRM 的主要选择。
但我发现很少有关于如何将库集成到 android 应用程序以及如何获取每个视频的许可证和密钥的指南。
我已经设置了应用程序的其他部分,但老实说,我不知道从哪里开始集成 widevine。我已经检查了如何使用 exoplayer 播放视频,但我的问题是加密视频并允许人们使用 DRM 下载加密形式。
有人可以帮忙吗?
Widevine 已经部署在 Android 设备上(在几乎所有情况下),因此您只需在您的应用程序中使用它。
假设您正在播放受 DRM 保护的视频,您可能会使用 ExoPlayer。
ExoPlayer 提供有关 DRM 的文档,包括 Widevine 集成:
ExoPlayer 演示播放器甚至可能更有用,包括带有完整源代码的 Widevine 受保护内容播放示例。播放器看起来像:
可在 Demos/Main 的 ExoPlayer GitHub 上使用或修改源代码:https://github.com/google/ExoPlayer/tree/release-v2/demos/main
如果您查看用于配置的 media.exolist.json,您会看到一些与 Widevine 受保护内容相关的配置 - 例如:
"name": "Widevine DASH (MP4, H264)",
"samples": [
{
"name": "HD (cenc)",
"uri": "https://storage.googleapis.com/wvmedia/cenc/h264/tears/tears.mpd",
"drm_scheme": "widevine",
"drm_license_uri": "https://proxy.uat.widevine.com/proxy?video_id=2015_tears&provider=widevine_test"
},
您可以在每个 MediaItem (https://github.com/google/ExoPlayer/blob/release-v2/demos/main/src/main/java/com/google/android/exoplayer2/demo/PlayerActivity.java) 的演示中的 PlayerActivity 中看到如何设置 DRM:
MediaItem.DrmConfiguration drmConfiguration = mediaItem.localConfiguration.drmConfiguration;
if (drmConfiguration != null) {
if (Util.SDK_INT < 18) {
showToast(R.string.error_drm_unsupported_before_api_18);
finish();
return Collections.emptyList();
} else if (!FrameworkMediaDrm.isCryptoSchemeSupported(drmConfiguration.scheme)) {
showToast(R.string.error_drm_unsupported_scheme);
finish();
return Collections.emptyList();
}
}
在您自己的应用之外测试您的内容的一种快速方法是将其添加到 media.exolist.json 中的列表,或者使用您的视频清单和许可服务器修改现有条目 URL,然后再次编译和 运行 演示。
在服务器端,为了加密和流式传输您的视频,有几个开源打包程序可用,您可以使用它们来生成 HLS 或 DASH 视频流,并将支持主要的 DRM、Widevine、PlayReady 和 FairPlay。
对于您的情况,同样由 Google 提供的 Shaka Packager 包含有关在您的流式传输视频中包含 Widevine 保护的说明 - 请参见此处:
我正在构建一个 android 应用程序,人们可以在其中托管视频,我希望人们能够在他们的 android 设备上流式传输和下载受 DRM 保护的视频。
我对 widevine 做了很多研究,我知道它 google 是 DRM 的主要选择。
但我发现很少有关于如何将库集成到 android 应用程序以及如何获取每个视频的许可证和密钥的指南。
我已经设置了应用程序的其他部分,但老实说,我不知道从哪里开始集成 widevine。我已经检查了如何使用 exoplayer 播放视频,但我的问题是加密视频并允许人们使用 DRM 下载加密形式。
有人可以帮忙吗?
Widevine 已经部署在 Android 设备上(在几乎所有情况下),因此您只需在您的应用程序中使用它。
假设您正在播放受 DRM 保护的视频,您可能会使用 ExoPlayer。
ExoPlayer 提供有关 DRM 的文档,包括 Widevine 集成:
ExoPlayer 演示播放器甚至可能更有用,包括带有完整源代码的 Widevine 受保护内容播放示例。播放器看起来像:
可在 Demos/Main 的 ExoPlayer GitHub 上使用或修改源代码:https://github.com/google/ExoPlayer/tree/release-v2/demos/main
如果您查看用于配置的 media.exolist.json,您会看到一些与 Widevine 受保护内容相关的配置 - 例如:
"name": "Widevine DASH (MP4, H264)",
"samples": [
{
"name": "HD (cenc)",
"uri": "https://storage.googleapis.com/wvmedia/cenc/h264/tears/tears.mpd",
"drm_scheme": "widevine",
"drm_license_uri": "https://proxy.uat.widevine.com/proxy?video_id=2015_tears&provider=widevine_test"
},
您可以在每个 MediaItem (https://github.com/google/ExoPlayer/blob/release-v2/demos/main/src/main/java/com/google/android/exoplayer2/demo/PlayerActivity.java) 的演示中的 PlayerActivity 中看到如何设置 DRM:
MediaItem.DrmConfiguration drmConfiguration = mediaItem.localConfiguration.drmConfiguration;
if (drmConfiguration != null) {
if (Util.SDK_INT < 18) {
showToast(R.string.error_drm_unsupported_before_api_18);
finish();
return Collections.emptyList();
} else if (!FrameworkMediaDrm.isCryptoSchemeSupported(drmConfiguration.scheme)) {
showToast(R.string.error_drm_unsupported_scheme);
finish();
return Collections.emptyList();
}
}
在您自己的应用之外测试您的内容的一种快速方法是将其添加到 media.exolist.json 中的列表,或者使用您的视频清单和许可服务器修改现有条目 URL,然后再次编译和 运行 演示。
在服务器端,为了加密和流式传输您的视频,有几个开源打包程序可用,您可以使用它们来生成 HLS 或 DASH 视频流,并将支持主要的 DRM、Widevine、PlayReady 和 FairPlay。
对于您的情况,同样由 Google 提供的 Shaka Packager 包含有关在您的流式传输视频中包含 Widevine 保护的说明 - 请参见此处: