AWS IVS(Amazon Interactive Video Service)は、ライブ動画配信をアプリやウェブサイトに簡単に組み込むためのマネージドサービスです。

AWS IVS 概要
APIコール一つでゼロからライブ配信環境を立ち上げられる
Low-Latency Streaming(低レイテンシーのストリーミング)
Low-Latency Streamingは、OBSなどからRTMPで映像をプッシュし、IVS側でトランスコード・CDN配信する従来型のライブ配信モデルです。遅延は3〜5秒程度。大規模な一方向配信に向いています。料金は映像の入力時間と出力時間で計算されます。
Real-Time Streaming(リアルタイムストリーミング)
Real-Time Streamingは、WebRTCベースで遅延300ミリ秒未満を実現するモードです。
「ステージ」というリソースにホスト(最大12人)と視聴者(最大10,000人)が接続する形で、双方向のやり取りが可能です。料金は参加者時間ベースです。
OBS(Open Broadcaster Software) オープンソースの配信・録画ソフト。
カメラ・マイク・画面キャプチャなどの映像ソースを組み合わせてエンコードし、配信サーバーにプッシュする。
IVSに限らず、Twitch、YouTube Liveなどほぼすべてのライブ配信サービスで使われるデファクトスタンダードのツール。
IVSのLow-Latency Streamingでは、OBSからRTMP/RTMPSでチャンネルのIngest Endpointに映像を送る使い方が典型的。
RTMP(Real-Time Messaging Protocol) Adobeが開発したストリーミングプロトコル。
配信者→サーバーへの映像送信(Ingest)に広く使われている。
IVSのLow-Latency StreamingではRTMPまたはRTMPS(TLS暗号化版)、加えてSRTプロトコルでの入力もサポートしている。
視聴者側への配信にはRTMPではなくIVS独自の低遅延プロトコルが使われるので、RTMPはあくまでIngest側の話。
WebRTC(Web Real-Time Communication) ブラウザやモバイルアプリ間でP2P的に音声・映像・データをリアルタイムにやり取りするためのオープン標準。
Google Meetなどのビデオ通話で使われている技術と同系統。IVSのReal-Time Streamingはこれがベースで、300ミリ秒未満の超低遅延を実現している。
両者は組み合わせて使うこともできます。
たとえば、複数ホストがReal-Timeのステージ上で対談し、その模様をLow-Latencyチャンネルにブロードキャストすることで、少人数のリアルタイム対話と大規模視聴者への配信を同時に実現できます。
IVS固有のリソース・用語解説
チャンネル(Channel)
Low-Latency Streaming側の中核リソース。ライブストリームに関する設定データを保持するリソースで、チャンネルを作成し、そのストリームキーを使って配信を開始する Go Packages。
チャンネルには4タイプある。
- BASIC — 入力をそのままの品質で1つのレンディションとして配信する(トランスマックス) AWS。ABRなし。最も安価。
- STANDARD — トランスコードにより、入力から複数の解像度・ビットレートのレンディションを生成する AWS。デフォルトのチャンネルタイプ。マルチトラック入力を有効にするとトランスマックスモードになり、コスト削減も可能。
- ADVANCED_HD — トランスコードで最大720pのHDレンディションを生成する。2つのトランスコードプリセットから選択可能 AWS。
- ADVANCED_SD — トランスコードでSD品質までのレンディションを生成する。同じく2つのプリセットから選択可能。
チャンネルにはLatency Modeの設定もあり、コンソール上では「Ultra-low」と「Standard」の2つが選べる(APIではLOW / NORMAL) AWS。
ストリームキー(Stream Key)
チャンネル作成時にIVSが発行する識別子で、配信の認可に使われる。パスワードと同様に扱うべきもので、これがあれば誰でもそのチャンネルに配信できてしまう Go Packages。OBSなどの配信ソフトにIngest Endpointと一緒にセットして使う。
ステージ(Stage)
Real-Time Streaming側の中核リソース。ホストアプリケーションとSDKの間の主要なインタラクションポイントで、ステージそのものを表す Open Source at AWS。
参加者はトークンを使ってステージにjoin/leaveし、ステージ上で音声・映像をpublish/subscribeする。最大12ホスト、最大10,000視聴者。ステージの内容をLow-Latencyチャンネルにブロードキャストして大規模配信に繋げることも可能。
ルーム(Room)
IVS Chatのリソース。ライブ配信に併設するマネージドなチャット機能で、チャットルームを作成してユーザー間のメッセージングを可能にする AWS。
重要な点として、ルームはチャンネルと直接的な関係を持たない。2つのリソースタイプは独立して管理・使用できる Ivs。
つまりチャットだけ単独で使うこともできるし、1つのルームを複数チャンネルで共有するといった構成も自由。ルームにはLambdaによるメッセージレビュー(自動モデレーション)やCloudWatch/S3/Kinesisへのログ転送も設定可能。ユーザーはバックエンドで生成したチャットトークンを使ってルームに接続する。
その他の主要リソース
Recording Configuration — ライブストリームの録画設定と保存先を定義するリソース。複数のチャンネルが同じRecording Configurationを参照できる Go Packages。S3に自動録画してLive-to-VODを実現する際に使う。
Playback Key Pair — 再生認可トークンの署名・検証に使う公開鍵・秘密鍵のペア。プライベートチャンネル(再生認可が有効なチャンネル)で、視聴者を制限する際に使う Go Packages。
Playback Restriction Policy — 国やオリジンサイト単位で再生を制限するポリシー。
Timed Metadata — ストリームに同期してテキストデータを注入する仕組み。PutMetadata APIで送信し、Player SDKのイベントでクライアント側が受け取る。投票、スコア表示、ライブコマースの商品切り替えなどに使う。チャンネルやステージとは別のリソースではなく、APIを通じた機能。
Broadcast SDK / Player SDK — 配信側(Broadcast)と再生側(Player)のクライアントSDK。iOS、Android、Web向けにそれぞれ提供されている。Real-Time StreamingのSDKはWebRTCベースのStage関連機能を含む。
ストリーム(Stream)がチャンネルとは別のオブジェクトとして存在し、そこにステータスが紐づいています。
Stream の state
LIVE と OFFLINE の2値 AWSです。
ただし注意点があり、OFFLINE状態はAPIから返されない場合がある。配信中でないことを判定するには、GetStream APIが返す ChannelNotBroadcasting エラー(HTTP 404)を使うべき AWSとドキュメントに明記されています。
Stream の health
HEALTHY、STARVING、UNKNOWN の3値 AWS。STARVINGはIVSへの映像入力が途切れがちな状態(帯域不足やエンコーダーの問題など)を示します。
Stream のその他のプロパティ
streamId(ライブまたは過去のストリームの一意識別子)、startTime、playbackUrl、viewerCount(同時視聴数、再生開始から約15秒で反映、終了から約1分で除去される) AWSが含まれます。
EventBridge経由のイベント
APIポーリング以外に、EventBridgeでストリームの状態変化をリアルタイムに検知できます。ストリームセッションのイベントとしては Session Created、Stream Start、Stream End、Session Ended などがある AWS。加えて、録画を有効にしている場合は Recording Start、Recording End、Recording Start Failure、Recording End Failure といった録画状態の変化イベントも発火します。ストリームのヘルス変化(HEALTHY→STARVINGなど)もEventBridgeイベントとして受け取れます。
コンソール上の「Live channels」
IVSコンソールのナビゲーションペインに「Live channels」という項目があり、現在配信中のチャンネルを一覧表示して、そこからストリームを直接プレビューできる AWS。質問にあった「ライブチャネル」はこのコンソール画面のフィルタリングビューを指しているものと思われます。チャンネル自体に「ライブ」「オフライン」というステータス属性があるわけではなく、チャンネルに紐づくストリームが存在するかどうかで判定する設計です。
Real-Time Streaming(ステージ)側のイベント
ステージ側にもEventBridgeイベントがあり、Composition State Change(Session Start / Session End / Session Failureなど)や、個別参加者のRecording State Changeイベント AWSが送信されます。クライアントSDK側では STAGE_CONNECTION_STATE_CHANGED、STAGE_PARTICIPANT_JOINED、STAGE_PARTICIPANT_LEFT などのイベントでステージ上の状態変化を検知します。
AWS SDKでAPIクライアント利用
SDKクライアントの分離
- Low-Latency Streaming(チャンネル系) →
@aws-sdk/client-ivs(JS)、boto3.client('ivs')(Python) - Real-Time Streaming(ステージ系) →
@aws-sdk/client-ivs-realtime(JS)、boto3.client('ivs-realtime')(Python) - Chat(ルーム系) →
@aws-sdk/client-ivschat(JS)、boto3.client('ivschat')(Python)
3つとも独立したAPIエンドポイント・SDKクライアントです。
Low-Latency Streaming API(チャンネル系)
チャンネル管理
CreateChannel— チャンネルとストリームキーを同時に作成。チャンネルタイプ、レイテンシーモード、録画設定などを指定GetChannel/BatchGetChannel— チャンネル設定の取得ListChannels— アカウント内のチャンネル一覧UpdateChannel— チャンネル設定の更新DeleteChannel— チャンネル削除(関連ストリームキーも削除)
ストリームキー管理
CreateStreamKey— 追加のストリームキー作成(ただし1チャンネルにつきストリームキーは1つまでという制限があり、CreateChannelで既に1つ作られているため、リセットしたい場合はDeleteStreamKey→CreateStreamKeyの順で行う AWS)GetStreamKey/ListStreamKeys— ストリームキーの取得・一覧DeleteStreamKey— ストリームキー削除
ストリーム操作・監視
GetStream— 現在ライブ中のストリーム情報(state、health、viewerCount)を取得。配信中でなければChannelNotBroadcastingエラーListStreams— 全ライブストリーム一覧GetStreamSession/ListStreamSessions— 過去のストリームセッション情報StopStream— 配信を強制停止PutMetadata— ストリームにTimed Metadataを注入
録画設定
CreateRecordingConfiguration/GetRecordingConfiguration/ListRecordingConfigurations/DeleteRecordingConfiguration
再生制限
ImportPlaybackKeyPair/GetPlaybackKeyPair/ListPlaybackKeyPairs/DeletePlaybackKeyPairCreatePlaybackRestrictionPolicy/UpdatePlaybackRestrictionPolicy/DeletePlaybackRestrictionPolicy
Real-Time Streaming API(ステージ系)
ステージ管理
CreateStage— ステージを作成(オプションで参加者トークンも同時生成可能) AWS CLIGetStage— ステージ情報取得ListStages— アカウント内のステージ一覧 AWS CLIUpdateStage— ステージ設定の更新(録画設定の変更など)DeleteStage— ステージ削除(全参加者を切断) AWS CLI
参加者トークン・管理
CreateParticipantToken— 既存ステージに対して追加のトークンを発行 AWS CLI。capabilities(PUBLISH / SUBSCRIBE)やduration(有効期限)を指定可能 AWS。SUBSCRIBEのみにすれば視聴専用トークンになるDisconnectParticipant— 特定の参加者を切断し、永久にそのステージから追放 AWS CLIGetParticipant— 参加者情報の取得 AWS CLIListParticipants— ステージセッション内の参加者一覧 AWS CLIListParticipantEvents— 参加者のイベント履歴 AWS CLI
セッション
GetStageSession/ListStageSessions— ステージセッション情報 AWS CLI
Composition(サーバーサイド合成)
StartComposition— ステージの映像を合成してIVSチャンネルやS3に出力(これがステージ→チャンネルのブロードキャストの仕組み)StopComposition/GetComposition/ListCompositions
ストレージ設定(録画用)
CreateStorageConfiguration/GetStorageConfiguration/ListStorageConfigurations/DeleteStorageConfiguration
Chat API(ルーム系)
CreateRoom/GetRoom/ListRooms/UpdateRoom/DeleteRoomCreateChatToken— ユーザーがルームに接続するためのトークン生成SendEvent— サーバー側からルームにイベント送信DeleteMessage— メッセージ削除DisconnectUser— ユーザー切断CreateLoggingConfiguration/UpdateLoggingConfiguration/DeleteLoggingConfiguration
補足:「配信の開始」はAPIで行うのか?
Low-Latency Streamingの場合、配信の開始はAPIではなく、OBSなどの配信ソフトからRTMPでIngest Endpointにプッシュすることで始まります。APIの役割はチャンネルとストリームキーの作成・管理であり、「配信開始」というAPI操作はありません。StopStreamで強制停止はできます。
Real-Time Streamingの場合も、ステージへの参加はクライアントSDK(Broadcast SDK)側で stage.join() を呼ぶことで行います。サーバー側APIの役割はステージの作成・トークン発行・参加者管理です。