サーバーサイドコンポジションの概要
この図は、サーバーサイドコンポジションの仕組みを示しています。
利点
クライアントサイドのコンポジションと比較すると、サーバーサイドコンポジションには以下の利点があります。
-
クライアント負荷の軽減 – サーバーサイドコンポジションを使用すると、音声と動画のソースを処理および結合する負担が、個々のクライアントデバイスからサーバー側に移転します。サーバーサイドコンポジションにより、ビューを合成してIVS に送信するクライアントデバイスは、CPU とネットワークリソースを使用しなくても良くなります。つまり、視聴者のデバイスでは、リソースを大量に消費するタスクを処理しなくてもブロードキャストの視聴が可能になり、より長いバッテリー寿命と、よりスムーズな視聴体験が実現されます。
-
一貫した品質 – サーバーサイドコンポジションでは、最終的なストリームの品質、解像度、ビットレートを正確に制御することができます。これにより、個々のデバイスの性能に関係なく、すべての視聴者に対し一貫した視聴体験が保証されます。
-
レジリエンス – コンポジションプロセスをサーバー上で一元化することで、ブロードキャストをより堅牢にできます。パブリッシャーのデバイスに技術的な制限がかかっていたり、変動が発生していたりしても、サーバーはそれに適応するので、すべての視聴者にスムーズなストリームを提供できます。
-
帯域幅の効率 – コンポジションの処理はサーバーで実行されるため、ステージパブリッシャーは、ビデオを IVS にブロードキャストする帯域幅を余分に消費する必要がありません。
あるいは、クライアント側でコンポジションを実行し、ステージを IVS チャネルにブロードキャストすることもできます。「IVS 低レイテンシーストリーミングユーザーガイド」の「Amazon IVS ストリームで複数ホストを有効にする」を参照してください。
Composition のライフサイクル
下の図は、コンポジションの状態遷移を示します。
概観的には、コンポジションのライフサイクルは次のとおりです。
-
ユーザーが StartComposition オペレーションを呼び出したとき、コンポジションリソースが作成されます。
-
IVS が Composition の開始に成功すると、「IVS Composition State Change (Session Start)」の EventBridge イベントが送信されます。イベントの詳細については、「IVS Real-Time Streaming で EventBridge を使用する」を参照してください。
-
Composition がアクティブ状態になった後は、以下のことが発生します。
-
ユーザーがコンポジションを停止 – StopComposition オペレーションが呼び出された場合、IVS によってコンポジションの適切なシャットダウンが開始され、「Destination End」イベントの後に「Session End」イベントが送信されます。
-
コンポジションが自動シャットダウンを実行 – IVS ステージにアクティブに発行している参加者いなくなってから 60 秒後に、Composition は自動的にファイナライズされ、EventBridge イベントが送信されます。
-
送信先の障害 – 送信先で (IVS チャンネルが削除されるなどの) 予期しない障害が発生すると、その送信先は
RECONNECTING状態に遷移し、「Destination Reconnecting」イベントが送信されます。復旧が不可能な場合、IVS が対象の送信先をFAILED状態に遷移させ、「Destination Failure」イベントが送信されます。少なくとも 1 つの送信先がアクティブであれば、IVS はコンポジションを維持します。
-
-
STOPPEDあるいはFAILED状態になったコンポジションは、その 5 分後に自動的にクリーンアップされます。(それ以降は、ListCompositions や GetComposition によって取得されなくなります)。
IVS API
サーバーサイドコンポジションでは、主要な API 要素として以下を使用します。
-
EncoderConfiguration オブジェクトは、生成する動画の形式 (高さ、幅、ビットレート、その他のストリーミングパラメータ) をカスタマイズできるようにします。StartComposition オペレーションを呼び出すたびに、EncoderConfiguration を再利用できます。
-
コンポジションオペレーションはビデオコンポジションを追跡し、IVS チャネルに出力します。
-
StorageConfiguration は、コンポジションが記録されている S3 バケットを追跡します。
サーバーサイドコンポジションを使用するには、EncoderConfiguration を作成して StartComposition オペレーションを呼び出すときにアタッチする必要があります。この例では、SquareVideo EncoderConfiguration が 2 つのコンポジションで使用されています。
詳細については、「IVS Real-Time Streaming API リファレンス」を参照してください。
Layouts
StartComposition オペレーションには、グリッドおよび PiP (ピクチャーインピクチャー) の 2 つのレイアウトオプションがあります。
グリッドレイアウト
グリッドレイアウトは、ステージ参加者を等サイズのスロットのグリッドに配置します。カスタマイズ可能なプロパティがいくつか用意されています。
videoAspectRatioは、ビデオタイルのアスペクト比を制御するように参加者表示モードを設定します。videoFillModeは、ビデオコンテンツが参加者タイルにどのように適合するかを定義します。gridGapは、参加者タイル間の間隔をピクセル単位で指定します。omitStoppedVideoでは、停止したビデオストリームをコンポジションから除外できます。featuredParticipantAttributeは、注目のスロットを識別します。これを設定すると、注目の参加者はメイン画面の大きなスロットに表示され、他の参加者はその下に表示されます。participantOrderAttributeは、参加者トークンの属性値に基づきカスタム参加者の順序付けを有効にします。指定した場合、参加者は属性値で数値順に並べられ、属性がない参加者は到着時刻の順序にフォールバックします。これにより、決定論的な配置がオプションで実施でき、ロールベースのレイアウトが可能になります。
グリッドレイアウト (すべてのフィールドの有効な値とデフォルトを含む) の詳細については、「GridConfiguration データ型」を参照してください。
ピクチャインピクチャ (PiP ) レイアウト
PiP レイアウトでは、参加者をオーバーレイウィンドウに表示することができ、そのサイズ、位置、動作を設定できます。これらのプロパティには、次のものがあります。
pipParticipantAttributeは PiP ウィンドウの参加者を指定します。pipPositionは PiP ウィンドウのコーナー位置を決定します。pipWidthおよびpipHeightは、PiP ウィンドウの幅と高さを設定します。pipOffsetは、PiP ウィンドウのオフセット位置を、最も近いエッジからのピクセル単位で設定します。pipBehaviorは、他のすべての参加者が退出したときの PiP 動作を定義します。
グリッドレイアウトと同様に、PiP レイアウトは構成をさらにカスタマイズするための featuredParticipantAttribute、omitStoppedVideo、videoFillMode、gridGap、participantOrderAttribute をサポートします。participantOrderAttribute は、PiP ウィンドウの参加者を選択する、参加者トークンの属性値に基づきグリッド参加者を配置するという両方のカスタム参加者の順序付けを有効にします。
PiP レイアウト (すべてのフィールドの有効な値とデフォルトを含む) の詳細については、「PipConfiguration データ型」を参照してください。
注: サーバーサイドコンポジションのステージパブリッシャーでサポートされる最大の解像度は 1080p です。1080p を超える動画を送信するパブリッシャーは、音声のみの参加者としてレンダリングされます。
重要: アプリケーションが、タイルのサイズや位置など、現在のレイアウトの特定の機能に依存していないことを確認してください。レイアウトの視覚的な改善は、いつでも導入できます。