DRM-X 6.0 鸽子和橄榄枝标志DRM-X 6.0文档
◎ 简体中文

AWS 和 OBS 直播设置

创建 AWS 实时工作流程、配置 OBS、测试 DRM 播放并在活动结束后停止资源。

查看 Markdown现场实例更新于 2026-09-18

加密视频和 DRM 许可证通过不同路径传输

CDN 负责传输加密视频。您的后端检查观看权限,DRM 许可证服务则授权兼容设备解密播放。

  1. 存储 / CDN

    向播放器传输加密媒体。

  2. 您的后端

    确认用户有权观看后,向 DRM-X 请求播放授权。

  3. DRM-X

    验证播放授权并处理 DRM 许可证请求。

  4. 播放器 + 设备

    使用设备的 DRM 系统获取许可证,并播放加密媒体。

您的后端判断用户是否有权观看,DRM-X 执行签名授权中的播放策略。加密媒体与 DRM 许可证通过各自的服务传送给播放器。

Trial 和付费帐户可以创建直播 DRM 频道。此工作流程不需要 S3 存储连接。 AWS 对媒体编码、打包、交付和保留资源单独收费。

分发路径为 OBS → AWS Elemental MediaLive → MediaPackage v2 → CloudFront → DRM-X 播放器。DRM-X 通过 SPEKE 提供加密密钥,并使用 DRM License Token 为每位观众授权。

在 DRM-X 创建直播活动#

  1. 登录客户控制台并选择将拥有该活动的组织和环境。
  2. 打开Live events → New Live Channel。输入标题。对于新帐户,选择 Create new live content 并输入唯一的 Content ID。或者,选择现有的直播内容。
  3. 选择 AWS 区域、密钥轮换间隔和 DVR 窗口。MediaLive、MediaPackage 和 SPEKE 桥接服务必须使用相同的 AWS 区域。初始示例值为每 600 秒轮换密钥,保留 7200 秒的 DVR 媒体。
  4. 创建频道。妥善保存仅显示一次的 origin secret、integration ID,以及分别用于 DASH 和 HLS 的 resource ID。不要将该 secret 放入播放器、截图、支持工单或公开仓库。

DRM-X 通道是内容和授权配置。启动 DRM-X Live Run 和启动 AWS 编码器是单独的操作。

配置您的 AWS 帐户#

  1. 使用已启用计费的 AWS 账号,并由有权管理 CloudFormation、MediaLive、MediaPackage v2、API Gateway、IAM 服务角色和 CloudFront 的人员操作。测试前检查区域配额及最新价格。
  2. 从 Console 下载 DRM-X AWS CloudFormation 模板。创建 Stack 时设置 CreateMediaResources=false,填写 DRM-X integration/resource ID 和 origin secret。模板会创建权限受限的服务角色,以及使用 IAM 授权的 SPEKE 桥接服务。
  3. 在 DRM-X Configure AWS 中,输入您的 AWS 帐户 ID 以及堆栈的确切SpekeRoleArn。启动 DRM-X Live Run,以便经过身份验证的密钥请求能够成功。
  4. 使用 CreateMediaResources=true 更新相同的堆栈。保留现有的秘密和其他参数。等待堆栈完成。
  5. 将 Stack 输出的 DashOriginUrlHlsOriginUrlDashCloudFrontUrlHlsCloudFrontUrl 填入对应的 DRM-X 字段。观众使用 CloudFront URL;媒体源站仍仅允许 CloudFront 访问。
  6. 创建 MediaLive RTMP push 输入。使用 /32 输入安全规则,仅允许推流端当前的公网 IP。如果 ISP 更改了该 IP,需要同步更新规则。
  7. 使用 Stack 的 MediaLiveRoleArn 创建 MediaLive 频道并关联输入,然后根据 Stack 中的 channel group 和 channel name 添加 MediaPackage v2 CMAF 输出组。单 Pipeline 适用于限定范围的测试;生产直播需要合适的冗余设计。

模板为 Widevine 和 PlayReady 生成 DASH-CENC,为 FairPlay 生成 HLS-CBCS。PRESET_AUDIO_1PRESET_VIDEO_3 加密约定分别使用音频、SD、HD 和 UHD 密钥。已有部署若使用 PRESET_VIDEO_2,在增加使用独立策略的 UHD 密钥前,必须先评估加密约定变更。参见 AWS 加密预设

配置 OBS Studio 为 4K#

  1. 复制您的 OBS 配置和场景集合,并为本次直播测试设置便于识别的名称。
  2. 添加所需的视频或捕获源。确认它实际上是 3840×2160,将其适合画布,并验证其音频。对于排练文件,启用循环。隐藏未使用的窗口或桌面捕获。
  3. Settings → Video 中,将画布和输出分辨率均设为 3840x2160,本例使用 30 fps。
  4. Output → Advanced → Streaming 中,选择受支持的 H.264 硬件编码器,例如 NVIDIA NVENC H.264。使用 CBR 18000 Kbps2 s 关键帧间隔、high profile,并禁用输出重缩放。NVENC 可从 P5 和 High Quality 开始,测试时检查编码负载。
  5. 使用 AAC 音频和 48 kHz 立体声。禁用不需要的麦克风和桌面音频源。
  6. Stream 中选择 Custom。将 MediaLive RTMP 输入 URL 拆分为服务器/应用 URL 和最后的 stream-name 部分,将最后部分填入 Stream Key,并保持隐藏显示。

使用稳定的上传网络,并为视频与音频总码率预留带宽余量。如果 OBS 持续报告网络或编码丢帧,请在向观众开放直播前解决。参见 OBS 硬件编码指南

配置自适应输出#

对于上述 OBS 配置,使用最大 20 Mbps 的 AVC/UHD MediaLive 输入规格。按下表创建 30 fps 的 H.264 输出,使用闭合的 2 秒 GOP,并将 CMAF 片段对齐为 6 秒。AAC 音频使用独立的编码档位。

分辨率视频比特率示例密钥分组
3840×216016 MbpsUHD
1920×10805 MbpsHD
1280×7202.5 MbpsHD
854×4801.2 MbpsSD
640×3600.7 MbpsSD

这些是测试用设置,不保证特定画质。4K 频道仍需提供较低编码档位,以适配小屏幕、带宽受限网络和受 DRM 安全级别限制的设备。选择其他编码器时,请查阅最新的 MediaLive 编解码器与分辨率支持

在上一个事件之后重用通道#

编码器正在运行,并不代表观众正在接收最新媒体。检查 MediaPackage 的 manifest-last-updated 响应头和清单中列出的分辨率。如果复用频道后,编码器或编码档位已变更,但频道仍返回旧片段,请按照AWS 频道历史记录重置流程处理。

  1. 确认之前的 DVR 内容可以永久删除;重置不是回滚操作。
  2. 停止 OBS 和 MediaLive 频道。等到 MediaLive 空闲。
  3. 在 MediaPackage 中,重置特定测试通道的历史记录。重置完成后至少等待 30 秒。
  4. 启动 MediaLive,等待运行,然后启动 OBS。再次检查新的 DASH/HLS 媒体、SPEKE 交换和设备播放。

将事件添加到 PHP、Android 和 iOS#

各示例必须使用相同的直播 Content ID 和环境。Site Key 和 Access Key 保留在 PHP 服务器端。托管示例活动为 aws-live-test-20260902,标题为 4K Live DRM Test,仅在测试推流期间可用。

在 PHP 中添加包含 idtitletype: live 的可信播放列表条目。重新登录以刷新示例的会话访问权限。后端会解析已注册的直播 manifest,并拒绝与目录不符的客户端内容类型。

'playlist' => [
    ['id' => 'your-live-content-id', 'title' => 'My live event', 'type' => 'live'],
],

