本文内容
警告
Azure 媒体服务将于 2024 年 6 月 30 日停用。 有关详细信息,请参阅 AMS 停用指南 。
观看者可能需要将内容下载到手机或平板电脑上,以便在断开 Internet 连接的情况下播放。
在某些国家/地区,Internet 可用性和/或宽带仍然受到限制。 用户可以选择下载内容,以更高的分辨率观看。
某些内容提供程序可能不允许在某个国家/地区的边界之外进行 DRM 许可证传送。 如果用户想在国外旅行期间查看内容,需要脱机下载。
Azure 媒体服务为 Microsoft PlayReady、Google Widevine* 、Apple FairPlay 流式处理和 AES-128 加密提供了一组设计良好的内容保护服务 。
注意
下载内容时,脱机 DRM 仅针对发出单个许可证请求进行计费。 任何错误都不收费。
先决条件
在 iOS 10+ 设备上为 FairPlay 实现 脱机 DRM 之前:
阅读 Apple FairPlay 许可要求和配置
从 Apple Developer Network 获取 FPS SDK。 FPS SDK 包含两个组件:
FPS Server SDK,该组件包含密钥安全模块 (KSM)、客户端示例、规格和一组测试矢量。
FPS 开发包,该组件包含 D 函数、规格和 FPS 证书生成说明、客户特定的私钥以及应用程序密钥。 Apple 仅对许可的内容提供商发布 FPS 开发包。
在生成 FPS 证书过程中收到的 .der/.cer 证书文件包含公钥,可供客户端使用。 应在 Azure Key Vault 或其他安全位置保护私钥 (.pfx)。
在 Azure 密钥保管库中存储 FairPlay 私钥 (.pfx)
从 Apple 收到的私钥 (.pfx) 应被视为安全证书,可将其存储在 Azure Key Vault 中。
管理员应该先将 .pfx 证书文件转换为 base64 编码的文本文件
转换后,可将此文件作为安全文本文件存储在 Azure DevOps Services 中。
然后,可以在 Azure Key Vault 中手动将字符串存储为“机密对象”,或者存储为解决方案的部署/生成脚本的一部分。 在 Gridwich 项目示例代码 中可以看到将 FairPlay 私钥证书存储在 Azure Key Vault 中的示例
(可选)在密钥保管库中将 .pfx 文件的密码存储为机密。
示例 CLI 脚本
若要将 base64 编码的私钥文件复制到 Azure 密钥保管库,请执行以下操作:
set -eu
echo key vault : $SHARED_KV_NAME
echo "Copying FairPlay certificate to key vault as secret"
az keyvault secret set --vault-name $SHARED_KV_NAME -n ams-fairPlay-certificate-b64 -f $(FairPlayCertificate.secureFilePath) --output none
克隆示例
克隆媒体服务 .Net 示例。
git clone https://github.com/Azure-Samples/media-services-v3-dotnet-tutorials.git
修改代码
修改使用 .NET 通过 DRM 加密 中的代码以添加 FairPlay 配置。
注意
Widevine 在 GovCloud 区域中不可用。
先决条件
在 Android 设备上为 Widevine 实现脱机 DRM 之前,首先应:
启用脱机模式
若要为 Widevine 许可证启用 脱机 模式,请配置 Widevine 许可证模板 。 在 policy_overrides 对象中,将 can_persist 属性设置为 true ,如 ConfigureWidevineLicenseTemplate 中所示。
要开发适用于 Android 设备的本机播放器应用,最简单的方法是使用开源视频播放器 SDK Google ExoPlayer SDK 。 ExoPlayer 支持 Android 的本机 MediaPlayer API 目前不支持的功能,包括 MPEG-DASH 和 Microsoft 平滑流式处理传递协议。
ExoPlayer 2.6 和更高版本包括许多支持脱机 Widevine DRM 播放的类。 特别是, OfflineLicenseHelper
类提供了实用工具函数,以方便使用 DefaultDrmSessionManager 下载、续订和发布脱机许可证。 SDK 文件夹中 library/core/src/main/java/com/google/android/exoplayer2/offline/
提供的类支持脱机视频内容下载。
下面列出的类有助于通过适用于 Android 的 ExoPlayer SDK 实现脱机模式:
library/core/src/main/java/com/google/android/exoplayer2/drm/OfflineLicenseHelper.java
library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSession.java
library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManager.java
library/core/src/main/java/com/google/android/exoplayer2/drm/DrmSession.java
library/core/src/main/java/com/google/android/exoplayer2/drm/ErrorStateDrmSession.java
library/core/src/main/java/com/google/android/exoplayer2/drm/ExoMediaDrm.java
library/core/src/main/java/com/google/android/exoplayer2/offline/SegmentDownloader.java
library/core/src/main/java/com/google/android/exoplayer2/offline/DownloaderConstructorHelper.java
library/core/src/main/java/com/google/android/exoplayer2/offline/Downloader.java
library/dash/src/main/java/com/google/android/exoplayer2/source/dash/offline/DashDownloader.java
在开发应用程序的过程中,开发人员应参考 ExoPlayer 开发人员指南 和相应的开发人员博客 。
使用较旧的 Android 设备
对于某些较旧的 Android 设备,必须设置以下 policy_overrides 属性(在 Widevine 许可证模板 中定义)的值:rental_duration_seconds、playback_duration_seconds 和license_duration_seconds 。 或者,可以将它们设置为 0
,这意味着没有时间限制。
使用 Xamarin 生成 Android 播放应用
可通过以下链接找到适用于 ExoPlayer 的 Xamarin 绑定:
另请参阅以下线程:Xamarin 绑定 。
适用于 Android 的 Chrome 播放器应用
从 适用于 Android 的 Chrome 版本 62 开始,可支持 EME 中的永久许可证。 Chrome for Android 中当前也支持 Widevine L1 。 如果你的最终用户使用此版本(或更高版本)的 Chrome,则你可在 Chrome 中创建脱机播放应用程序。
此外,Google 还生成了渐进式 Web 应用 (PWA) 示例:
如果将 Android 手机上的移动 Chrome 浏览器升级到 v62 (或更高版本)并测试上面的托管示例应用,可发现联机流式处理和脱机播放均正常运行。
上面的开源 PWA 应用是在 Node.js 中编写的。 如果希望在 Ubuntu 服务器上托管自己的版本,请注意以下可能会阻止播放的常见问题:
CORS 问题:示例应用中的示例视频在 https://storage.googleapis.com/biograf-video-files/videos/ 中托管。 Google 已为其托管在 Google 云存储桶中的所有测试示例设置了 CORS。 它们会使用 CORS 标头,显式指定 CORS 条目:https://biograf-155113.appspot.com
(google 托管其示例的域),从而阻止任何其他站点的访问。 如果尝试访问,将看到以下 HTTP 错误:Failed to load https://storage.googleapis.com/biograf-video-files/videos/poly-sizzle-2015/mp4/dash.mpd: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https:\//13.85.80.81:8080' is therefore not allowed access. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
证书问题:从 Chrome v 58 开始,EME for Widevine 需要 HTTPS。 因此,需要使用 X509 证书通过 HTTPS 来托管示例应用。 常用的测试证书由于以下要求而无法使用:需要获取满足以下最低要求的证书:
Chrome 和 Firefox 要求证书中具备 SAN 使用者可选名称设置
证书必须具备受信任的 CA,自签名开发证书无法使用
该证书必须具备与 Web 服务器或网关的 DNS 名称匹配的 CN
具有 H264/AAC 的平滑流式处理 (PIFF ) 文件格式与 PlayReady (AES-128 CTR) 存在绑定。 平滑流式处理 .ismv 文件(假设音频混合在视频中)本身就是 fMP4,可以用于播放。 如果平滑流式处理内容经过 PlayReady 加密,则每个 .ismv 文件会变成受 PlayReady 保护的 MP4 片段。 可以选择具有首选比特率的 .ismv 文件,并将其重命名为 .mp4 以便下载。
有以下两种方式用于承载 PlayReady 保护的 MP4,以便进行渐进式下载:
可以将该 MP4 放入同一容器/媒体服务资产中,并利用 Azure 媒体服务流式处理终结点进行渐进式下载。
可以使用 SAS URL 直接从 Azure 存储进行渐进式下载。
可以使用两种类型的 PlayReady 许可证交付:
Azure 媒体服务中的 PlayReady 许可证交付服务
PlayReady 许可证服务器可以托管在任何位置。
若要使用 AMS 交付服务获取 PlayReady 许可证,请参阅带有 PlayReady 许可证模板的媒体服务 v3 。
对于播放测试,可在 Windows 10 上使用通用 Windows 应用程序。 在 Windows 10 通用示例 中,有一个名为 Adaptive Streaming Sample (自适应流式处理示例)的基础播放器示例。 添加用于选择下载的视频的代码,并将其用作源,而不是自适应流式处理源。
有关详细信息,请参阅常见问题解答中的内容保护 。
Widevine 是 Google Inc. 提供的一项服务,并受 Google Inc. 服务条款和隐私策略的约束。
获得帮助和支持
如果有任何疑问,可以联系媒体服务,或者使用以下方法之一关注我们的更新: