AWS MediaConvertでHLSをABRしてブラウザでストリーミング再生する

AWS MediaConvertでHLSをABRしてブラウザでストリーミング再生する

August 26, 2021

作業に際して参考になったリンク先を記録しておきたいだけだが、それだと味気ないので無理矢理に自分の言葉を添えながら書いていく。

用語整理 #

HLS (HTTP Live Streaming)

HLS は動画ストリーミングプロトコルの一種。HTTP ライブストリーミング。開発したのは Apple 社。

マニフェストファイル(プレイリストファイルとも呼ばれる)と、セグメントファイル(チャンクファイルとも呼ばれる)から成る。マニフェストファイルの拡張子は .m3u8 で、チャンクファイルの拡張子は .ts である。

FYI

ABR (Adaptive bitrate streaming)

ネットワーク状態が変化したときにストリームの途中でビットレート(≒ 画質)を調整すること。アダプティブ・ビットレート。

回線状態の悪化に合わせて画質も劣化、回線復旧に合わせて画質も戻るようになっている動画サービスがあるが、あれが ABR ということ。

優れない回線状態の中で高画質動画をダウンロードしようとすると動画が止まってしまう。画質を劣化させることでダウンロードさせる容量を減らし、読み込み中のまま止まってしまうことを回避している。

HLS は ABR をサポートしている。

FYI

MediaConvert で HLS を ABR #

出力グループで Apple HLS を選択して、Automated ABR(自動化 ABR)を有効化するだけ。

ABR 時に設定すべきは以下項目のみ。

最大レンディション

作成されるレンディションの最大数。レンディションの個数はこの上限範囲内で、各ジョブの分析に基づいて自動的に決定される。Auto(自動)に設定すると、デフォルト値の 15 が適用される。

最大/最小 ABR ビットレート (ビット/秒)

最大:使用されるレンディションのビットレート上限。つまり、インターネット接続が最も速い視聴者に配信される最高品質のレンディションが消費する帯域幅の上限値。値を指定しない場合のデフォルト値 8,000,000 (8 MB/秒) 。

最小:使用されるレンディションのビットレート下限。つまり、インターネット接続が最も遅い視聴者に配信される最低品質のレンディションが消費する帯域幅の下限値。値を指定しない場合のデフォルト値 600,000 (600 KB/秒) 。

FYI

その後、出力グループ配下の「自動化 ABR ベース出力」から詳細な設定を行える。その一例として、動画のコーデックがある。

FYI

コーデックでは、H.264 と H.265 が選択できる。後者の方が新しいが、デバイス・ブラウザの互換性を考慮すると H.264 を選択する場合が多いはず。コーデックは一定間隔で新世代のものが考案されているため、いつかは別のコーデックがこの座に変わることは間違いない。

FYI

最大レンディションおよびビットレートの最大/最小値については、最高と最低の解像度をどのあたりに置くかということを考えながら設定すると良い。

一例として、私のケースでは以下の設定をしている。(ただしこれが適切かは不明)

  • 最大レンディション:3
  • 最大 ABR ビットレート (ビット/秒):2 Mbps
  • 最小 ABR ビットレート (ビット/秒):400 Kbps

解像度に対するビットレートがどれくらいかの目安は以下の YouTube ヘルプが参考になる。

FYI

解像度 動画ビットレート範囲
2160p(4K) / 60 fps 3840×2160p 20,000 ~ 51,000 Kbps
2160p(4K) / 30fps 3840×2160p 13,000 ~ 34,000 Kbps
1440p(QHD) / 60 fps 2560×1440 9,000 ~ 18,000 Kbps
1440p(QHD) / 30 fps 2560×1440 6,000 ~ 13,000 Kbps
1080p(FHD) / 60 fps 1920×1080 4,500 ~ 9,000 Kbps
1080p(FHD) 1920×1080 3,000 ~ 6,000 Kbps
720p(HD) / 60 fps 1280×720 2,250 ~ 6,000 Kbps
720p(HD) 1280×720 1,500 ~ 4,000 Kbps
480p(SD) 854×480 500 ~ 2,000 Kbps
360p 640×360 400 ~ 1,000 Kbps
240p 426×240 300 ~ 700 Kbps

FYI

自動化 ABR を利用する場合、プロフェッショナル階層の料金体系が適用される。プロフェッショナル階層の機能として、トランスコードの高速化機能が無料で利用できるため、そちらの設定も併せて行うのが良い。

FYI

先述の通り、自動化 ABR を有効化したジョブはプロフェッショナル階層の料金プランが適用される。また動画はマルチパス HQ (高品質) エンコーディングで変換される。料金表を見る際には、自分の定義したジョブがどの部分に該当するのか間違えないように注意のこと。

HLS をブラウザでストリーミング再生する #

HLS 形式は Safari および Edge ならばネイティブでサポートしておりそのまま再生可能。

Chrome などのその他ブラウザであっても、ブラウザの Media Source Extensions API (MSE) を使うことで HLS の再生を行うことができる。

FYI

実際にはライブラリを使用するため、MSE 自体への理解は浅くても問題ない。ライブラリはメジャーどころが何種類かある。

私のケースでは、HLS.js を利用している。