本文内容
警告
Azure 媒体服务将于 2024 年 6 月 30 日停用。 有关详细信息,请参阅 AMS 退休指南 。
当观众与 Internet 断开连接时,可能需要将内容下载到手机或平板电脑上才能播放。
在某些国家/地区,Internet 可用性和/或带宽仍然有限。 用户可以选择下载内容,以更高分辨率观看内容。
某些内容提供商可能会禁止 DRM 许可证传送超出国家/地区的边界。 如果用户需要出国旅行,但仍想要观看内容,则需要脱机下载。
Azure 媒体服务为 Microsoft PlayReady、Google Widevine* 、Apple FairPlay Streaming 和 AES-128 加密提供了一组设计良好的 内容保护服务 。
注意
只有在下载内容时,脱机 DRM 才会为获取许可证的单次请求进行计费。 任何错误都不收费。
先决条件
在 iOS 10+ 设备上实现适用于 FairPlay 的脱机 DRM 之前:
阅读 Apple FairPlay 许可要求和配置
从 Apple 开发人员网络获取 FPS SDK。 FPS SDK 包含两个组件:
FPS 服务器 SDK,其中包含密钥安全模块 (KSM)、客户端示例、规范和一组测试向量。
FPS 部署包,其中包含 D 函数规范,以及有关如何生成 FPS 证书客户特定的私钥和应用程序密钥的说明。 Apple 仅向许可的内容提供商颁发 FPS 部署包。
作为 FPS 证书生成的一部分收到的 .der/.cer 证书文件包含公钥,并可供客户端使用。 私钥(.pfx)应在 Azure Key Vault 或其他安全位置进行保护。
在 Azure Key Vault 中存储 FairPlay 私钥(.pfx)
从 Apple 收到的私钥(.pfx)应被视为安全证书,并可以存储在 Azure Key Vault 中。
管理员应首先将 .pfx 证书文件转换为 base 64 文本文件
转换后,可以将此文件作为安全文本文件存储在 Azure DevOps Services 中。
然后,可以将字符串手动存储在 Azure KeyVault 中作为“机密对象”,或作为解决方案部署/生成脚本的一部分。 可以在 Gridwich 项目示例代码 中看到将 FairPlay 专用证书存储在 Azure KeyVault 中的示例
(可选)将 .pfx 文件的密码存储为密钥保管库中的机密。
示例 CLI 脚本
将 base64 编码的私钥文件复制到 Azure KeyVault:
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 修改 Encrypt with DRM 中的代码以添加 FairPlay 配置。
注意
Widevine 在 GovCloud 区域中不可用。
先决条件
在 Android 设备上实现 Widevine 的脱机 DRM 之前,应首先:
启用脱机模式
若要为 Widevine 许可证启用 离线 模式,请配置 Widevine 许可证模板 。 在 policy_overrides 对象中,将 can_persist 属性设置为 true ,如 ConfigureWidevineLicenseTemplate 所示。
为 Android 设备开发本机播放器应用的最简单方法是使用 Google ExoPlayer SDK (开源视频播放器 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
,这意味着没有时间限制。
适用于 Android 的 Chrome 播放器应用
从适用于 Android v. 62 的 Chrome 版本开始,EME 中的永久性许可证受支持。 Widevine L1 现在也受 Android 版 Chrome 支持。 这样,如果最终用户具有该版本或更高版本的 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 开始,适用于 Widevine 的 EME 需要 HTTPS。 因此,需要使用 X509 证书通过 HTTPS 托管示例应用。 由于以下要求,通常的测试证书不起作用:需要获取满足以下最低要求的证书:
Chrome 和 Firefox 要求证书中存在 SAN-Subject 备用名称设置
证书必须由一个可信的 CA 签发,并且自签名开发证书将不起作用。
证书的通用名称(CN)必须与 Web 服务器或网关的 DNS 名称匹配
H264/AAC 的平滑流媒体文件格式与 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 通用示例 中,有一个名为 自适应流示例 的基本播放器示例。 添加用于选择下载视频的代码,并将该视频用作来源,而不是自适应流媒体来源。
有关详细信息,请参阅常见问题解答 中的 内容保护。
Widevine 是 Google Inc. 提供的服务,受 Google, Inc 的服务条款和隐私策略的约束。
获取帮助和支持
可以通过以下方法之一联系媒体服务,并关注我们的更新: