# AWS 和 OBS 直播设置 创建 AWS 实时工作流程、配置 OBS、测试 DRM 播放并在活动结束后停止资源。 加密视频和 DRM 许可证通过不同路径传输 CDN 负责传输加密视频。您的后端检查观看权限,DRM 许可证服务则授权兼容设备解密播放。 - 01**存储 / CDN** 向播放器传输加密媒体。 - 02**您的后端** 确认用户有权观看后,向 DRM-X 请求播放授权。 - 03**DRM-X** 验证播放授权并处理 DRM 许可证请求。 - 04**播放器 + 设备** 使用设备的 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 创建直播活动[#](#create-a-live-event) - 登录客户控制台并选择将拥有该活动的组织和环境。 - 打开**Live events → New Live Channel**。输入标题。对于新帐户,选择 **Create new live content** 并输入唯一的 Content ID。或者,选择现有的直播内容。 - 选择 AWS 区域、密钥轮换间隔和 DVR 窗口。MediaLive、MediaPackage 和 SPEKE 桥接服务必须使用相同的 AWS 区域。初始示例值为每 600 秒轮换密钥,保留 7200 秒的 DVR 媒体。 - 创建频道。妥善保存仅显示一次的 origin secret、integration ID,以及分别用于 DASH 和 HLS 的 resource ID。不要将该 secret 放入播放器、截图、支持工单或公开仓库。 DRM-X 通道是内容和授权配置。启动 DRM-X Live Run 和启动 AWS 编码器是单独的操作。 ## 配置您的 AWS 帐户[#](#configure-aws) - 使用已启用计费的 AWS 账号,并由有权管理 CloudFormation、MediaLive、MediaPackage v2、API Gateway、IAM 服务角色和 CloudFront 的人员操作。测试前检查区域配额及最新价格。 - 从 Console 下载 [DRM-X AWS CloudFormation 模板](https://6.drm-x.com/downloads/drmx-live-aws.yaml)。创建 Stack 时设置 `CreateMediaResources=false`,填写 DRM-X integration/resource ID 和 origin secret。模板会创建权限受限的服务角色,以及使用 IAM 授权的 SPEKE 桥接服务。 - 在 DRM-X **Configure AWS** 中,输入您的 AWS 帐户 ID 以及堆栈的确切`SpekeRoleArn`。启动 DRM-X Live Run,以便经过身份验证的密钥请求能够成功。 - 使用 `CreateMediaResources=true` 更新相同的堆栈。保留现有的秘密和其他参数。等待堆栈完成。 - 将 Stack 输出的 `DashOriginUrl`、`HlsOriginUrl`、`DashCloudFrontUrl` 和 `HlsCloudFrontUrl` 填入对应的 DRM-X 字段。观众使用 CloudFront URL;媒体源站仍仅允许 CloudFront 访问。 - 创建 MediaLive **RTMP push** 输入。使用 `/32` 输入安全规则,仅允许推流端当前的公网 IP。如果 ISP 更改了该 IP,需要同步更新规则。 - 使用 Stack 的 `MediaLiveRoleArn` 创建 MediaLive 频道并关联输入,然后根据 Stack 中的 channel group 和 channel name 添加 **MediaPackage v2 CMAF** 输出组。单 Pipeline 适用于限定范围的测试;生产直播需要合适的冗余设计。 模板为 Widevine 和 PlayReady 生成 DASH-CENC,为 FairPlay 生成 HLS-CBCS。`PRESET_AUDIO_1` 与 `PRESET_VIDEO_3` 加密约定分别使用音频、SD、HD 和 UHD 密钥。已有部署若使用 `PRESET_VIDEO_2`,在增加使用独立策略的 UHD 密钥前,必须先评估加密约定变更。参见 [AWS 加密预设](https://docs.aws.amazon.com/mediapackage/latest/userguide/drm-content-speke-v2-presets.html)。 ## 配置 OBS Studio 为 4K[#](#configure-obs-for-4k) - 复制您的 OBS 配置和场景集合,并为本次直播测试设置便于识别的名称。 - 添加所需的视频或捕获源。确认它实际上是 3840×2160,将其适合画布,并验证其音频。对于排练文件,启用循环。隐藏未使用的窗口或桌面捕获。 - 在 **Settings → Video** 中,将画布和输出分辨率均设为 `3840x2160`,本例使用 `30` fps。 - 在 **Output → Advanced → Streaming** 中,选择受支持的 H.264 硬件编码器,例如 NVIDIA NVENC H.264。使用 CBR `18000 Kbps`、`2 s` 关键帧间隔、high profile,并禁用输出重缩放。NVENC 可从 P5 和 High Quality 开始,测试时检查编码负载。 - 使用 AAC 音频和 48 kHz 立体声。禁用不需要的麦克风和桌面音频源。 - 在 **Stream** 中选择 Custom。将 MediaLive RTMP 输入 URL 拆分为服务器/应用 URL 和最后的 stream-name 部分,将最后部分填入 Stream Key,并保持隐藏显示。 使用稳定的上传网络,并为视频与音频总码率预留带宽余量。如果 OBS 持续报告网络或编码丢帧,请在向观众开放直播前解决。参见 [OBS 硬件编码指南](https://obsproject.com/kb/hardware-encoding)。 ## 配置自适应输出[#](#configure-4k-adaptive-outputs) 对于上述 OBS 配置,使用最大 20 Mbps 的 AVC/UHD MediaLive 输入规格。按下表创建 30 fps 的 H.264 输出,使用闭合的 2 秒 GOP,并将 CMAF 片段对齐为 6 秒。AAC 音频使用独立的编码档位。 | 分辨率 | 视频比特率示例 | 密钥分组 | | --- | --- | --- | | 3840×2160 | 16 Mbps | UHD | | 1920×1080 | 5 Mbps | HD | | 1280×720 | 2.5 Mbps | HD | | 854×480 | 1.2 Mbps | SD | | 640×360 | 0.7 Mbps | SD | 这些是测试用设置,不保证特定画质。4K 频道仍需提供较低编码档位,以适配小屏幕、带宽受限网络和受 DRM 安全级别限制的设备。选择其他编码器时,请查阅最新的 [MediaLive 编解码器与分辨率支持](https://docs.aws.amazon.com/medialive/latest/ug/eml-limitations-and-rules.html)。 ## 在上一个事件之后重用通道[#](#reuse-channel-history) 编码器正在运行,并不代表观众正在接收最新媒体。检查 MediaPackage 的 manifest-last-updated 响应头和清单中列出的分辨率。如果复用频道后,编码器或编码档位已变更,但频道仍返回旧片段,请按照[AWS 频道历史记录重置流程](https://docs.aws.amazon.com/mediapackage/latest/userguide/channel-reset.html)处理。 - 确认之前的 DVR 内容可以永久删除;重置不是回滚操作。 - 停止 OBS 和 MediaLive 频道。等到 MediaLive 空闲。 - 在 MediaPackage 中,重置特定测试通道的历史记录。重置完成后至少等待 30 秒。 - 启动 MediaLive,等待运行,然后启动 OBS。再次检查新的 DASH/HLS 媒体、SPEKE 交换和设备播放。 ## 将事件添加到 PHP、Android 和 iOS[#](#test-web-android-ios) 各示例必须使用相同的直播 Content ID 和环境。Site Key 和 Access Key 保留在 PHP 服务器端。托管示例活动为 `aws-live-test-20260902`,标题为 **4K Live DRM Test**,仅在测试推流期间可用。 在 PHP 中添加包含 `id`、`title` 和 `type: 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)`。直播条目仅用于在线播放,不得加入离线下载队列。 ## 启动、验证和停止[#](#start-and-stop-the-broadcast) - 启动 DRM-XLive Run,然后启动 AWSMediaLive 通道。等待 MediaLive 报告正在运行。 - 在 OBS 开始直播。检查其比特率、丢帧、音频和编码器负载。 - 确认 DASH/HLS manifest 持续更新,包含预期的编码档位和 DRM 信令。在浏览器、Android Widevine 和 iPhone FairPlay 上验证实际解码画面与音频。让播放器至少跨越一次密钥轮换持续播放,然后测试新观众加入。 - 测试结束后,停止 OBS 直播,停止 MediaLive 频道,停止 DRM-XLive Run。确认 MediaLive 返回到空闲状态。 仅停止 OBS 不会停止 AWS 编码器计费。还需分别检查保留的输入、打包/存储、请求和分发费用。参见 [MediaLive 定价](https://aws.amazon.com/medialive/pricing/)和 AWS 账单 Console。 ## 验证排练:2026 年 9 月 17 日[#](#verified-rehearsal) 测试频道提供加密的 3840×2160 视频及较低分辨率的自适应档位。iPhone 真机完成了 4K 解码,并在跨越一次 600 秒密钥轮换边界的六分钟测试中持续播放。Samsung Android 设备 在其报告的显示上限 1080p 下通过了十分钟测试。两个设备也通过了轮换后的新观众加入测试。结果仅适用于本次测试的设备、编解码器和策略。 对于未缓存的直播 manifest,请使用 Android SDK **1.0.0-preview.13** 或更高版本。升级现有的[Android 评估应用程序](https://docs.drm-x.com/downloads/android/1.0.0-preview.13/drmx-android-player-1.0.0-preview.13.apk)以保留下载的视频。更新后的 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 流。