AWS Elemental MediaTailorのChannel Assemblyで時間ベースのスケジューリングをしてみた

Channel Assembly機能リリース時はループ再生のみのサポートでしたが、2021年9月のアップデートでプログラムのスケジュールを指定することができるようになり、ソースを再生するタイミングを制御できるようになりました。
2021.12.31

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

はじめに

清水です。2021年のアップデートを2021年のうちに振り返っておこうのコーナーです。本エントリでお伝えするアップデートはこちら!AWS Elemental MediaTailorで仮想リニアライブストリームを作成できるChannel Assembly機能で、これまでコンテンツベースのプロブラムに加え、時間ベースのスケジューリングができるようになりました。(2021/09/01にポストされたアップデートになります。)

MediaTailorのChannel Assemblyの従来までの機能と、この時間ベースのスケジュール機能でできるようになったことを確認しておきましょう。2021年3月、MediaTailorに従来からのパーソナライズした広告挿入に加え、仮想ライブストリームを作成するChannel Assembly機能が追加されました。

このChannel Assembly機能リリース当時はPlayback modeとしては「Loop」のみが選択でき、指定した複数のコンテンツをループ再生する仮想ライブストリームチャンネルが作成・利用できるというぐあいでした。新たに追加された(されていた)時間ベースのスケジュール機能を使うことで、個々のソースを再生するタイミングを指定することができます。Playback modeとしては「Liner」を選択し、その後コンテンツの再生スケジュールを設定します。例えば仮想ライブストリーミング内で、2021/12/31 17:00になったらあるコンテンツを開始する、といった使い方ができます。

MediaTailorのChannel Assemblyで時間ベースのスケジューリングをしてみた

それでは実際に、Channel Assemlyの時間ベースのスケジューリングを簡単な例で確認してみます。

Source locationとVOD sourceの作成

まずはChannel Assembly利用に必要なSource locationならびにVOD sourceを作成していきます。設定方法についてはChannel Assembly機能リリース時のブログエントリも参照ください。VOD sourceの要件についてもドキュメントで確認しておきましょう。

コンテンとして以下2つを準備しました。

  • メインコンテンツ
    • 今回のスケジュール機能でストリーミングするメインのコンテンツ
  • サブコンテンツ
    • 上記メインコンテンツ以外のタイミングで再生するコンテンツ(後述のFiller slateで指定)

[Create source location]から進み、まずはNameとBase URLを指定してSource locationを作成します。

その後、作成したSource locationの[Add VOD source]ボタンからVOD sourceを追加します。

以下それぞれで作成しました。

  • メインコンテンツ
    • Source location
      • Name
        • blog-main-contents-souce-location
      • Base URL
        • https://d2mnXXXXXXXXXX.cloudfront.net/
    • VOD source
      • Name
        • main-contents
      • source-group-1
        • Source group
          • source-group-1
        • Relative path
          • /path/to/file/vod/hls/vod_20181129T021600.000004.m3u8
  • サブコンテンツ
    • Source location
      • Name
        • blog-sub-contents-souce-location
      • Base URL
        • https://my-s3-bucket.s3.ap-northeast-1.amazonaws.com/
    • VOD source
      • Name
        • sub-contents
      • source-group-1
        • Source group
          • source-group-1
        • Relative path
          • /hls/sample59.m3u8

時間ベースのスケジューリングをするChannelの作成

続いてChannelを作成します。Nameは「blog-schedules-channel」としました。Playback modeではデフォルトの「Loop」ではなく「Liner」を選択します。(Channel Assemblyのリリース当時は、ここでは「Loop」しか選択できませんでした。)Filler slateの項目が現れるので、先ほど作成したSource locationとVOD sourceから、サブコンテンツのほうを指定していおきます。(このFiller slateで設定したVOD sourceが、スケジュール内でプログラムが設定されていない箇所でストリーミングされます。)

