[update] Amazon IVS Real-Time StreamingでRTMP ingestをサポートしました!
はじめに
清水です。遅延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リソースを作成します。
Stageが作成できました。画面を下にスクロールさせていくとEndpointsにRTMPという項目があることが確認できますね!
また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用に新たに作成されたリソースのようですね。
Get startedの内容についても確認しつつ、[Create ingest configuration]ボタンを押下してIngest Configuration作成ページに進みます。Ingest configuration nameを適切に設定し、先ほど作成したStageリソースを選択します。Ingest protocolではRTMPS
を選択しました。またUser IDとしてわかりやすい名称を設定しておきました。
Ingest Configurationが作成できました。選択したStageリソースがAssociated stageとして表示されていますね。またParticipant IDが作成されています。User IDは先ほど作成時に指定したものですね。
画面を下にスクロールすると、Stream configurationの項目があります。Ingest serverの情報に加え、Stream keyについても情報がまとめられています。デフォルトでは黒点∙
でマスクされていますが、Show
をクリックすることで実際の値が確認できます。のちほどStreaming Softwareに設定するので、内容を控えておきます。
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の値を設定します。
出力 の項目です。出力モードで詳細
を選択します。エンコーダ設定の項目、ビットレートはデフォルトの2500 Kbps
としました。キーフレームは1 s
、CPU使用のプリセットはveryfast
、チューンはzerolatency
に設定します。x264オプションではbframes=0 sliced-threads=0
と指定しました。
映像 の項目では出力(スケーリング)解像度が1280x720
であることを確認しておきます。
OBS StudioでIngestしてストリーミングを確認
OBS Studioで[配信開始]ボタンを押下し、IVSへのストリーミングを開始します。
マネジメントコンソールからStage詳細画面を確認すると、以下のようにStateがACTIVE
となっています。またThe stage is activeの表示の下、[Subscribe]ボタンを押下するとマネジメントコンソール上からストリーミングが視聴できます。
さらにマネジメントコンソールを下にスクロールしてみましょう。Ingest configurationsの項目をみてみると、ここでもStateがACIVE
になっていることが確認できます。
Ingest Configurationの詳細画面でもこの表示を確認できます。
またStage sessionsでACTIVE状態のものを選択、 詳細ページから先ほど作成したIngest ConfigurationのParticipant ID/User IDでストリーミングをしていることが確認できます。
Web Sampleを使ったストリーミング確認
マネジメントコンソールからのストリーミング確認のほか、IVS Broadcast SDKを使ったSample codeのページでもストリーミングを確認してみましょう。
以下ブログエントリの「IVS Real-Time Streamingの映像視聴」の項目の手順を踏襲します。
マネジメントコンソールのStage詳細画面、Participant tokensの[Create token]ボタンからTokenを作成します。
Create tokenのダイアログでUser IDを適切に入力、CapabilitiesはSubscribe
のみを選択します。Token durationは60
(60分)としました。
Tokenが作成できました。マネジメントコンソールのコピーボタンでクリップボードにコピーしておきましょう。
IVS Real-Time Streaming Web Sample (HTML and JavaScript)のページをWebブラウザで開きます。カメラ、マイクの許可については許可を選択しておきました。index.html
のPREVIEWの部分、Participant Token
の欄にコピーしたTokenを入力します。[JOIN STAGE]ボタンを押下すると、OBSからRTMPSでIngestしている映像が表示されました!
映像表示箇所がちょっと小さいので大きくしてみます。参考にしているブログエントリと同様の手順でChromeデベロッパーツールから該当の<video>タグに適用されているmax-height: 150px
を無効にしました。しっかりストリーミングされていることが確認できますね!
まとめ
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はカバーできるようになったのではないでしょうか。これからもどんどん活用の幅が広がっていきそうですね。