Elastic TranscoderでMPEG-DASHのAdaptive bitrate streamingしてみた

2016.05.30

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

はじめに

清水です。 先日のエントリでAmazon Elasitc TranscoderでのMPEG-DASHフォーマットへの変換を試してみて、実際にMPEG-DASH Reference Clientで再生してみました。

ところで次世代配信ストリーミング規格であるMPEG-DASH、このDASHは「Dynamic Adaptive Streaming over HTTP」という意味で、「HTTPでアダプティブなストリーミング配信できる」ことを表しています。 名称にアダプティブビットレート(Adaptive bitrate streaming)のことが含まれてながら、先日のエントリではこの点については試すことができませんでしたので、本エントリではMPEG DASHでAdaptive bitrate streamingを試したいと思います。

Adaptive bitrate streamingとは

スマホでYouTubeを見ていて、突然映像品質がよくなったり、悪くなったり、という経験はありませんか?それがAdaptive bitrate streamingです。 動画視聴者がその場面に応じて最適に視聴できるように、視聴者のネットワーク環境に合わせて配信する動画の画質などを調整します。ネットワーク環境が良ければ高ビットレートの動画を配信し、悪ければ低ビットレートなものを配信します。

Adaptive Bit RateでABR(えーびーあーる)などとも呼ばれます。 私はこの略称で呼ぶことが多いので、以下ではABRという表記も併用します。

PCだけではなくスマホ、タブレットなどの配信を考えた場合、特にスマホやタブレットでは接続環境がWifiか、3G/4G回線か、安定しているかどうか、ネットワーク環境はまちまちです。 マルチデバイスへの配信を考えた時には必須の技術ではないでしょうか。

Adaptive bitrate streaming確認のための準備

Adaptive bitrate streamingを行なう場合、通常は事前に複数のビットレートに変換した動画ファイルを作成しておきます。 (Streaming Serverを使うことで、1つの高画質ファイルをリクエストに応じてその場でトランスコードする、ということも可能です)

例えば、

  • 高画質 2.4Mbps
  • 中画質 1.2Mbps
  • 低画質 600kbps

というふうです。今回は3つとしましたが、3つでなくても構いません。

この3種類を変換し、Playlistにまとめます。 そのPlaylistをPlayerで参照して、Player側でネットワーク環境に応じて動画を切り替える、という動作になります。 ここで、Playerで見ていて、どの画質を見ているか?ということがけっこうわかりにくいです! そのためきちんとABRが動作していることの確認が大変だったりします。

この解決のため、今回はAmazon Elastic TranscoderのWatermark機能を活用したいと思います。 それぞれの画質の動画ファイルに、異なるWatermarkを入れます。 今回は、3色(Red/Green/Blue)の円の画像を用意しました。 これをそれぞれ高画質、中画質、低画質の動画にWatermarkとして設定します。 Playerで再生したときに、何色の円がWatermarkとして出ているか?で画質が判別できます。 もちろん実際に公開動画には使用できませんが、確認としてはこれで十分かと思います。

012-Original

やってみた

それでは実際にトランスコード処理をして、MPEG-DASHでABRの配信をしてみたいと思います。 Elastic Transcoderのパイプライン、そして配信用のS3バケットについては、先日のMPEG-DASH対応エントリで説明したものを使用して、ABR配信のトランスコード用にジョブの作成から行ないます。 今回は出力設定(Output Details)のところが大量になるので、このジョブ作成を中心に記載します。

ジョブの作成

まずは1つ目のOutput Detailsでは「高画質 2.4Mbps (Watermark:Redの円)」を変換します。 Presetは「System preset: MPEG-Dash Video - 2.4M」を選択して、Segment Durationは6(秒)、Output Keyは[入力ファイル名]_Video_2400_Red[拡張子]としました。

そして、Watermarkも設定します。 Preset Watermark Idから、今回は「BottomRight」を選択しました。(後の中画質、低画質の変換設定でもこれに合わせて「BottomRight」を選択します。) 選択すると画像ファイルを入力する場所が現れますので、S3のInputバケット内のパスを入力します。

002

続いて [+Add Another Output] をクリックして、出力設定を増やします。 2つ目のOutput Detailsでは「中画質 1.2Mbps (Watermark:Greenの円)」を変換します。 Presetは「System preset: MPEG-Dash Video - 1.2M」を選択して、Segment Durationは高画質と同様の6(秒)とします(これは、各出力設定で同じ値を使用します)。Output Keyは[入力ファイル名]_Video_1200_Green[拡張子]としました。

Watermarkも設定します。高画質と同様にBottomoRightを選択、画像ファイルを指定します。

003

さらに[+Add Another Output]をクリックして、3つ目「低画質 600kbps (Watermark:Blueの円)」の変換のOutput Detailを設定します。 Presetは「System preset: MPEG-Dash Video - 600k」を選択、Segment Durationは 6(秒)、Output Key[入力ファイル名]_Video_600_Blue[拡張子]、と、他の画質同様に設定します。Watermarkも設定します。

004

最後にAudioの出力設定を行ないます。[+Add Another Output]をクリックして4つ目のOutput Detailを設定します。Presetは「System preset: MPEG-Dash Audio - 128k」を選択して、Segment Durationは6(秒)、Output Keyは[入力ファイル名]_Audio_128[拡張子]とします。

005

そして、「Playlists (Adaptive Streaming)」とあるところの[Add Playlist]ボタンを 押します。 するとPlaylistの設定項目が出てきますので、Playlist名を入力、Formatは「MPEG-DASH」を選択します。 Outputs in Master Playlistは(+)マークをクリックすることで増やすことができますので、Output Detailsで設定した4つを含むようにします。

006

ジョブの作成での設定項目が多くなりましたが、これでジョブ設定完了です。 念のため見直しをして、[Create New Job]をクリックしましょう。

ジョブが完了したら、S3バケットに変換されたファイルがあるか確認します。

007

ABRを再生してみる

それでは再生してみます。今回もPlayerはMPEG-DASHのReference Client最新版を 使用しました。

Enter your manifest URL hereのところに、S3に格納されているPlaylistファイルのURLを入力して、Loadボタンを押すと再生が始まります。

さて、ABRで画質が変わるのか、、ですが、これはネットワーク環境に依存します。 例えばPCで安定したWifi環境だと、低画質ファイルは再生されずに終わったりします。 ですが今回は、PC(Mac)+4Gのテザリング環境で無事に(?)3種類の映像が確認されました。 何回かLoadボタンを押して、「はじめから再生」を繰り返してみると、再生始まりのタイミングは画質が低い(または中画質)場合が多い印象でした。ですが4Gテザリング環境でも安定すれば高画質が続く印象です。もっと長い尺の動画にすることでも結果は変わるかもしれません。あくまでご参考までの結果となります。

高画質 2.4Mbps

009-high

中画質 1.2Mbps

009-mid

低画質 600kbps

009-low

まとめ

先日MPEG-DASHに対応したAmazon Elasitc Transcoderで、MPEG-DASHの名称に込められている意味の1つであるAdaptive bitrate streamingを試してみました。 Elastic TranscoderのWatermark機能も使うことで動的にビットレートが変わっていることも確認することができました。ただ出力の設定がいくつも増えるため、Manageent Consoleでジョブ作成の度にポチポチと設定するのは大変ですね。。今度は設定をいかに簡単に行えるかについても考えてみたいと思います。