[UPDATE] AWS Elemental MediaConnectがSRTプロトコルをサポートしました!

AWS Elemental MediaConnectでこれまでのZixi、RIST、RTPなどのプロトコルに加え、新たにSRT (Secure Reliable Transport)プロトコルに対応しました。実際に映像を打ち上げ動作を確認してみます。
2021.03.29

はじめに

清水です。本日お届けするアップデート情報はこちら!AWSの高品質ライブ動画伝送サービスであるAWS Elemental MediaConnectでSRTプロトコルをサポートしました!(2021/03/17にポストされたアップデート情報になります。)

re:Invent 2018期間中に新サービスとしてリリースされたAWS Elemental MediaConnect、リリース当時はRTP (Real-Time Transport Protocol)、RTP-FEC、そしてZixi (push)のサポートでした。2019年にはZixi (pull)をサポート、そしてRIST (Reliable Internet Stream Transport)プロトコルもサポートされました。そしてこのたび、プロトコルとしてSRT (Secure Reliable Transport)もサポートに加わったかたちです。

本エントリではSRTプロトコルで映像を打ち上げ、AWS MediaConnectからAWS Elemental MediaLiveに伝送、さらにAWS Elemental MediaStoreと連携させて伝送後の映像をHLS形式で視聴してみましたのでまとめてみます。

AWS Elemental MediaConnectでSRTなFlowを作成

まずはAWS Elemental MediaConnectでFlowを作成します。マネジメントコンソールでMediaConnectのページに進み、[Create flow]ボタンをクリックします。

Flowの名前を入力します。Availability Zoneも指定可能ですが、今回はAny (default)としました。VPCについては今回は使用しないのでそのまま進めます。

Source typeはStandard sourceを選択、こちらもSourceの名前を入力しておきます。ProtocolでデフォルトのRTPからSRT listenerに変更します。

その他パラメータの指定です。ユーザガイドを参考に進めます。

Creating a flow that uses a standard source - AWS Elemental MediaConnect

Inbound portについて、今回は3000を使用します。Whitelist CIDR blockとしてアクセス元(打ち上げ元)のIPアドレスをCIDR形式で指定します。Source descriptionについてはこのSourceの説明を入力しておきました。Maximum bitrateには、後述するStreaming Softwareのビットレート2,000kbpsを考慮して5000000とします。Minimum latencyについては空欄としました。(MediaConnectのデフォルトの2,000ミリ秒が適用される想定です。)Decryptionは無効のままで[Create flow]でFlowを作成します。

Flow作成後の画面で、SourceのInboud IP addressを確認しておきます。こちらが映像打ち上げの際のAWS側エンドポイントのIPアドレスとなります。

AWS Elemental MediaLiveリソースの作成

MediaConnectのFlowが作成できたら、続いてMediaConnectからの映像を受け取るAWS Elemental MediaLive側のリソースを作成していきます。なお、MediaConnectからの伝送後の映像をHLS形式で視聴確認する場合、MediaLiveの出力を(今回であれば)AWS Elemental MediaStoreに書き出す必要があります。このMediaStoreについてもリソースの作成が本来必要ではありますが、本エントリでは既存のMediaStoreリソース(コンテナ)を使用したため割愛させていただきます。またMediaLiveの設定についても、MediaConnectとの連携部分を中心とさせていただき、こちらも詳細については割愛させていただきます。これらの詳細については下記エントリなどを参照ください。

まずはMediaLiveのInputリソースを作成します。[Create Input]から進みInput nameを適切に入力、Input typeはMediaConnectを選択します。

MediaConnect flowsの設定箇所、Input classはSINGLE_INPUTとしました。Flow A ARNで先ほど作成したMediaConnectのFlowを選択します。

Role ARNにて、MediaLiveデフォルトのIAMロール(MediaLiveAccessRole)を指定しました。[Create]ボタンでInputを作成します。

Inputが作成できたら、続いてMediaLiveのChannelリソースを作成します。[Create channel]ボタンから進み、Channel nameを適切に入力、IAMロールはMediaLiveデフォルトのロール(MediaLiveAccessRole)を指定しました。Channel templateとしてLive event (HLS)をベースに設定していきます。またChannel classはSINGLE_PIPELINEとしました。

Input attachmentsでは先ほど作成した、MediaConnectをInput typeに持つInputを選択し、[Confirm]します。

Output groupsでHLS group destinationの設定を行います。URLにはmediastoressl://でMediaStoreコンテナのエンドポイントならびにパスを入力します。またHLS settingsのCDN settingsの項目で、HLS media storeを選択しておきます。

今回は動作検証が目的のため、HLSのABRは不要と判断し、720p30以外のoutputsについては削除してしまいました。

[Create channel]ボタンでChannelを作成します。

Streaming Software「It's my Live」の準備

今回、SRTプロトコルに対応したストリーミングソフトウェアとしてIt's my LiveというiPhone向けアプリを使用しました。

Ingest方式で広く使われているRTMPのほか、HLSや今回使用するSRTでのIngestに対応しているようです。このアプリをiPhone 6s上で動かします。起動後、右上の歯車のアイコンから設定画面に移動、URL1にsrt://[MediaConnectIP]:3000を指定します。[MediaConnectIP]は先ほどMediaConnectでFlow作成直後に確認したSourceのInbound IP address、続く3000はFlow作成時に指定したポート番号ですね。

ビットレートやフレームレートなどは右下のアイコンで指定可能です。以下のように、ビットレート2000kbps、フレームレート30fpsと指定しました。(最後の倍率はカメラの倍率を示しているようです。)

実際にMediaConnectにSRTプロトコルで映像を打ち上げて確認

MediaConnect、MediaLiveとMediaStore、そしてStreaming Software側の準備が整いました。いよいよ実際にMediaConnectにSRTプロトコルで映像を打ち上げ、視聴確認をしてみます。まずはMediaConnectのFlow、MediaLiveのChannelをそれそれStartさせましょう。

MediaConnectはStatusがACTIEに、MediaLiveはChannel stateがRunningになれば準備完了です。

Streaming Software「It's my Live」で画面右端真ん中のボタンを押すと打ち上げがはじまります。(ボタンが赤くなります。)

映像打ち上げが開始されたら、Video.jsのvideojs-http-streaming(VideoJS HTTP Streaming/VHS)を使って視聴してみます。MediaStoreのトップレベルマニフェストファイルのURLを入力、[Load]して再生させてみましょう。(MediaStoreはパブリックアクセス設定、ならびにCORS設定済みとします。)

HLS形式での視聴ができました!

まとめ

AWS Elemental MediaConnectで新たにサポートされたSRTプロトコルを使いStreaming Softwareから映像を打ち上げ、MediaLiveとMediaStoreを連携させて実際に打ち上げた映像を視聴してみました。SRTは信頼性が高くかつ低遅延であることから、Ingest方式の新たなスタンダートになるかと期待されている技術です。MediaConnectでサポートされたことでAWSでもマネージドサービスとして使用できるようになりました。さらに以下のAWS Media Blogのエントリによると、オンプレミス側のライブエンコーダ、AWS Elemental LiveでもSRTプロトコルが利用可能になったとのことです。

また今回はAWS Elemental MediaConnectでのSRTプロトコルのサポートでしたが、AWS Elemental MediaLiveとしてSRTをサポートしていくのか、という点も気になるところでした。