[update] Amazon IVS Real-Time StreamingでRTMP ingestをサポートしました!

[update] Amazon IVS Real-Time StreamingでRTMP ingestをサポートしました!

IVS Real-Time Streamingが従来までのWebRTCとWHIPに加えて、より多くのStreaming SoftwareでサポートされているRTMPによるIngestをサポートしました。暗号化されているRTMPSの使用が推奨です。
Clock Icon2024.09.28

はじめに

清水です。遅延300ミリ秒未満のライブストリーミングが可能なAmazon Interactive Video Service (Amazon IVS) Real-Time Streamingで、RTMPならびにその暗号化バージョンであるRTMPSをIngest方式としてサポートするアップデートがありました!2024/09/09付けでWhat's New at AWSにポストされています。

本エントリでは、Amazon IVS (Real-Time StreamingならびにLow-Latency Streaming)のIngest方式のこれまでの状況についてざっと確認しつつ、実際にRTMP Ingestを用いてAmazon IVS Real-Time Streamingでストリーミングしてみたのでまとめてみたいと思います。

Amazon IVSとIngest方式について

まずはAmazon IVSのIngest方式などについてざっと振り返ります。

2020年7月にリリースされたAmazon IVS(今でいうIVS Low-Latency Streaming)、当時から業界のデファクトスタンダードともいえるRTMPSをIngest方式としてサポートしていました。また2023年5月にはInsecure ingestとしてRTMPも利用できるようになりました。名称をIVS Low-Latancy Streamingと変えたのが2023年8月で、その後の2024年4月にはIngest方式としてSRTプロトコルもサポートしました。

2023年8月にはIVS Real-Time Streaming機能がリリースされました。IVS Broadcast SDKを使いWebRTCでIngestすることが基本的な使い方ですが、2024年3月にはOBS StudioなどStreaming Softwareでもサポートが始まったWHIP (WebRTC-HTTP Ingestion Protocol)もサポートするようになりました。そして今回2024年9月、RTMPSならびにRTMPがサポートされるIngest方式に加わったかたちになります。WHIPをサポートすることで一部のStreaming Softwareはサポートされるようになりましたが、RTMP(RTMPS)のサポートでより幅広いStreaming Softwareが利用できるようになったのではないでしょうか。

IVS Low-Latency StreamingとReal-Time Streaming、それぞれで対応しているIngest方式をまとめると以下のようになります。

  • Amazon IVS Low-Latency Streaming
    • RTMPS
    • RTMP (Insecure ingest)
    • SRT
  • Amazon IVS Real-Time Streaming
    • WebRTC (IVS Broadcast SDK)
    • WHIP (WebRTC-HTTP Ingestion Protocol)
    • RTMPS ←[New]
    • RTMP ←[New]

IVS Real-Time StreamingでRTMP Ingestによるストリーミングをしてみた!

それでは実際に、IVS Real-Time StreamingでRTMP Ingestを使ったストリーミングを試してみます。User Guideの以下ページを参考に進めていきます。

Stageリソースの作成

Stageリソースの作成から進めます。Amazon IVSのマネジメントコンソールを開き、Real-time streamingのStagesのページに進み[Create stage]ボタンを押下します。

Create stageの画面でStage nameを適切に入力します。Auto-record to S3について、今回は無効の状態で検証を進めました。[Create stage]ボタンでStageリソースを作成します。

ir01

Stageが作成できました。画面を下にスクロールさせていくとEndpointsにRTMPという項目があることが確認できますね!

ir02

ir04

またRTMPの使用についての注意事項も記載されています。AWSとしてはRTMPではなく暗号化されているRTMPSの使用を推奨している、ということですね。このあたりはIVS Low-Latency StreamingのRTMP insecure ingestと同様の見解かと思います。

Ingest configurationの作成

Stageリソース作成後、続いてIngest Configurationというリソースを作成します。(日本語だと取り込み設定と訳されているようようです。)IVSのマネジメントコンソール、Real-time streamingの項目のIngest configurationsを選択します。このIngest configurations、RTMP Ingest用に新たに作成されたリソースのようですね。

ir03

Get startedの内容についても確認しつつ、[Create ingest configuration]ボタンを押下してIngest Configuration作成ページに進みます。Ingest configuration nameを適切に設定し、先ほど作成したStageリソースを選択します。Ingest protocolではRTMPSを選択しました。またUser IDとしてわかりやすい名称を設定しておきました。

ir05

Ingest Configurationが作成できました。選択したStageリソースがAssociated stageとして表示されていますね。またParticipant IDが作成されています。User IDは先ほど作成時に指定したものですね。

ir06

画面を下にスクロールすると、Stream configurationの項目があります。Ingest serverの情報に加え、Stream keyについても情報がまとめられています。デフォルトでは黒点でマスクされていますが、Showをクリックすることで実際の値が確認できます。のちほどStreaming Softwareに設定するので、内容を控えておきます。

