VLC Media Player を使った AWS Elemental MediaConnect への動画配信(RTP)をやってみた

VLC MediaPlayerを使用するとAWS Elemental MediaConnectに対して映像が送れます!
2020.08.13

こんにちは、大前です。

 

AWS Elemental MediaConnect(以下 MediaConnect) を使ってみたいと思った時、どうやって MediaConnect に映像を送ろうか悩んだ事はないでしょうか?

AWS Elemental MediaLive(以下 MediaLive) であれば RTMP を受け付けられるため、OBS といったよくある配信ソフトが使えますが、MediaConnect は RTMP を受け付けていないため使用出来ません。

 

一方、オープンソースなメディアプレイヤーソフトであるVLC media player を使うと MediaConnect が対応している RTP での映像配信が出来ます。

今回はこちらのやってみた記事となります。「MediaConnect を使ってみたいけど映像送る手段が思いつかない。。。」な方は参考にして頂けると幸いです。

やってみた

構成

構成は以下になります。一般に、AWS Elemental MediaStore(以下 MediaStore) の後ろには Amazon CloudFront(以下 CloudFront) を配置する事がほとんどですが、今回は手順省略の為に CloudFront は無しで構築を進めます。

手順

以下の手順で進めていきます。

  1. MediaStore の設定
  2. MediaConnect の設定
  3. MediaLive の設定
  4. VLC MediaPlayer の設定
  5. 配信実施

1. MediaStore の設定

コンテナの作成

MediaStore のコンソール画面より、「Create container」をクリックします。

 

任意のコンテナ名を入力して「Create」をクリックします。(今回は "SampleContainer")

 

少し待ち、作成したコンテナのステータスが "Active" に変わったらコンテナ名をクリックして詳細画面を開きます。

 

Container policy の設定

詳細画面に遷移後、少し下にスクロールすると「Container policy」という欄があるので「Edit policy」をクリックしてこちらを編集します。

 

下記の様に、外部からのリクエストを受け付けられるポリシーに修正します。

{
  "Version" : "2012-10-17",
  "Statement" : [ {
    "Sid" : "MediaStoreFullAccess",
    "Effect" : "Allow",
    "Principal" : "*",
    "Action" : [ "mediastore:GetObject", "mediastore:DescribeObject" ],
    "Resource" : "arn:aws:mediastore:ap-northeast-1:0123456789:container/SampleContainer/*",
    "Condition" : {
      "Bool" : {
        "aws:SecureTransport" : "true"
      }
    }
  } ]
}

 

Container CORS policy の設定

Container policy の下にある Container CORS policy についても設定を行います。

 

「Create CORS policy」から、以下を設定し「Save」します。

[
  {
    "AllowedHeaders": [
      "*"
    ],
    "AllowedMethods": [
      "GET",
      "HEAD"
    ],
    "AllowedOrigins": [
      "*"
    ],
    "MaxAgeSeconds": 3000
  }
]

 

MediaStore の設定は以上になります。

今回は検証後にリソースを削除する予定なので設定していませんが、必要に応じて Object lifecycle policy も設定してください。

 

2. MediaConnect の設定

フローの作成

MediaConnect のコンソール画面より、「Create flow」をクリックします。

 

フロー作成画面に遷移するので、以下の設定を実施して「Create flow」をクリックします。

以下に示していない設定項目についてはデフォルトのまま進めます。

  • Name ... 任意(今回は "SampleFlow")
  • Source
    • Name ... 任意(今回は "SampleFlowSource")
    • Protocol ... RTP
    • Inbound port ... 任意(今回は "1234")
    • Whitelist CIDR block ... 作成するフローへの配信を許可したい IP レンジ(今回は検証なので "0.0.0.0/0" を指定)

 

特に問題なければ下記の様に MediaConnect のフローが作成されます。「Public Outbound IP address」や「ARN」は後の手順で使用するので、メモしておきましょう。

 

MediaConnect の設定は以上となります。

 

3. MediaLive の設定

入力の作成

MediaLive のコンソール画面より、「入力」→「入力の作成」をクリックします。

 

入力名は任意の文字列を入力し(今回は "SampleMediaLiveInput")、今回は MediaConnect から入力を受け付けるので、入力タイプに "MediaConnect" を選択します。

 

入力タイプで "MediaConnect" を指定すると MediaConnect のフローを指定する項目が表示されます。

「Channel Class」を "SINGLE_PIPELINE" に変更し、「フロー A の ARN」に上で作成した MediaConnect フローの ARN を入力してください。

 

MediaLive を使用した事がある方であれば「ロールの ARN」には作成済みの IAM ロールが指定されているはずなのでそのまま「作成」をクリックします。

IAM ロールが存在しない方は、「テンプレートからロールを作成」を選択する事でロールが作成されます。

 

チャネルの作成

