AWS Elemental LinkとAmazon Interactive Video Serviceを使ってライブ配信してみた

2020年話題の新デバイスであるAWS Elemental Linkと、同じく2020年話題の新サービスであるAmazon Interactive Video Serviceを使ってライブ配信をしてみました。
2020.08.14

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

清水です。今年(2020年)の春に発表され、先日東京リージョンでも利用可能になったAWS Elemental Linkと、こちらも先日リリースされた新サービスAmazon Interactive Video Service (Amazon IVS)を使ってライブ配信をしてみました。Elemental LinkからはいちどAWS Elemental MediaLiveに映像を打ち上げ、Elemental MediaLiveのRTMP出力機能でIVSと連携させます。構成については次章でも詳細をまとめますが、メリットデメリット双方があり、すべてのケースでこのパターンが最適とは言い切れません。場合によってはアンチパターンともなり得る可能性もあります。ですが、2020年話題の新デバイスと新サービスでライブ配信をやってみたい!ということで、実際にライブ配信をしてみたのでまとめてみます。

構成について

今回のAWS Elemental LinkとAmazon Interactive Video Service (Amazon IVS)を使ったライブ配信の構成は以下のようになります。

Elemental LinkはAWS Elemental MediaLive用のセットアップ済みエンコーダデバイスとして動作します。そのため直接の映像の打ち上げ先はElemental MediaLiveのみとなります。Elemental MediaLiveにはRTMPでの出力機能がありますのでこれを利用し、出力先にIVSを指定する、という構成です。

IVS自体はElemental MediaLiveとの連携は必須ではなく、サービス単独でライブ配信が可能なサービスです。製品ページの「How it works」に記載がある通り、Streaming Software(例えばOBS Studio)から映像を打ち上げるだけでライブ配信が可能、そのシンプルさもメリットの一つかと考えます。

Amazon Interactive Video Service

そのため、Elemental Link以外のデバイスなどStreaming Softwareがあらかじめ準備されているのであれば、Elemental Linkの導入は必須ではないですし、またElemental MediaLiveに映像を打ち上げることも必須ではありません。上記の「How it works」のようにStreaming Softwareから直接、IVSに映像を打ち上げることが推奨されるかと思います。

対して、本エントリで扱うElemental LinkとIVSを組み合わせた構成について、そのメリットを一言で言えば「Elemental Linkデバイスが使える」ということになります。具体的には、Elemnetal Linkデバイスの特徴である物理デバイスのセットアップの容易さが挙げられます。RTMP出力先となるサーバURLやシークレットキーなどの設定作業は、AWSマネジメントコンソール側で作業が完結します。配信現場で物理デバイスをセットアップする作業者は、電源、ネットワーク、映像信号を入力するだけです。Streaming Softwareの操作に慣れていない、などの場合には大きな利点となるかと考えます。

Elemental MediaLiveが間に入ることで、Elemental MediaLiveの様々な機能も利用可能になります。例えばアーカイブ機能を使ってライブ配信と同時に映像をAWS上に保存することも可能です。IVSと連携してライブ配信をする他、同時に他のライブ配信プラットフォームにも連携させる、他のAWSサービス(AWS Elemental MediaStore、AWS Elemental MediaPackage、そしてAmazon CloudFront)と連携させてライブ配信をする、といったことも可能です。

これらのメリットが挙げられますが、反対にデメリットにもなり得ます。繰り返しになりますが、本来IVSはそのシンプルさ、他サービスと連携せずとも単体でライブ配信ができること、素早く簡単にセットアップできることがメリットで、Elemental MediaLiveのセットアップが入ってくるとこのメリットが打ち消されてしまうことになります。またElemental MediaLive使用による費用コストの増加(MediaLiveの利用料金)、MediaLiveのリソース管理(Start/Stopなど含む)も必要になってきます。

このように、メリット/デメリット双方がいくつか挙げられます。すべてのケースで最適な構成とはなりません。Elemental Link + IVSの構成を検討する場合にはご注意ください。(本エントリのスタンスとしては、新デバイスと新サービスを組み合わせてライブ配信がしたい!というところが第一にあります。)