ir07

OBS Studioの設定

RTMP/RTMPSがサポートされたことで様々なStreaming Softwareの利用が検討できるようになったかと思います。今回はUser Guideにも使用例として記載があるOBS Studioを利用して検証してみました。

OBS Studioを起動し映像や音声ソースなどの設定を行います。続いて[設定]ボタンから配信先や出力についての設定を実施します。User Guide記載の項目を参考に進めましょう。特に、IVS Real-Time Streamingの制限事項、8.5Mbps、720pの入力上限には気をつけましょう。

配信 の項目については、サービスとしてカスタム…を選択し、現れたサーバ欄に先ほど確認したIngest configurationのIngest serverの値を、またストリームキーの欄にStream keyの値を設定します。

ir11

出力 の項目です。出力モードで詳細を選択します。エンコーダ設定の項目、ビットレートはデフォルトの2500 Kbpsとしました。キーフレームは1 s、CPU使用のプリセットはveryfast、チューンはzerolatencyに設定します。x264オプションではbframes=0 sliced-threads=0と指定しました。

ir09

映像 の項目では出力(スケーリング)解像度が1280x720であることを確認しておきます。

ir10

OBS StudioでIngestしてストリーミングを確認

OBS Studioで[配信開始]ボタンを押下し、IVSへのストリーミングを開始します。

ir12

マネジメントコンソールからStage詳細画面を確認すると、以下のようにStateがACTIVEとなっています。またThe stage is activeの表示の下、[Subscribe]ボタンを押下するとマネジメントコンソール上からストリーミングが視聴できます。

ir13

ir14

さらにマネジメントコンソールを下にスクロールしてみましょう。Ingest configurationsの項目をみてみると、ここでもStateがACIVEになっていることが確認できます。

ir15

Ingest Configurationの詳細画面でもこの表示を確認できます。

ir16

またStage sessionsでACTIVE状態のものを選択、 詳細ページから先ほど作成したIngest ConfigurationのParticipant ID/User IDでストリーミングをしていることが確認できます。

ir17

ir18

Web Sampleを使ったストリーミング確認

マネジメントコンソールからのストリーミング確認のほか、IVS Broadcast SDKを使ったSample codeのページでもストリーミングを確認してみましょう。

以下ブログエントリの「IVS Real-Time Streamingの映像視聴」の項目の手順を踏襲します。

マネジメントコンソールのStage詳細画面、Participant tokensの[Create token]ボタンからTokenを作成します。

ir19

Create tokenのダイアログでUser IDを適切に入力、CapabilitiesはSubscribeのみを選択します。Token durationは60(60分)としました。

ir20

Tokenが作成できました。マネジメントコンソールのコピーボタンでクリップボードにコピーしておきましょう。

ir22

IVS Real-Time Streaming Web Sample (HTML and JavaScript)のページをWebブラウザで開きます。カメラ、マイクの許可については許可を選択しておきました。index.htmlのPREVIEWの部分、Participant Tokenの欄にコピーしたTokenを入力します。[JOIN STAGE]ボタンを押下すると、OBSからRTMPSでIngestしている映像が表示されました!

ir23

映像表示箇所がちょっと小さいので大きくしてみます。参考にしているブログエントリと同様の手順でChromeデベロッパーツールから該当の<video>タグに適用されているmax-height: 150pxを無効にしました。しっかりストリーミングされていることが確認できますね!

ir24

まとめ

Amazon IVS Real-Time Streamingで新たにサポートされたRTMP Ingestについて確認してみました。これまでもWHIP Ingestのサポートで一部Streaming Softwareをカバーしてきましたが、より一般的なRTMP ingestのサポートでより多くのStreaming Softwareをカバーするかたちになったかと思います。なお、IVS Low-Latency StreamingのInsecure ingestと同様、推奨されるのは暗号化されたRTMPSのほうです。暗号化されていない素のRTMPの利用はStreaming Software側などの事情でどうしてもRTMPSが利用できない、といった場合に留めましょう。

Real-Time StreamingでのRTMP Ingestの利用の際には新しいリソースであるIngest configurationが必要です。Stageと関連付けて使用するリソースですが、Stream configurationを別のStageで再利用する、といった活用方法も考えられるかと思います。またWHIP IngestのTokenを作成する手順よりもシンプルになったのではないかと個人的には思います。いずれにせよ、リリース当初は映像のIngestをWebRTC (IVS Broadcast SDK)でどう処理するか、という点が課題であったReal-Time Streamingですが、RTMP Ingestへの対応で一般的なStreaming Softwareはカバーできるようになったのではないでしょうか。これからもどんどん活用の幅が広がっていきそうですね。

この記事をシェアする

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.