続いて、MediaLive のコンソール画面より「チャネル」→「チャネルの作成」をクリックします。

 

以下、各項目を設定します。

チャネルと入力の詳細

以下を設定します。

  • チャネル名 ... 任意(今回は "SampleMediaLiveChannel")
  • Channel class ... SINGLE_PIPELINE

※入力を作成した時と同様に、IAM ロールが存在しない方は「テンプレートからロールを作成」を選択してください

 

全般設定

特に設定しません。

 

入力アタッチメント

「入力アタッチメント」欄にある「追加」より、先ほど作成した入力(ここでは "SampleMediaLiveInput")を選択します。

選択すると下記の様な表示になるので、そのまま「確認」をクリックします。

 

出力グループ

「出力グループ」欄にある「追加」より、"HLS" を選択して「確認」をクリックします。

 

「出力グループ」内に "1. HLS グループ" が作成されるので、これを選択した状態で以下項目を設定します。

  • HLS グループ送信先 A
    • URL ... 上で作成した MediaStore の Data endpoint を元に、以下の形式で出力先を指定します。
      • "mediastoressl://" + (MediaStore の Data endpoint) + "/(任意のプリフィックス)"
      • 例:"mediastoressl://abcdefghijk.data.mediastore.ap-northeast-1.amazonaws.com/index"

 

"1. HLS グループ" 配下に作成されている "出力 1: XXXXXX" をクリックし、以下項目を設定します。

  • ストリーム設定(動画)
    • 幅、高さ ... 解像度を指定します。今回は 1280、720(720p)としました。
    • コーデック設定 ... H264
    • Rate Control → ビットレート ... 1000000(1Mbps)

 

上記を一通り設定したら、画面下部の「作成」をクリックしてチャネルを作成します。

ここまでで AWS 側の設定は一旦以上となります。

 

4. VLC MediaPlayer の設定

ローカル PC 上で、VLC MediaPlayer を起動します。持っていない方は、下記リンク等よりインストールをしてください。

私の端末が Mac であるため、Mac 環境での操作手順を記載していきます。

VLC media player

 

起動したら、画面上部のメニューより「ファイル」→「変換 / ストリーミング」をクリックします。

 

下記の様なウィンドウが開くので、下部にある「ストリーム」をクリック。

 

「ストリーミングを設定...」をクリック。

 

設定画面が開くので、下記項目を設定していきます。

  • タイプ ... RTP
  • アドレス ... 作成した MediaConnect フローの画面に表示されている "Public Outbound IP address" を指定
  • ポート番号 ... MediaConnect フロー作成時に "Source Port" として指定した番号(今回は "1234")

他の項目はデフォルトのまま、「適用」をクリックします。

 

元の画面に戻るので、「メディアを開く...」より配信したい動画ファイルを選択します。

今回は、Big Buck Bunny の動画を使用します。

 

この状態になったら、配信の準備は完了です。

次のフェーズで、配信を実施するので、VLC MediaPlayer の画面はそのままにしておきます。

5. 配信実施

配信を開始する前に、AWS 側でいくつかのサービスを起動する必要があります。

 

MediaConnect フローの開始

作成した MediaConnect フローを開き、「Start」をクリックします。

 

少し待ち、Status が "ACTIVE" になれば OK です。

 

MediaLive チャネルの開始

MediaLive のチャネル一覧より作成したチャネルを選択し、「開始」をクリックします。

 

少し待ち、状態が "Running" になれば OK です。

 

VLC MediaPlayer の配信開始

AWS 側のサービス起動が完了したので、最後に VLC MediaPlayer からのストリーミングを開始します。

上の手順にて開いていた VLC MediaPlayer のストリーム設定画面の右下にある「ストリーム」をクリックし、ストリーミングを開始します。

 

配信が出来ているか確認する

配信開始後に少し待ち、作成した MediaStore コンテナに HLS インデックスファイルなどが作成されていれば OK です。

ここでは index.m3u8 というインデックスファイルが作成されているので、このファイルをクリックします。

 

Object name としてインデックスファイルのエンドポイントが表示されているので、これを使用して HLS の再生をしてみます。

 

今回は VideoJS HLS を使用して確認を行います。

「Video URL」に上記の Object name(インデックスファイルのエンドポイント)を入力し、「Load」をクリックします。

 

ロードが問題なく行われ、配信している動画が再生出来れば OK です。ちゃんと再生されていますね!

おわりに

VLC MediaPlayer を使って AWS Elemental MediaConnect に対して RTP での動画配信をやってみました。

かなり手軽に配信が行えるので、MediaConnect 周りの機能を検証する時には VLC MediaPlayer を使って映像ソースを送り込むのはアリなのではないでしょうか。

 

確認後は各種リソースの削除をお忘れなく。

 

以上、AWS 事業本部の大前でした。

参考