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 を利用している。