伺服器端合成 (即時串流) - Amazon IVS

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

伺服器端合成 (即時串流)

伺服器端合成使用 IVS 伺服器來混合所有舞台參與者的音訊和視訊,然後將此混合視訊傳送至 IVS 頻道 (例如觸及更多觀眾) 或 S3 儲存貯體。伺服器端合成會透過舞台主區域中的 IVS 控制平面端點叫用。

使用伺服器端合成廣播或錄製舞台會提供許多好處,可以讓使用者獲得高效可靠的雲端型影片工作流程,使其成為一個吸引人的選擇。

下圖說明伺服器端合成的運作方式:

使用伺服器端合成廣播舞台。

優勢

與用戶端合成相比,伺服器端合成具有以下優點:

  • 減少用戶端負載:透過伺服器端合成,處理和合併音訊與視訊來源的負擔會從個別用戶端裝置轉移到伺服器本身。伺服器端合成可消除用戶端裝置使用其 CPU 和網路資源來合成檢視並將其傳輸到 IVS 的需求。這表示觀眾可以觀看廣播,而其裝置無需處理資源密集型任務,這可以改善電池壽命和更流暢的觀看體驗。

  • 一致的品質:伺服器端合成可讓您精確控制最終串流的品質、解析度和位元速率。這可確保所有觀眾獲得一致的觀看體驗,無論其個別裝置的功能為何。

  • 彈性:透過將合成程序集中在伺服器上,廣播會變得更加穩定。即使發布者裝置遇到技術限制或波動,伺服器也可以適應並為所有觀眾提供更流暢的串流。

  • 頻寬效率:由於伺服器會處理合成,因此舞台發布者不必花費額外頻寬將視訊廣播到 IVS。

若要將舞台廣播到 IVS 頻道,您可以執行用戶端合成;請參閱《IVS 低延遲串流使用者指南》中的在 IVS 串流上啟用多位主持人

IVS API

伺服器端合成使用下列關鍵 API 元素:

  • EncoderConfiguration 物件允許您自訂要生成的影片格式 (高度、寬度、位元速率和其他串流參數)。您可以在每次呼叫 StartComposition 端點時重複使用 EncoderConfiguration。

  • Composition 端點會追蹤視訊合成,並輸出至 IVS 頻道。

  • StorageConfiguration 會追蹤記錄合成的 S3 儲存貯體。

若要使用伺服器端合成,您需要建立一個 EncoderConfiguration 並在呼叫 StartComposition 端點時連接。在此範例中,SquareVideo EncoderConfiguration 用於兩種合成:

伺服器端合成使用兩個關鍵 API 元素。

如需完整資訊,請參閱 IVS Real-Time Streaming API Reference

版面配置

根據預設,伺服器端合成功能會使用格線版面配置,將舞台參與者排列在同等大小的插槽中:

伺服器端合成格線版面配置。

此版面配置提供客戶設定及叫用精選插槽的選項。精選插槽位於主要畫面上,其他參與者會在其下方同樣大小的插槽中顯示:

伺服器端合成格線版面配置精選插槽。

注意:舞台發布者在伺服器端合成上所支援的最大解析度為 1080p。如果發布者傳送的視訊高於 1080p,則發布者會轉譯為純音訊參與者。

入門

先決條件

若要使用伺服器端合成,您必須具有包含作用中發布者的舞台,並使用 IVS 頻道和/或 S3 儲存貯體作為合成目的地。下面,我們描述了一種可能的工作流程,該工作流程使用 EventBridge 事件啟動合成,該合成會在參與者發布時將舞台廣播到 IVS 頻道。您也可以根據自己的應用程式邏輯啟動和停止合成。請參閱複合錄製中的另一個範例,其中展示了如何使用伺服器端合成將舞台直接錄製到 S3 儲存貯體。

  1. 建立一個 IVS 頻道。請參閱開始使用 Amazon IVS 低延遲串流功能

  2. 為每個發布者建立 IVS 舞台和參與者權杖。

  3. 建立一個 EncoderConfiguration

  4. 加入並發布到舞台。(請參閱 Web 版、Android 版和 iOS 版即時串流廣播 SDK 指南中的「發布與訂閱」章節。)

  5. 當您收到參與者已發布的 EventBridge 事件時,請呼叫 StartComposition

  6. 等待幾秒鐘,然後在頻道播放中查看複合檢視。

當參與者發布時,使用 EventBridge 事件啟動合成的伺服器端合成工作流程。

注意:在舞台上的發布者參與者閒置 60 秒後,合成會執行自動關閉。此時,合成會終止並轉換為 STOPPED 狀態。合成會在保持 STOPPED 狀態幾分鐘後自動刪除。

CLI 說明

使用 AWS CLI 是進階選項,需要您先在機器上下載並設定 CLI。如需詳細資訊,請參閱《AWS 命令列界面使用者指南》。

您目前可以使用 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 狀態,IVS 舞台的複合檢視就可以在 IVS 頻道上出現,使用 ListCompositions:

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": {} } ] }

注意:您必須讓發布者參與者主動發布至舞台,才能讓合成保持作用中狀態。如需詳細資訊,請參閱 Web 版、Android 版和 iOS 版即時串流廣播 SDK 指南中的「發布與訂閱」章節。您必須為每個參與者建立不同的舞台權杖。

啟用螢幕共用

若要使用固定螢幕共用版面配置,請按照以下步驟操作。

建立 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 事件。如需有關事件的詳細資訊,請參閱搭配 IVS 即時串流使用 EventBridge

  3. 只要合成處於作用中狀態,可能會發生以下情況:

    • 使用者停止合成:如果呼叫 StopComposition 端點,IVS 會起始正常關閉合成,並傳送「目的地結束」事件,然後傳送「工作階段結束」事件。

    • 合成執行自動關閉:如果沒有參與者主動發布到 IVS 舞台,則合成會在 60 秒後自動完成,並傳送 EventBridge 事件。

    • 目的地失敗:如果目的地意外失敗 (例如,IVS 頻道遭到刪除),目的地會轉換為 RECONNECTING 狀態,並傳送「目的地重新連線」事件。如果無法復原,IVS 會將目的地轉換為 FAILED 狀態,並傳送「目的地失敗」事件。如果合成中至少有一個目的地處於作用中狀態,IVS 會保持作用中狀態。

  4. 只要合成處於 STOPPEDFAILED 狀態,會在五分鐘後自動清理。(之後無法再被 ListCompositions 或 GetComposition 擷取。)

伺服器端合成資源的生命週期。