Amazon Interactive Video Serviceの準備

まずはAmazon IVSのリソースを準備していきます。今回はオレゴンリージョンを利用しました。あわせてAmazon IVS Playerで配信ページも準備しておきます。

IVS Channelの作成

Amazon IVSのマネジメントコンソール、Channels一覧から[Create channel]で進めます。

Channel nameを入力、configurationについてはDefautl configurationで進めました。 「Create channle]でChannelを作成します。

Channelが作成できました。

Stream configurationの項目については後ほどMediaLive設定の際に、またPlayback configurationの項目については後述の配信ページ作成に使用します。

配信ページの作成

IVSからはm3u8のエンドポイント(Playback URL)が払い出されます。これを再生するページをAmazon IVS Player SDK for Webを使用して作成します。ドキュメントなどを参考に、ごく簡単ですが以下のようなhtmlファイルを作成しました。IVSのChannelごとに払い出されるPlayback URLでPLAYBACK_URL部分を書き換えます。

link-to-ivs-de-livestreaming.html

<html>
  <head>
    <title>link-to-ivs-de-livestreaming</title>
    <style>
      video {
          height: 100%;
          width: 100%;
          left: 0;
          top: 0;
          position: fixed;
      }
    </style>
  </head>
  <body>
    <video id="video-player" playsinline controls></video>
    <script src="https://player.live-video.net/1.0.0/amazon-ivs-player.min.js"></script>
    <script>
      var PLAYBACK_URL = "https://XXXXXXXXXXXX.us-west-2.playback.live-video.net/api/video/v1/us-west-2.XXXXXXXXXXXX.channel.XXXXXXXXXXXX.m3u8";
      if (IVSPlayer.isPlayerSupported) {
          const player = IVSPlayer.create();
          player.attachHTMLVideoElement(document.getElementById('video-player'));
          player.load(PLAYBACK_URL);
          player.play();
      }
    </script>
  </body>
</html>

上記の内容のhtmlファイルをWebサイトホスティングで公開したS3バケットに配置し、以下のようなURLで再生ページが表示できるようにしておきます。(こちらのS3バケットは東京リージョンのものですが、強い意図はありません。とりあえずホスティングできるS3バケットが東京リージョンにあったので使っています。)

  • https://my-s3-bucket.s3-ap-northeast-1.amazonaws.com/link-to-ivs-de-livestreaming.html

AWS Elemental LinkとAWS Elemental MediaLiveの準備

続いて、Elemental LinkデバイスとMediaLive側の準備を行います。RTMP出力機能を使うことになりますので、手順としてはYouTube Liveを使ったライブ配信と同様になります。なおElemental Link、MediaLiveについてもオレゴンリージョンを利用しています。

MediaLiveのInputの作成

まずはMediaLiveのInputリソースを作成します。MediaLiveのマネジメントコンソール、Inputsのページから[Create Input]で進みます。