続くConfigure outputsではManifest nameに「index」を指定、他の項目はデフォルトのまま次に進みます。

Channel policyでは「Attach a public policy」を選択しました。実際には公開範囲などにあわせて適切なポリシーを選択しましょう。

最後に内容を確認して、Channelを作成します。

Channel内に実際に時間ベースのスケジュールを設定

Channel作成後、[Add program]ボタンでプログラムを追加していきます。

Add program画面、Nameを「main-contents-program」と指定し、Source locationとVOD sourceはメインコンテンツを指定します。Playback configurationではTransition typeで「Absolute」を選択し、メインコンテンツをスタートさせる時間を「2021/12/31 15:40:00」とスケジュールしました。[Add Program]ボタンでプログラムを設定します。

プログラムが追加できました。

ひとつ上の階層の、Channel詳細画面に戻ってみましょう。Channel scheduleでメインコンテンツのプログラムがスケジュールされていることが確認できます。

スケジュールしたプログラムが指定した時間に開始されることの確認

実際にスケジュールしたプログラムが開始されることを確認してみます。まずは[Start]ボタンでChannelをStartさせます。

「Outputs」タブのChannel outputs、Playback urlで再生用URLを確認します。

視聴確認について、今回は簡単ですがVideo.jsを使った以下のhtmlを準備しました。(Video.jsのvideojs-http-streaming(VHS)を使ってHLS形式のストリーミング配信を再生する最低限度の設定 | DevelopersIO)htmlファイルはS3でホストしています。

mediatailor-channel-assembly-streams.html

<html>
  <head>
    <title>MediaTailor Channel Assembly Streams</title>
    <link href="https://vjs.zencdn.net/7.4.1/video-js.css" rel="stylesheet">
  </head>
  <body>
    <video-js id=example-video width=1280 height=720
              class="vjs-default-skin" controls>
      <source
         src="https://b362ea02cd46b6f5abc90d99969558cc.7yvewb.channel-assembly.\
mediatailor.ap-northeast-1.amazonaws.com/v1/channel/blog-schedules-channel/inde\
x.m3u8"
         type="application/x-mpegURL">
    </video-js>
    <script src="https://vjs.zencdn.net/7.4.1/video.js"></script>
    <script>
      var player = videojs('example-video');
    </script>
  </body>
</html>

実際にこのhtmlファイルをChromeで開いて視聴してみます。スケジュールした時間になるまでは、サブコンテンツの動画がループ再生されています。海岸で撮影した波の動画ですね。

15:40を少し回ったところで(HLSの特性で時間きっかりとは行かず、少し遅延が発生している状態かと思います)、メインコンテンツが始まりました。(2018年にラスベガスから動画配信した際の映像のアーカイブだったりします。AWS Media Servicesを使ってラスベガスから動画配信してみた #reinvent #mediaservices | DevelopersIO

このスケジュールしたメインコンテンツがストリーミングされている時点での、Channelの状態についてマネジメントコンソールから確認してみましょう。以下のように、この1時間ほどのメインコンテンツ終了後は、再度サブコンテンツがストリーミングされるよう、プログラムされていることが確認できます。

まとめ

AWS Elemental MediaTailorに2021年9月に追加されていた機能、Channel Assemblyでの時間ベースのスケジューリングについて確認してみました。今年2021年3月のChannel Assembly機能リリース時もおもしろい機能だなと思いましたが、スケジューリング機能が加わりより仮想ライブストリーミングとして実用的になったのかなと思います。機能としてもMediaLiveのスケジューリング機能と引けを取らない感じでしょうか。(MediaLiveでもChannel Assemblyと同様の使い方が可能です。AWS Elemental MediaLiveで番組編成っぽいことをしてみた | DevelopersIO)仮想ライブストリームとして費用コスト的にはMediaTailorのChannel Assemblyのほうが低く抑えられるかと思いますので、場面によって使い分けていきたいと思いました。