Amazon IVS Real-Time StreamingにOBSからWHIPでストリーミングしてみた!

Real-Time StreamingではPublishにIVS Broadcast SDKの利用が前提でしたが、WHIP (WebRTC-HTTP Ingestion Protocol)を使うことでOBS StudioからPublish可能になりました。
2024.03.15

はじめに

清水です。先日、Amazon IVS Real-Time StreamingのUser Guideを眺めていたところ、「OBS and WHIP Support」というページが追加されていることを確認しました。(Document Historyによると2024/02/06付で更新されていたようです。)

Document History (Real-Time Streaming) - Amazon IVS

IVSのReal-Time Streaming、基本的にはIVS Broadcast SDKを使ってPublish (ストリーミング)をするものだと思っていたので、User GuideにOBSのサポートが記載されたことに驚きました。

追加された「OBS and WHIP Support (Real-Time Streaming) - Amazon IVS」のページを詳しく確認してみると、 WHIP (WebRTC-HTTP Ingestion Protocol) というプロトコルを使用してOBS経由でPublishingするようです。このWHIPについては、WebRTC取り込みを標準化するために開発されたIETFドラフトとのこと。(WebRTC-HTTP ingestion protocol (WHIP))OBSのような使い慣れたStreaming Software経由でIVS RealTime StreamingへPublishingできるのは嬉しいですよね。Webブラウザからのストリーミング(Publishing)も便利ではあるのですが、きちんと映像制作をしてストリーミングしたい、という場合にはやはりOBSなどの利用に分があるかと思います。

なお、OBS (OBS Studio)としてもWHIPは2023/11/12リリースのバージョン30.0でサポートされたとのことです。

本エントリでは、OBSでWHIPを使ってIVS Real-Time Streamingにストリーミングしてみたのでまとめてみたいと思います。

IVS Real-Time StreamingのStageリソースの準備

まずはIVS Real-Time StreamingのリソースであるStageを作成していきます。Amazon IVSのマネジメントコンソールに進み、Real-time streamingのページから[Create stage]ボタンを押下します。

Stage nameを適切に入力し、[Create stage]します。

Stageが作成できました。

OBS用Participant tokenの作成

続いて、OBSが作成したStageに参加(Publishing)するために必要なParticipant token(参加者トークン)を作成します。WHIP的にはこのParticipant tokenは bearer token と呼ばれるようです。

Stage詳細画面ののParticipant tokensの欄、[Create a participant token]ボタンで進みます。User IDを入力し、CapabilitiesについてはPublishのみを選択しました。Token durationは60(60分)としています。このToken durationは使用用途に応じて適宜変更しましょう。

Participant tokenが作成できたら、Tokenの値などをメモしておきましょう。これらの情報はマネジメントコンソールの画面遷移などがあると消えて参照できなくなってしまいます。特にTokenの値はこのあとOBSの配信先設定必要になります。

OBSからWHIPでIVS Real-Time StreamingにPublish

IVS Real-Time StreamingのStageリソースならびにOBS用のParticipant tokenが作成できました。続いて、OBSでWHIPを使ってIVS Stageに配信(Publishing)する設定をしていきます。User Guideの「OBS and WHIP Support」を参照しながら進めます。

OBSの[設定]ボタンから設定画面に進みます。[配信]の項目で、サービスとしてWHIPを選択します。サーバーはUser Guideを参照してhttps://global.whip.live-video.netを指定しました。Bearerトークンの欄に、先ほど作成したParticipant tokenのToken値を入力します。

続いて[出力]の項目に進ます。こちらもUser Guide記載の内容を設定していきます。出力モードをデフォルトの「基本」から「詳細」に変更しエンコーダ設定のキーフレーム間隔を1 sにします。またCPU使用のプリセットをultrafast、チューンをzerolatencyに設定します。

以上でOBSの準備ができました。映像を準備して配信を開始します。(せっかくのStreaming Software使用のIVS Real-Time Streamingということで、映像キャプチャデバイスのWebカメラだけでなくメディアソースやmacOSスクリーンを並べてみたのですが…… 筆者の映像センスのなさが垣間見えますね。拙い画作りをご容赦ください……) OBSの[配信開始]ボタンを押下するとIVSのStageへPublishが開始されます。

AWSマネジメントコンソールも確認してみましょう。Stage sessionが追加されていること、Stage participantとして先ほど作成したUser ID(OBS-WHIP)が参加していることなどが確認できます。

IVS Real-Time Streamingの映像視聴

OBSからWHIPでIVS Real-Time StreamingのStageにストリーミング(Publish)することができました。続いては視聴者(Subscriber)側からこのStageに参加して、OBSからストリーミングされている映像を視聴してみます。この視聴者側ページについては、User Guideに記載されている以下のSample Codeのページを使用しました。OBSを使用しない、Webブラウザ同士でPublish/Subscribeする場合と同様の手順となります。([NEW] Amazon IVSで遅延300ミリ秒未満で10,000人へのReal-Time Streamingができるようになりました!! | DevelopersIO

まずは視聴者用のParticipant token(参加者トークン)を作成します。OBS用のParticipant tokenと同様にStage詳細画面の[Create a participant token]ボタンで進みます。User IDを入力し、Capabilitiesについて今度は視聴のみですのでSubscribeを選択しました。Token durationは60(60分)としています。

視聴者用のParticipant tokenが作成できました。Tokenの値はこのあと視聴ページで入力するのでメモしておきます。

IVS Real-Time Streaming Web Sample (HTML and JavaScript)」をWebブラウザで開きます。カメラ、マイクの許可については許可を選択しておきました。

index.htmlのPREVIEWの部分、Participant Tokenの欄に先ほど確認した視聴者用のToken値を入力して[JOIN STAGE]ボタンを押下します。ページ下部に[MUTE MIC]、[MUTE CAMERA]ボタンが現れ、さらにその下にOBSからストリーミングされている映像が表示されました!

もうちょっと映像表示箇所が大きくならないかな、、ということで、映像表示部分を右クリックして[検証]からChromeのデベロッパーツールを表示、該当の<video>タグに適用されているmax-height: 150pxを無効にしてみました。(なお筆者はHTMLやCSSまわりに疎く、見様見真似でやっています。)

映像表示部分が大きくなりました!映像が少し荒いのは、OBSの設定によるもの(CPU使用プリセットのultrafastなど)かと思います。

OBSの画面と視聴ページをならべると以下のようなぐあいです。Real-Time Streamingでは遅延300ミリ秒未満を謳っていることもあり、パッと見ですが大きな遅延は感じられません。

Streaming Software(OBS)からの映像をIVS Real-Time Streamingで視聴できるのが新鮮でなりませんね!

まとめ

OBS StudioからWHIP (WebRTC-HTTP Ingestion Protocol)を使ってAmazon IVSのReal-Time Streamingへストリーミングしてみました。IVS Low-Latency StreamingのほうではOBSをよく利用していましたが、Real-Time StreamingでOBSを利用するのは新鮮ですね!ストリーミングする環境はWebブラウザとOBSなどのStreaming Software、それぞれに長所短所があり、適宜使い分ける必要があるかと思います。これまでWebブラウザなどIVS Broadcast SDKの利用が前提だったIVS Real-Time StreamingでStreaming Softwareをサポートしたことは嬉しいですね!また今回はOBSでの確認でしたが、ほかStreaming SoftwareでのWHIPサポートについても気になるところです。