服务器端合成(实时直播功能) - Amazon IVS

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

服务器端合成(实时直播功能)

服务器端合成使用 IVS 服务器混合所有舞台参与者的音频和视频,然后将此混合视频发送到 IVS 频道(例如,为了服务于更多观众)或 S3 存储桶。服务器端合成通过舞台主区域的 IVS 控制面板端点调用。

使用服务器端合成广播或录制舞台有很多好处,对于寻求高效而可靠的云端视频工作流程的用户来说,是一个有吸引力的选择。

下图演示了服务器端合成的工作原理:

使用服务器端合成广播舞台。

优点

与客户端合成相比,服务器端合成具有以下优点:

  • 减少客户端负载 — 通过服务器端合成,处理和组合音频和视频源的负担从单个客户端设备转移到服务器本身。服务器端合成使客户端设备无需使用其 CPU 和网络资源来合成视图并将其传输到 IVS。这意味着观众无需自己的设备处理资源密集型任务即可观看广播,从而延长电池寿命并获得更流畅的观看体验。

  • 质量稳定 — 服务器端合成允许精确控制最终流的质量、分辨率和比特率。这样可确保所有观众都能获得一致的观看体验,而与其个人设备的功能无关。

  • 弹性 — 通过将合成过程集中到服务器上,广播变得更加强大。即使发布者设备遇到技术限制或波动,服务器也可以进行调整,为所有受众提供更流畅的流。

  • 带宽效率 — 由于服务器负责合成,因此舞台发布者不必花费额外的带宽将视频广播到 IVS。

或者,要向 IVS 频道广播舞台,可以在客户端进行合成;请参阅 IVS Low-Latency Streaming User Guide 中的 Enabling Multiple Hosts on an IVS Stream

IVS API

服务器端合成使用以下关键 API 元素:

  • EncoderConfiguration 对象允许您自定义要生成的视频的格式(高度、宽度、比特率和其他流式传输参数)。每次调用 StartComposition 端点时,都可以重复使用 EncoderConfiguration。

  • Composition 端点跟踪视频合成并输出到 IVS 频道。

  • StorageConfiguration 会跟踪录制合成内容的 S3 存储桶。

要使用服务器端合成,您需要创建一个 EncoderConfiguration 并在调用 StartComposition 端点时将其附上。在此示例中,SquareVideo EncoderConfiguration 用于两个合成:

服务器端合成使用两个关键 API 元素。

如需完整信息,请参阅 IVS Real-Time Streaming API Reference

Layouts

默认情况下,服务器端合成功能使用网格布局将舞台参与者排列在大小相等的槽位中:

服务器端合成网格布局。

此布局为客户提供了配置和调用精选槽位的选项。精选槽位显示在主屏幕上,其他参与者显示在大小相等的槽位下方:

服务器端合成网格布局精选槽位。

注意:舞台发布者在服务器端合成中支持的最大分辨率为 1080p。如果发布者发送的视频高于 1080p,则发布者将呈现为纯音频参与者。

入门

先决条件

要使用服务器端合成,您必须有一个包含活跃发布者的舞台,并使用 IVS 频道和/或 S3 存储桶作为合成目标。下面,我们将介绍一种可能的工作流程,它使用 EventBridge 事件来开始合成,当参与者发布时,该合成将舞台广播到 IVS 频道。或者,您可以根据自己的应用程序逻辑开始和停止合成。请参阅合成录制以获得另一个示例,它展示了如何使用服务器端合成将舞台直接录制到 S3 存储桶。

  1. 创建 IVS 频道。请参阅 Amazon IVS 低延迟直播功能入门

  2. 为每个发布者创建 IVS 舞台和参与者令牌。

  3. 创建 EncoderConfiguration

  4. 加入舞台并发布到该舞台。(请参阅实时流式广播 SDK 指南的“发布和订阅”部分:WebAndroidiOS。)

  5. 当您收到参与者发布的 EventBridge 事件时,请调用 StartComposition

  6. 等待几秒钟,然后在频道回放中观看合成视图。

服务器端合成工作流程,在参与者发布时使用 EventBridge 事件开始合成。

注意:发布者参与者在舞台上处于非活动状态 60 秒后,合成执行自动关闭。此时,合成终止,并转换到 STOPPED 状态。合成处于 STOPPED 状态几分钟后将自动删除。

