シナプス技術者ブログ

シナプスの技術者公式ブログ。インターネットで、鹿児島の毎日を笑顔にします。

AWS Elemental MediaLive/MediaPackageでライブ配信をしてみた

技術部の中野です。

今回は、数ヶ月前のとあるオンラインイベントにおいて、AWSを用いてライブ配信を行いましたのでその紹介です。

なにをやったの?

数ヶ所からReal Time Messaging Protocol(RTMP)にて送られてくるH.264のライブ映像を、HTTP Live Streaming(HLS)に変換し、受信拠点に向けて配信を行いました。

RTMPからHLSへの変換は、自社データセンターで行うことも検討しましたが、動画のエンコード負荷の予測がしづらく、またイベントまでの準備期間が短いこともあり、今回はAmazon Web Services(AWS)を採用することに。

構成の概要図

AWSの構成

AWSは、ap-northeast-1(東京)/ap-northeast-2(ソウル)の2つのリージョンに全く同じ構成を用意しました。

ライブ映像は配信拠点よりAWS Elemental MediaLive(MediaLive)のRTMPのエンドポイントに向けて送信し、MediaLiveにてエンコードしてAWS Elemental MediaPackage(MediaPackage)に保管し、受信拠点ではMediaPackageのHLSのエンドポイントからHLSにて映像を受信する流れとなっています。

AWSの構成図

今回利用したMediaLive/MediaPackageは以下の機能をもったサービスとなっています。

  • AWS Elemental MediaLive
    • ライブ動画ストリームをエンコードするサービス
    • H.264/AVC、H.265/HEVCなどのコーデックに対応
    • RTP/HLS/RTMPなどの通信プロトコルに対応
  • AWS Elemental MediaPackage
    • 動画ストリーミング配信するためのサービス
    • MPEG-DASH、MSS、MPEG-2 TS、HLS、CMAFの動画ストリームに対応
    • デジタル著作権管理(DRM)対応

AWS Elemental MediaLive/MediaPackageは可用性に優れたサービスですが、このイベント自体が1回限りでリージョン障害等による映像停止のリスクを検討した結果、東京/ソウルの2リージョンに対してライブ映像を送信し、受信側も2リージョンから受信し、万全を期すこととしました。

なお、今回の配信においてAWSの映像の入出力は、以下のようなパラメータにて設定しました。

AWSへの入力 AWSからの出力
プロトコル RTMP HLS
解像度 1080p(1920×1080) 1080p(1920×1080)
コーデック H.264 H.264
ビットレート 最大10 Mbps
(CBR/VBR) 4.5 〜 9.0 Mbps(VBR)
フレームレート 60 fps 60 fps

設定手順

設定は「MediaPackageの作成」「MediaLiveの作成」の順に行います。

ただし本記事ではビットレートフレームレートの設定は省略しています。

MediaPackageの設定

MediaPackageの設定は「Channelの作成」「Endpointの作成」の順に行います。

Channelの作成

  1. MediaPackageのChannelページを開き、「Create」をクリック。 MediaPackageのChannel作成

  2. Channel detailsのIDに適当な名前を入力し、「Create」をクリック。このIDは後のMediaLiveの設定にて使用します。 MediaPackageのChannelの詳細を入力

Endpointの作成

  1. 作成したChannelのEndpointsの「Add endpoints」をクリック。 MediaPackageのEndpointの追加

  2. IDに適当な名前を入力し、「Save」をクリック。 MediaPackageのEndpointの詳細を入力

  3. Endpointが作成されてChannelのページに戻ります。このEndpointsのURLがHLSにて映像受信するためのURLとなります。 MediaPackageのEndpointのURL

MediaLiveの設定

MediaLiveの設定は「Input security groupの作成」「Inputの作成」「Channelの作成」の順に行います。

Input security groupの作成

  1. MediaLiveのInput security groupsページを開き、「Create input security group」をクリック。 MediaLiveのInput security groupを作成

  2. フォームにRTMPの送信元のIPアドレスをCIDR形式(AAA.BBB.CCC.DDD/NN)で入力し、「Create」をクリック。 MediaLiveのInput security groupにIPアドレスを入力

