MediaLiveのRTP OutputをMediaConnectの入力ソースに使ってみた
はじめに
清水です。AWSの高品質ライブ動画伝送サービスであるAWS Elemental MediaConnect、個人的に入力プロトコルが他サービスより限定されていて少し検証のハードルが高い印象があります。例えばMediaConnectリリース時(ちょうどそのときre:Invent期間中でLas Vegasにいたことを覚えています。Ariaだった気が)はリソースの作成のみで、実際の動作検証ができませんでした。
その半月後、やっと動作検証ができたのですが、内容はVLC media playerを使ってMP4ファイルを伝送するというものでした。
個人的に「ライブ動画伝送」感が少し足りない印象です。MediaLiveのようにスマホアプリなどからその場で撮影した映像を伝送できればな、と思っていましたが、MediaConnectの入力プロトコルに対応したアプリなどが入手できずにいました。そんな中、2021年3月のMediaConnectのSRTプロトコル対応がありました。SRTプロトコルに対応したStreaming Softwareのスマホアプリがあり個人的にやっとMediaConnectでの「ライブ動画伝送」ができたわけです。
とはいえ、SRTプロトコルに対応したStreaming Softwareもまだまだ限定されているのかな、というのが個人的な印象です。理想的には身近なRTMPプロトコルでMediaConnectの検証ができないかな、などと考えていました。(RTMPプロトコルの良し悪しはいったん置いておきます。実際SRTその他MediaConnectに対応しているプロトコルを映像伝送に使用するのが本来の姿であるかとは思いますが、今回は「個人的な検証のしやすさ」を重視しています。)
RTPに対応したStreaming Software、スマホアプリなどがあればいいのかなぁ、などと思って探したこともありますが、これといって入手しやすいものは見つかりませんでした。そんな中、ふと MediaLiveのRTP Output (UDP Output)機能 を思い出しました。「MediaLiveはRTMPで入力できるので、これをRTPでMediaConnectに出力すれば、MediaConnectの入力として使用できる」、と思ったわけです。本エントリでは実際にこの構成を試してみたのでまとめてみたいと思います。
MediaLiveのRTP OutputをMediaConnectの入力ソースとする
検証してみた構成は以下になります。MediaLiveのChannelは、(1) RTMPを受け付けMediaConnectに出力するもの、(2) MediaConnectのFlowをInputとするもの、と2種類出てきます。後者はMediaConnectに入力したものの視聴確認として利用しています。
MediaConnect Flowの作成
まずはMediaConnectのFlowを作成していきます。[Create flow]ボタンから進み、flow nameを適切に入力します。Availability Zoneは今回は特に指定しませんでした。
Source typeはStandard sourceを選択、source nameも適切に入力します。ProtocolはRTPを選択、Inbound portは今回5432
としました。その他の設定項目としてWhitelist CIDR blockを入力するのですが、現段階で入力元となるMediaLiveのIPアドレスは確定できていない状態です。そのためこの段階では0.0.0.0/0
で指定し、flowをStartする前に実際のMediaLiveのIPアドレスに変更することとします。
MediaConnect Flowが作成できました。
SourceのInbound IP addressはRTP outputを設定するMediaLiveの設定で使用するので控えておきます。
RTP OutputなMediaLiveのリソース作成
続いてRTP outputを行うMediaLiveリソースを作成していきます。まずはInputから。Input typeはRTMP (push)を選択します。Input classはSINGLE_INPUTとしました。
続いてChannelの作成です。Channel classはInputとあわせてSINGLE_PIPELINEを選択しました。Input attachmentsで作成したInputを選択します。Output groupsではgroup typeとしてUDPを選択します。
UDP destinationsのDestination Aには以下を入力します。UDP settingのNameも適切に入力しておきました。
rtp://[MediaConnectのSourceのInbound IP address]:5432
またOutputのStream settings、解像度とコーデックを指定しておきました。
Channel作成後、DestinationsタブのEgress endpoints、Source IPの箇所を確認しておきます。このIPアドレスからMediaLiveは出力を行うので、MediaConnectのFlow側でこのIPアドレスを許可すれば良いわけですね。
MediaConnect Sourceの設定変更
RTP OutputなMediaLiveのChannelが作成できたので、MediaConnect SourceのWhitelist CIDR blockを更新しておきましょう。該当FlowのSourceを選択して、[Update]ボタンから進みます。
Whitelist CIDR blockの箇所でMediaLive ChannelのEgress endpoint IPを入力して[Update source]ボタンを押します。
MediaConnect InputなMediaLiveリソースを作成
続いてMediaConnect FlowをInputとするMediaLiveリソースを作成していきます。こちらはMediaConnectへ入力した映像の確認用となります。今回はMediaLiveのWorkflow Wizard機能を使って配信環境一式をまるっと作成してしまいます。
Choose a video sourceではMediaConnect
を選択し、作成済みのMediaConnect Flowを選択します。
Add video outputsではこのWorkflowの出力先としてMediaPackageを選択しました。Review画面で内容を確認して[Create workflow resources]します。
以下ができあがったWorkflowです。
各リソースをStartさせ映像を打ち上げて視聴確認
RTP OutputなMediaLive、MediaConnect Flow、MediaConnect InputなMediaLive、それぞれのリソースが作成できたので、実際に各リソースをStartさせ、RTP OutputなMediaLiveに対して映像を打ち上げてみます。マネジメントコンソールから各リソースのようす(CloudWatch metrics)を確認しつつ、最終的にMediaConnect InputなMediaLiveの出力部分で伝送された映像の確認を行います。
各リソースのStartする順番ですが、MediaConnect Flow → RTP OutputなMediaLive → MediaConnect InputなMediaLiveとしました。といってもそこまで厳密に管理はしておらず、Running(MediaConnectはACTIVE)に遷移するタイミングまでチェックはしていません。(それぞれリトライ機能などで最終的に問題なく映像が伝送され、視聴できるようになるかと思います。)
RTP OutputなMediaLiveに対しての映像の打ち上げだけは、各リソースのRunningへの状態遷移を確認してから行いました。なおStreaming SoftwareはiPhone XS上のZixi ONAIRを使用し、RTMPプロコルを使って打ち上げています。(ZixiのアプリですがZixiプロトコルは使用していません。)
まずはRTP OutputなMediaLiveのHealthタブのようすです。
続いてMediaConnect FlowのSource health metricsです。
最後にMediaConnect InputなMediaLiveのHealthタブです。全体(2のMediaLive Channelと1つのMediaConnect Flow)とおしてビットレートなど調整する点は多いかと思いますが、各リソース間で連携した映像伝送ができていそうです。
最終的な状態、MediaConnect InputなMediaLiveの出力についても確認します。MediaPackage HLS endpointのCloudFront URLをVideoJS HTTP Streamingのサイトで視聴してみました。
映像、音声とも問題なく視聴できています!
まとめ
AWS Elemental MediaLiveのRTP OutputをAWS Elemental MediaConnectのSourceとして利用してみました。実際にRTMPでMediaLiveに映像を打ち上げ、MediaConnectをInputとしたもう1つのMediaLiveの出力で映像が視聴できることを確認してみました。RTPプロトコル対応のStreaming Softwareを手配することが難しかったのですが、MediaLiveをうまく活用することでRTMPプロトコルの打ち上げ映像を変換して利用することができますね。MediaLiveの多機能さを改めて実感しました。個人的にはこれでMediaConnectに対応した入力プロトコルが準備しやすくなったので、検証が捗るかなと思います。