在 Android 中添加 DrmXPlaylistItem("your-live-content-id", "My live event", "live"),并在准备播放时传入内容类型。在 Apple 示例中使用 DrmXPlaylistItem(contentId: "your-live-content-id", title: "My live event", contentType: .live)。直播条目仅用于在线播放,不得加入离线下载队列。

启动、验证和停止#

  1. 启动 DRM-XLive Run,然后启动 AWSMediaLive 通道。等待 MediaLive 报告正在运行。
  2. 在 OBS 开始直播。检查其比特率、丢帧、音频和编码器负载。
  3. 确认 DASH/HLS manifest 持续更新,包含预期的编码档位和 DRM 信令。在浏览器、Android Widevine 和 iPhone FairPlay 上验证实际解码画面与音频。让播放器至少跨越一次密钥轮换持续播放,然后测试新观众加入。
  4. 测试结束后,停止 OBS 直播,停止 MediaLive 频道,停止 DRM-XLive Run。确认 MediaLive 返回到空闲状态。

仅停止 OBS 不会停止 AWS 编码器计费。还需分别检查保留的输入、打包/存储、请求和分发费用。参见 MediaLive 定价和 AWS 账单 Console。

验证排练:2026 年 9 月 17 日#

测试频道提供加密的 3840×2160 视频及较低分辨率的自适应档位。iPhone 11 真机完成了 4K 解码,并在跨越一次 600 秒密钥轮换边界的六分钟测试中持续播放。Samsung S24 Ultra 在其报告的显示上限 1080p 下通过了十分钟测试。两个设备也通过了轮换后的新观众加入测试。结果仅适用于本次测试的设备、编解码器和策略。

对于未缓存的直播 manifest,请使用 Android SDK 1.0.0-preview.13 或更高版本。升级现有的Android 评估应用程序以保留下载的视频。更新后的 Apple 示例保留了密钥 ID 和 IV,同时压缩 MediaPackage 元数据以适应 FairPlay 的 200 字节 SPC 标识符限制。其分辨率首选项同时提供宽度和高度,因此自适应播放可以达到 4K。

Safari 直播播放

Safari 请使用 Web SDK 1.2.0-preview.13 或更高版本。macOS、iOS 和 iPadOS 可用时会选择原生 Apple Media Keys,并在直播和 VOD 播放列表切换时保持使用该 API。直播不会回退到 MSE/SINF,因为该路径可能在 MediaPackage 密钥轮换后请求旧初始化片段的密钥。HLS 信令必须保留当前准确的 key ID 和 IV。

DRM-X SPEKE 发出紧凑的 KeyId/IV 资产标识符,因此 Safari 可以在标识符大小限制内请求 FairPlay 许可证。 DRM License Token 仍然授权确切的内容和密钥。更新 Key Service 后,验证其依赖的 SPEKE 网关是否正在运行;当密钥传送不可用时,接收视频的编码器无法发布新的受保护输出。

另一次 15 分钟的 Safari 测试在 Mac 和 iPhone 上验证了跨越一次密钥轮换的连续播放。iPhone 使用原生 Apple Media Keys;Mac 在轮换测试中使用现代 EME,随后遇到间歇性启动错误,改用原生 Apple Media Keys 后通过了新观众加入测试。记录的浏览器自适应分辨率为 Mac 720p、iPhone 480p。这些结果未验证浏览器 4K 播放,也未验证 Mac 最终兼容路径上的密钥轮换。上文的原生应用 4K 结果来自另一项测试。

重新开始排练之前

  • 验证 SPEKE 端点是否可访问并且控制台显示最近的交换。当密钥传送失败时,接收输入的编码器仍然可以提供过时的媒体。
  • 将 VOD/离线媒体缓存与直播 manifest 源分开。
  • 检查实际解码尺寸;单独选择 4K 通道并不能证明 4K 播放。
  • 这次排练已停止。在再次测试实时目录条目之前,启动新的授权 DRM-X Live Run、AWS 编码器和 OBS 流。