AWS Elemental MediaConnectにVLC media playerから映像伝送してみた #reinvent #mediaservice

はじめに

清水です。先日のre:Invent2018でリリースされた注目の新サービス「AWS Elemental MediaConnect」、本エントリではVLC media playerからAWS Elemental MediaConnectに映像を伝送してみました。伝送後の映像はさらにAWS Elemental MediaLiveに配信し、通常のライブ配信と同様にAWS Elemental MediaStore、Amazon CloudFrontと連携させて視聴を確認してみました。構成図としては下記のようになります。

AWS Elemental MediaConnectでFlowを作成する

まずはAWS Elemental MediaConnectでFlowを作成します。マネージメントコンソールから[Create Flow]で進みます。

名称などを入力していきます。SourceのProtocolですが、今回はRTPを選択します。Ingest portは5432とし、Whitelist CIDR blockを適切に入力、[Create flow]ボタンでFlowを作成します。

作成後、実際にFlowを稼働させるためには[Start]ボタンでStartさせる必要がありますが、これは伝送開始時に行います。続いてMediaLiveのリソースを作成していきます。

AWS Elemental MediaLive、AWS Elemental MediaStore、Amazon CloudFrontのリソース準備

MediaLive、MediaStore、そしてCloudFrontのリソース作成については、通常のライブ配信の場合と変わりありません。MediaLiveのInput作成時にInput typeをMediaConnect Flowにする点だけ注意しましょう。FlowのARNを入力してInputを作成します。

続いて出力先をMediaStoreとして、MediaLiveのChannelを作成していきます。MediaLiveの出力形式はHLSとしました。詳細な手順については下記をご参照ください。

またMediaStoreをオリジンとしてCloudFrontディストリビューションも作成しておきます。

VLC media playerから映像を伝送し配信を確認する

AWS側のリソース、AWS Elemental MediaConnect、AWS Elemental MediaLive、AWS Elemental MediaStore、Amazon CloudFrontの準備ができたら、VLC media playerからRTPプロトコルで映像をMediaConnectに伝送してみます。まずはMediaConnectのFlow、MediaLiveのChannelをそれぞれStartさせます。

MediaConnectのFlowがACTIVE状態、MediaLiveのChannelがRunning状態になったら、いざ、VLC media playerから映像を伝送してみます。今回は以下の環境のmaxOS/VLC media playerで検証しました。

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.13.6
BuildVersion:   17G3025

$ /Applications/VLC.app/Contents/MacOS/VLC --version
VLC media player 3.0.4 Vetinari (revision 3.0.4-0-gf615db6332)
VLCバージョン 3.0.4 Vetinari (3.0.4-0-gf615db6332)
d-fuによってd-fus-Mac.local (Aug  9 2018 19:23:50)上でコンパイルされました
コンパイラー: clang: warning: argument unused during compilation: '-mmacosx-version-min=10.7' [-Wunused-command-line-argument]
法律によって認められる範囲で、このプログラムにはいかなる保証もありません。
あなたは、GNU GPLの条項に基づいて再頒布することが可能です。
詳細については、COPYINGというファイルに書かれていますので、参照してください。
VideoLANチーム(AUTHORSファイルを参照してください)によって作成されました。

VLC media playerからの映像伝送はコマンドラインで行います。伝送する映像はBig Buck BUNNYのmp4ファイルを使用しました。以下のコマンドでRTP形式でMediaConnectに映像を伝送します。(--soutオプションのdst=52.XXX.XXX.XXXの箇所にMediaConnect FlowのIngest IP addressを入力します。)

$ /Applications/VLC.app/Contents/MacOS/VLC \
  --loop bbb_sunflower_1080p_30fps_normal.mp4 \
  --sout='#transcode{vcodec=h264,vb=5000,acodec=mpga,ab=128,channels=2,samplerate=44100} :rtp{dst=52.XXX.XXX.XXX.XXX,port=5432,mux=ts,name="MediaConnectFlowSource"}'

伝送開始後、MediaConnect、MediaLiveそれぞれに映像が伝送されていることをまず確認しましょう。MediaConnectについてはCloudWatchからメトリクスを確認できます。今回はSourcdeBitRateのメトリクスで確認しました。

MediaLiveについてはHealthタブでNetwork inの項目を確認します。

きちんと映像が伝送できているようなら、実際にCloudFrontを経由して映像を確認してみます。今回はMediaLiveからHLSで出力していますので、macOSのSafariから直接m3u8ファイルを開いてみました。

MediaConnectを通して伝送した映像が視聴できました!

まとめ

re:Invent2018で発表された新サービスAWS Elemental MediaConnectにVLC media playerから映像を伝送、MediaConnectを経由してAWS Elemental MediaLiveを使って配信してみました。

実は今回一番引っかかったポイントは、AWS Elemental MediaConnectに対応するプロトコルで映像を伝送するところでした。対応しているRTP、RTP-FEC、Zixi Protocolに対応する配信エンコーダがなかなか見つからなかったのですが、下記のAWS BlogのエントリからVLC media playerがRTP対応していることを知り、ドキュメントを元に試してみたところ動いた!という具合でした。