Input nameを入力、Input typeは`Elemental Linkを選択します。Input devicesの項目では使用するLinkデバイスのIDを選択し、[Create]でInputを作成します。

Inputが作成できました。Elemental Linkデバイスについてはまだ準備(電源やネットワーク、映像の入力など)をしていない状態です。(なのでサムネイル画像も表示されていません。)

MediaLiveのChannelの作成

続いてMediaLiveのChannelリソースを作成します。MediaLiveのマネジメントコンソール、Channelsのページから[Create channel]で進みます。

Channel nameを入力し、IAMロールを設定します。IAMロールが存在しない場合、こちらのエントリの「MediaLive用のIAMロールが存在しない場合」の項目を参考に作成しましょう。

Channel templateではRTMP Pushを選択します。Changinig templateのダイアログが出現しますが、[Confirm]で進めます。

Channel classについてはSINGLE_PIPELINEを選択します。Input specificationsについてはデフォルトのままでかまいません。

続いて左側メニューのInput attachments横の[Add]ボタンをクリック、Attach inputに進みます。Inputの項目で先ほど作成したInputを選択、必要であればAttachment nameを変更して[Confirm]ボタンを押下します。([Confirm]ボタンの押し忘れに注意しましょう。)

最後にOutput groupsの設定を行います。「1. YouTube (RTMP)」の文字列部分をクリック、遷移した画面でまずはRTMP settingsのName部分を変えておきましょう。今回は「AmazonIVS」としました。

左側のOutput groupsの箇所も、RTMP settingsのNameにあわせて変わります、「1. AmazonIVS (RTMP)」になりましたね。次にこの項目の「Output 1: destination1」の文字列部分をクリックし、Output 1の設定画面に移動します。RTMP destination Aの項目、URL部分を先ほどAmazon IVSで作成したChannelのStream configuration、Ingest serverの内容にします。またStream Name部分にはStream keyを入力します。

以上でOutput groups自体の設定としては終了です。ただ、RTMP出力の設定テンプレートとして3つのOutput gropuが準備されていますが、そのうち2つは使用しないので削除してしまいます。左側Output groupsの項目で選択、遷移した画面で右上の[Remove]ボタンを押下します。以下は「2. Facebook」の例ですが、「3. Twitch」についても同様に削除しました。

Output groupを1つのみの状態にして、[Create channel]ボタンを押下、Channelを作成します。

ライブ配信の開始

IVSとMediaLive、それぞれのリソースの準備ができたら、実際にライブ配信を行ってみます。

Elemental Linkデバイスの準備

まずElemental Linkデバイスについて、電源、ネットワーク、映像信号を入力します。今回映像信号については、iPhone 6sにApple純正のLightning - Digital AVアダプタを接続、Live: Air SoloというTeradek社のアプリを立ち上げておきiPhone本体のカメラ映像、マイク音声をHDMIでElemental Linkデバイスに入力しています。

Elemental Linkデバイスの準備ができたら、マネジメントコンソールから下記のようにサムネイル画像が表示されていること、Connection stateがConnectになっていること、Device stateがIdelであることを確認しておきます。

MediaLiveのChannelのStartとライブ配信の開始

続いてMediaLiveのChannelをStartします。これによりElemental LinkデバイスからMediaLiveへの映像打ち上げが開始され、またMediaLiveからIVSへ映像が出力されます。IVSでは特に操作せずとも、映像が入力されればライブ配信が開始となりますので、実質この操作でライブ配信が開始することになります。

MediaLiveのマネジメントコンソール、Channel一覧にて該当Channelを選択し[Start]ボタンを押下します。

StateのIdleStartingになり、しばらくするとRunningとなります。これでライブ配信が開始されている状態です。

配信ページをブラウザで開いてみます。Elemental Linkデバイスに入力した映像がライブ配信されていますね!

IVS側でのライブ配信状態の確認

IVS側でもライブ配信が開始されていることを確認しておきましょう。マネジメントコンソールのIVSのページ、Live channelsの項目にライブ配信中のChannelが表示されます。

ライブ配信の終了と後片付け

ライブ配信の終了は、MediaLiveのChannelのStopで行うことができます。StopすることでMediaLiveのChannelはRunning状態からIdle状態に遷移します。またElemental Linkデバイスからの映像打ち上げも終了します。なお、MediaLiveのChannelをRunningのままにしておくとMediaLiveの料金が発生し続けてしまうので注意しましょう。またMediaLiveのInput、ChannelリソースはIdle状態でも少額ですが費用が発生しますので、引き続き使用する予定がなければリソースは削除しておきましょう。

まとめ

2020年話題の新デバイスであるAWS Elemental Linkと、2020年話題の新サービスであるAmazon Interactive Video Service (Amazon IVS)を使ってライブ配信をしてみました。Elemental Linkデバイス(とMediaLive)側から見ると、MediaLiveの出力先(配信プラットフォーム)がIVSになった構成、またIVS側から見るとStreaming Software部分がElemental LinkとMediaLiveになった構成、となりますね。構成について最適かどうかはケースバイケースで議論の余地があるかと考えます。とは言え、Elemental Linkデバイス自体やIVSのサービスとしてのシンプルさ、そしてMediaLiveの柔軟性などが垣間見れたかと思います。