Inputの作成

  1. MediaLiveのInputsページを開き、「Create input」をクリック。 MediaLiveのInputを作成する

  2. Input nameに名前を入力し、Input typeは「RTMP(push)」を選択。この名前はChannelの作成にて使用します。 MediaLiveのInputの詳細を入力

  3. Input security groupは「Use existing」を選択し、先ほど作成した「Input Security Group」を選択。 Input classは「SINGLE_INPUT」を選択。 Destination AApplication nameApplication instanceは適当な文字列を入力し、「Create」をクリック。 MediaLiveのInputの詳細を入力

  4. ここまででInputが作成されます。このEndpointsのURLが、RTMPにて映像送信するためのURLになります。 MediaLiveのEndpointのEndpointのURL

Channelの作成

  1. MediaLiveのChannelsページを開き、「Create channel」をクリック。 MediaLiveのChannelの作成

  2. General infoのChannel nameに適当な名前を入力。IAM roleは、初めてChannelを作成する際は「Create role form template」を選択、Channelを作成済みの場合は「Use existing role」を選択しプルダウンよりRoleを選択。 MediaLiveのChannelの詳細の入力

  3. Channel templateはプルダウンより「 HTTP live streaming MediaPackage」を選択。 MediaLiveのChannelのChannelクラスとInput設定の入力

  4. Channel classは「SINGLE_PIPELINE」を選択。Input codecは「AVC」、Input resolutionは「HD」、Maximum input bitrateは「MAX_10_MBPS」を入力。 MediaLiveのChannelのChannelクラスとInput設定の入力

  5. Input attachmentsの「Add」をクリック。 MediaLiveのChannelのInput Attachmentsの追加

  6. InputはMediaLiveのInputで作成したものを選択し、「Confirm」をクリック。 MediaLiveのChannelのinputをアタッチ

  7. MediaPackage group」をクリック。 MediaLiveのChannelのOutput groupsの編集

  8. MediaPackage channel IDは、MediaPackageのChannelで作成したものを選択。 MediaLiveのChannelのMediaPackageのChannel IDの設定

  9. HLSではアダプティブビットレートと呼ばれる1つのURLで複数のビットレートに対応した配信が可能となっています。必要なビットレート以外は「」をクリックして削除。なお、WebVTTとは字幕などを利用する際に使用するもので、今回使用しません。 MediaLiveのChannelの出力の選択

  10. Create channel」をクリック。 MediaLiveのChannelを作成

  11. Start」をクリックして、ライブ配信を開始。 MediaLiveのChannelの開始

配信テスト

作成した環境は、OBS Studioを用いると簡単にテストが可能です。

RTMP送信: OBS Studio

OBS Studioの「設定」→「配信」の画面にて、以下の通り入力することで、MediaLiveに対してRTMP送信が可能です。

設定項目 設定内容
サービス カスタム
サーバ MediaLiveのInputのEndpointのURLのApplication nameまでを設定
ストリームキー MediaLiveのInputのEndpointのURLのApplication instanceを設定

OBSの設定画面

HLS受信: MediaPackage

MediaLiveにてエンコード/HLS変換された動画は、MediaPackageのEndpointsのPreviewの「Play」から確認することが可能です。

MediaPackageのプレビュー

まとめ

普段、オンプレミスのサーバの構築/運用していますが、単発のイベントなどではAWSなどのクラウドを活用すると、月並みな表現ですが、物理サーバの準備、セットアップの時間、スケーラビリティの観点から非常に有用だと感じました。

ただオンプレミスのサーバと違い、想定していない動作となった場合の切り分けが非常に難しく、Webコンソールに表示される情報のみを頼りに切り分けをするため、見るべきポイント等を事前に把握しておく必要があり、そのノウハウ蓄積が大切だと感じました。

今回は受信拠点のみへの配信だったためCloudFront(CDN)までは不要でしたが、今後、機会があればCloudFrontまで含めた構成を試してみようと思います。