CLI 说明

使用 Amazon CLI 是一个高级选项,需要先在计算机上下载并配置 CLI。有关详细信息,请参阅 Amazon 命令行界面用户指南

现在,您可以使用 CLI 创建和管理资源。合成端点位于 ivs-realtime 命名空间下。

创建 EncoderConfiguration 资源

EncoderConfiguration 是一个对象,允许您自定义生成的视频的格式(高度、宽度、比特率和其他流式传输参数)。每次调用合成端点时,您都可以重复使用 EncoderConfiguration,如下一步中所述。

下面的命令创建 EncoderConfiguration 资源,用于配置服务器端视频合成参数,例如视频比特率、帧速率和分辨率:

aws ivs-realtime create-encoder-configuration --name "MyEncoderConfig" --video "bitrate=2500000,height=720,width=1280,framerate=30"

响应如下:

{ "encoderConfiguration": { "arn": "arn:aws:ivs:us-east-1:927810967299:encoder-configuration/9W59OBY2M8s4", "name": "MyEncoderConfig", "tags": {}, "video": { "bitrate": 2500000, "framerate": 30, "height": 720, "width": 1280 } } }

开始合成

使用上面响应中提供的 EncoderConfiguration ARN,创建您的合成资源:

aws ivs-realtime start-composition --stage-arn "arn:aws:ivs:us-east-1:927810967299:stage/8faHz1SQp0ik" --destinations '[{"channel": {"channelArn": "arn:aws:ivs:us-east-1:927810967299:channel/DOlMW4dfMR8r", "encoderConfigurationArn": "arn:aws:ivs:us-east-1:927810967299:encoder-configuration/9W59OBY2M8s4"}}]'

响应将显示该合成使用 STARTING 状态创建。一旦合成开始发布合成,状态就会转换为 ACTIVE。(您可以通过调用 ListCompositions 或 GetComposition 端点来查看状态。)

合成处于 ACTIVE 后,可以使用 ListCompositions 在 IVS 频道上看到 IVS 舞台的合成视图:

aws ivs-realtime list-compositions

响应如下:

{ "compositions": [ { "arn": "arn:aws:ivs:us-east-1:927810967299:composition/YVoaXkKdEdRP", "destinations": [ { "id": "bD9rRoN91fHU", "startTime": "2023-09-21T15:38:39+00:00", "state": "ACTIVE" } ], "stageArn": "arn:aws:ivs:us-east-1:927810967299:stage/8faHz1SQp0ik", "startTime": "2023-09-21T15:38:37+00:00", "state": "ACTIVE", "tags": {} } ] }

注意:您需要让发布者参与者主动发布到舞台上,以使合成保持活动状态。有关更多信息,请参阅实时流式广播 SDK 指南的“发布和订阅”部分:WebAndroidiOS。您必须为每位参与者创建不同的舞台令牌。

启用屏幕共享

要使用固定的屏幕共享布局,请执行以下步骤。

创建 EncoderConfiguration 资源

下面的命令创建 EncoderConfiguration 资源,用于配置服务器端合成参数(视频比特率、帧速率和分辨率)。

aws ivs-realtime create-encoder-configuration --name "test-ssc-with-screen-share" --video={bitrate=2000000,framerate=30,height=720,width=1280}

使用 screen-share 属性创建舞台参与者令牌。由于我们将指定 screen-share 作为 featured 槽位的名称,因此我们需要创建一个 screen-share 属性设置为 true 的舞台令牌:

aws ivs-realtime create-participant-token --stage-arn "arn:aws:ivs:us-east-1:123456789012:stage/u9OiE29bT7Xp" --attributes screen-share=true

响应如下:

{ "participantToken": { "attributes": { "screen-share": "true" }, "expirationTime": "2023-08-04T05:26:11+00:00", "participantId": "E813MFklPWLF", "token": "eyJhbGciOiJLTVMiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE2OTExMjY3NzEsImlhdCI6MTY5MTA4MzU3MSwianRpIjoiRTgxM01Ga2xQV0xGIiwicmVzb3VyY2UiOiJhcm46YXdzOml2czp1cy1lYXN0LTE6OTI3ODEwOTY3Mjk5OnN0YWdlL3U5T2lFMjliVDdYcCIsInRvcGljIjoidTlPaUUyOWJUN1hwIiwiZXZlbnRzX3VybCI6IndzczovL3VzLWVhc3QtMS5ldmVudHMubGl2ZS12aWRlby5uZXQiLCJ3aGlwX3VybCI6Imh0dHBzOi8vYjJlYTVjMmZmMzU1Lmdsb2JhbC53aGlwLmxpdmUtdmlkZW8ubmV0IiwiYXR0cmlidXRlcyI6eyJzY3JlZW4tc2hhcmUiOiJ0cnVlIn0sImNhcGFiaWxpdGllcyI6eyJhbGxvd19wdWJsaXNoIjp0cnVlLCJhbGxvd19zdWJzY3JpYmUiOnRydWV9LCJ2ZXJzaW9uIjoiMC4zIn0.MGUCMFvMzv35O4yVzM9tIWZl7n3mmFQhleqsRSBx_G2qT2YUDlWSNg6H1vL7sAWQMeydSAIxAIvdfqt3Fh1MLiyelc9NnTjI5hL3YPKqDX6J3NDH1fksh8_5y1jztoPDy4yVA5OmtA" } }

开始合成

要使用屏幕共享功能开始合成,我们使用以下命令:

aws ivs-realtime start-composition --stage-arn "arn:aws:ivs:us-east-1:927810967299:stage/8faHz1SQp0ik" --destinations '[{"channel": {"channelArn": "arn:aws:ivs:us-east-1:927810967299:channel/DOlMW4dfMR8r", "encoderConfigurationArn": "arn:aws:ivs:us-east-1:927810967299:encoder-configuration/DEkQHWPVaOwO"}}]' --layout "grid={featuredParticipantAttribute=screen-share}"

响应如下:

{ "composition" : { "arn" : "arn:aws:ivs:us-east-1:927810967299:composition/B19tQcXRgtoz", "destinations" : [ { "configuration" : { "channel" : { "channelArn" : "arn:aws:ivs:us-east-1:927810967299:channel/DOlMW4dfMR8r", "encoderConfigurationArn" : "arn:aws:ivs:us-east-1:927810967299:encoder-configuration/DEkQHWPVaOwO" }, "name" : "" }, "id" : "SGmgBXTULuXv", "state" : "STARTING" } ], "layout" : { "grid" : { "featuredParticipantAttribute" : "screen-share" } }, "stageArn" : "arn:aws:ivs:us-east-1:927810967299:stage/8faHz1SQp0ik", "startTime" : "2023-09-27T21:32:38Z", "state" : "STARTING", "tags" : { } } }

当舞台参与者 E813MFklPWLF 加入舞台时,该参与者的视频将显示在精选槽位中,所有其他舞台发布者将在呈现在该槽位下方:

使用屏幕共享功能开始合成。

停止合成

要随时停止合成,请调用 StopComposition 端点:

aws ivs-realtime stop-composition --arn arn:aws:ivs:us-east-1:927810967299:composition/B19tQcXRgtoz

合成生命周期

使用下图来了解合成的状态转换。概括来说,合成的生命周期如下所示:

  1. 合成资源在用户调用 StartComposition 端点时创建

  2. IVS 成功开始合成之后,就会发送“IVS 合成状态更改(会话开始)”EventBridge 事件。有关事件的详细信息,请参阅将 EventBridge 与 IVS 实时直播功能结合使用

  3. 合成处于活动状态后,就会发生以下情况:

    • 用户停止合成 — 如果调用 StopComposition 端点,IVS 会启动合成的正常关闭,发送“目标结束”事件,然后发送“会话结束”事件。

    • 合成执行自动关闭 — 如果没有参与者主动发布到 IVS 舞台,则合成将在 60 秒后自动完成,并发送 EventBridge 事件。

    • 目标故障 — 如果目标意外失败(例如,IVS 频道被删除),则目标将转换为 RECONNECTING 状态并发送“目标重新连接”事件。如果无法恢复,IVS 会将目标转换为 FAILED 状态并发送“目标故障”事件。如果至少有一个目标处于活动状态,IVS 会使合成保持活动状态。

  4. 一旦合成处于 STOPPEDFAILED 状态,就会在五分钟后自动将其清除。(然后,ListCompositions 或 GetComposition 将不再对其进行检索。)

服务器端合成资源的生命周期。