Web やモバイルに
素晴らしい HLS 動画を配信する方法

動画パブリッシャーはマルチ デバイスの重要性について認識しています。しかしこれまでモバイル プレーヤーと Web プレーヤーの両方に互換性のあるプロトコルは存在しませんでした。セグメント化されたストリーミングに対するプレーヤー側のサポートにより、モバイル ブラウザーおよび Web ブラウザー向けの動画配信において、あるフォーマットが非常に重要になりました。

HLS デバイス

HTTP ライブ ストリーミング、別名 HLS は、元々 iOS の一部として Apple によって実装された動画配信プロトコルです。Brightcove Zencoder の API 駆動型動画エンコーディング ソリューションによってコンテンツを容易に HLS 用に準備することが可能です。しかし動画パブリッシャーが個々のソリューション用にコンテンツを最適化する上で、他にも知っておくと便利なことがあります。このガイドでは、ブラウザーおよびモバイル デバイスにおける HLS 動画再生に関する重要な情報、さらにエンコードに関する推奨事項について概説しています。

HLS について

HLS はセグメント化された H.264 MPEG-2 TS 動画および M3U8 ディスクリプター ファイルを使って、アダプティブ ビットレート ライブやオンデマンド動画を配信します。M3U8 ファイルとはインデックスで、クライアントは特定の時間においてどのストリームやどのセグメントが利用できるかを知ることができます。デバイスは主要なマニフェスト ファイルから、帯域幅と CPU の制約に基づいて最も適切なストリームを自動的に選択し、セグメントをダウンロードし、それを再生バッファに付加します。

HLS はその名の通り HTTP を通してデータを送信します。それにより RTP または RTMP 等従来のストリーミング プロトコルにおいていくつかの点で改善され、それらには以下が含まれます。

  • インフラ コストの削減
  • CDN および他の HTTP キャッシング インフラにおける「キャッシュ可能性」
  • プロキシおよびファイアウォールの制約による脅威が少ない
  • クライアントの経験則からのリアルタイムの最適化
    (アダプティブ ビットレート)
  • ビルトインされた冗長性
  • 簡単な HTML5 プレーヤー実装
Apple ストア

Apple App Store には、iOS アプリケーションを通して配信される動画に対して厳格な要件が存在します。10 分または 5 分間で 5MB のデータ転送(133 kbps)を超える動画コンテンツすべてについてストリーミングが必要です。さらに Apple はデベロッパーに対し、携帯ネットワークのフォールバックとして 64 kbps(またはそれ以下)の音声ストリームの提供を求めています。これらの要件を満たさないアプリケーションは App Store によって拒否されます。App Store に動画を展開する詳細については、iOS デベロッパー ライブラリーの Apple の HTTP ライブ ストリーミング概要のドキュメントをサイトでご覧ください。http://bit.ly/zgHSJX

モバイル デバイス

一般的に新しいモバイル デバイスほど処理能力が優れ、より高い H.264 のプロフィールをサポートすることができます。iPhone 4S(およびそれ以降)のリリースにより、iOS デバイスは H.264 の 3 つのプロファイル(Baseline、Main、および High)をサポートできるようになりました。Android はデバイスの数が非常に多いため、その機能について一般論を述べることは困難です。しかし最新の最上位機種の Android デバイスは、少なくとも iPhone 4 と同様のサポートを提供しています。これらのプロファイルとそれぞれの H.264 レベルは、特定のクライアント再生機能を分類するのに用いられています。これらのデバイスには標準の高画質サイズの画面がありませんが、一部は HD および SD の標準の解像度を Apple Digital AV アダプターまたは Apple VGA アダプターを使ってテレビに出力することが可能です。

iPhone 1 ~ 3GS、iPod touch 1 ~ 3 iPhone 4、iPad 1、Apple TV 1&2、
iPod touch 4&5、最新の Android*
iPhone 4S 以降、iPad 2 ~ 4、
Apple TV 3、最新の Android*
プロファイル Baseline プロファイル Main プロファイル High プロファイル
レベル レベル 3.0 レベル 3.1** レベル 4.1***
音声 AAC 音声、1 ~ 2 チャンネル AAC 音声、1 ~ 2 チャンネル AAC-LC 音声、1 ~ 2 チャンネル
最高フレームレート 30 fps 30 fps 30 fps*
動画ビットレート 最高 1.5 Mbps 最高 5 Mbps 最高 5 Mbps
音声ビットレート 最高 160 Mbps 最高 160 Mbps 最高 160 Mbps
音声サンプル レート 48000 未満 48000 未満 48000 未満
表示解像度 480x320 iPhone 4/4s: 960x640
iPad 1: 1024x768
iTouch: 1136x640
iPhone 5 以降: 1136x640
iPad 2: 1024x768
iPad 3/4: 2048x1536

* iPhone 5S および最新の最上位機種の Android は現在 High プロファイル レベル 4.2、60fps をサポートしています
** iPod touch 5 はレベル 4.1 以下をサポートしています
*** Apple TV 3 はレベル 4.0 以下をサポートしています

デスクトップおよび OTT

現在ネイティブ HLS をサポートしているブラウザーは Safari(バージョン 4.0 以降)のみですが、Flash フォールバックを使用することで他でも再生を可能にすることができます。Video.js はその Flash コンポーネントで HLS サポートを提供し、これによりほぼすべてのブラウザーにおいて HLS を使用することができます。多くのアプリケーション、そして Quicktime、VLC、Apple TV、Roku、Google TV、および XBMC 等の OTT デバイスも HLS をサポートしています。接続スピードによっては、これらの機器がハイ プロファイルまでサポートしています。

拡張機能

HLS 動画は常に進化し続け、新しい機能が次々に追加されています。今日 HLS は以下を含む幅広い拡張機能をサポートしています。

  • AES-128 暗号化によるコンテンツのセキュリティ
  • トランスポート ストリームでの CEA-608 クローズド キャプション
  • ライブ ストリーミングとオンデマンド動画
  • 音声トラックにアルバム ジャケットや動画のスクリーンショットなどの静止画像を含めることができる
  • ID3 フォーマットを使用して、タイムド メタデータを
    含むメタデータをストリーム

HLS をエンコードする際の 6 つのヒント

以下は、HLS エンコーディングを最大限に活用するためのヒントです。これら推奨事項は、ライブ トランスコーディングとオンデマンド トランスコーディングに同様に適用されます。

  1. HE-AAC 音声を使用します。標準の AAC(一般的に AAC-LC と呼ばれる)で素晴らしい音声を実現するには 96 ビットレート以上が必要で、それよりも低いビットレートでは圧縮が目立ちます。App Store においては、ほぼすべてのアプリで 64 kbps のストリームが要求されるため、HE-AAC 音声の使用が HTTP ライブ ストリーミングにおいて重要となります。HE-AAC(High Efficiency AAC)のプロファイルは低いビットレートでの使用に対して最適化され、HLS で非常に重要である 64 kbps での AAC-LC と比較して、はるかに素晴らしいサウンドを提供します。
  2. Apple では、不可逆圧縮による荒れを避けるため、音声のパラメーターを初めから終わりまで一定にすることを推奨しています。ストリーム間で音声が異なった場合、音声ビットレートの切り替え時にスキップやポップ音が生じる可能性があります。あるストリームにおいて、質を向上させるため異なる音声レートが必要となった場合、最低でも標準サンプル レートを維持します。
  3. キーフレーム レートはセグメント サイズの等間隔であることが必要です。たとえばセグメント サイズが 10 秒である場合、キーフレームは 2 秒、2.5 秒、3.33 秒、5 秒、または 10 秒であることが必要です。Zencoder を含む一部のエンコーダーは、キーフレームを自動的に適切な位置に配置します。Zencoder で force_keyframe_rate 設定を使い、ストリーム間でキーフレームが適切に整合されるようにします。
  1. フォーマットのオーバーヘッドに注意します。MPEG-TS フォーマットは不要なパディングを多く使用するため、TS マクサーが最適化されていない場合、HLS がそれぞれの MP4 よりも著しく大きくなる可能性があります(最大で全体的に 10%~20% 増加)。 Zencoder と Apple は、どちらも高度に最適化された TS マクサーを使って TS オーバーヘッドを最小化します。
    要求ビットレート オーバー
    ヘッド
    Zencoder により
    最適化された HLS
    364 kbps 4.83%
    最適化されていない HLS 364 kbps 16.34%
  2. ストリーム性能を確保するため、ビットレートのピークを制限することを検討します。ピーク ビットレート(bitrate_cap)をバッファ 3 ~ 5 秒内で平均ビットレートの 150% に設定することをお勧めします。
  3. streams 値に該当する情報すべてを含める必要があります。該当するコーデック値を含めるために複数の H.264 プロファイルを提供する場合、これは特に重要となります。これらの設定により、デコードできないセグメントを旧式のデバイスが誤ってダウンロードするのを防ぐことができます。たとえば Baseline 3.0 プロファイルの値には「avc1.42E01F, mp4a.40.2」、Main 3.1 には「avc1.42E01F, mp4a.40.2」を使用します。

出力と再生

HLS 動画はインデックス ファイル(.M3U8 XML マニフェスト)で構成されます。これらは 他の M3U8 ファイルまたは個別の動画セグメント(.ts セグメント、通常 2 ~ 10 秒の長さ)を参照します。Zencoder を使用すると、エンコーディング ジョブの完了後、指定された base_url ロケーションに .M3U8 マニフェストが含まれます。

Zencoder 出力再生

Apple の HLS ファイル構造の説明

個別の base_url を使い、セグメントの各セットをフォルダに整理することができます。この際 API リクエストの playlist 部分の path 値が各ストリームの格納先を反映している必要があります。そうでない場合、マニフェスト ファイルが空のロケーションに保存されます。クライアントが playlist.m3u8(プライマリー インデックス ファイル)を取得すると、プラットフォームやネットワークの制約に基づいて別のどのストリームを再生するかが決定されます。

例: video.js を使用した基本的な HTML5 テスト プレーヤー

      
	<!DOCTYPE html>
	<html>
	<head>
		<title>HTTP Live Streaming Test Player </title>
		<link href="http://vjs.zencdn.net/c/video-js.css" rel="stylesheet" type="test/css">
		<script src="http://vjs.zencdn.net/c/video.js"></script>
        </head>
	<body>
		<video id="example_video_1" class="video-js vjs-default-skin" controls autoplay
		width="640" height="360" data-setup="{}">
			<source src="http://YourServerHere/playlist.m3u8" type="application/x-mpegURL" />
		</video>
	</body>
	</html>
			

エンコーディングに関する推奨事項

弊社にとって、お客様の動画が素晴らしく見えることは非常に需要です。しかし動画の圧縮についての美的判断はお客様それぞれによって異なるため、弊社は推奨事項として提示しています。お客様のアプリケーションは携帯電話あるいはモバイル デバイス用に調整されている可能性があります。その場合には追加するストリームを、領域の下位に含めることを望まれるかもしれません。またお客様のアプリケーションがより強力なネットワークに接続されたデバイスを対象としている場合、提供するストリームの合計数を制限することができます。ソース マテリアルにパニング、モーション、または、カットが大量に含まれている場合、望ましい結果を得るために video_bitrate を増やす必要があるかもしれません。

動画関連全般にいえることですが、品質については全体的に判断するようにします。テスト プレーヤーと clip_length パラメーターを使い、小さなテスト ストリームを出力して必要な微調整を行います。上記 6 つのヒントを念頭に置くことで、あらゆる iOS デバイスにおいて、動画を素晴らしいものにすることができます。

解像度 プロファイル ビットレート @16:9 @4:3 音声 コメント
1,280 x 960 High@4.0 4 Mbps 1,280 x 720 1,280 x 960 64kbps HE-AAC
1,024 x 768 Main@3.1 2 Mbps 1,024 x 576 1,024 x 768 56kbps HE-AAC
960x640 Main@3.1 1.5Mbps 960 x 540 854x640 56kbps HE-AAC
640x432 Main@3.1 1 Mbps 640 x 360 576x432 56kbps HE-AAC
480x320 Baseline@3.0 600 kbps 480x272 426x320 56kbps HE-AAC
400x288 Baseline@3.0 400 kbps 400x224 384x288 56kbps HE-AAC
400x288 Baseline@3.0 200 kbps 400x224 384x288 56kbps HE-AAC フレームレート
デシメーション
(音声のみ) (音声のみ) (音声のみ) (音声のみ) (音声のみ) 56kbps HE-AAC 静止画像を含む

注記

  1. これらは推奨事項です。別の解像度やビットレートを使用することも可能で、状況によってはそれらが望ましい場合もあります。たとえば複雑なコンテンツで高いビットレートが必要となったり、シンプルなコンテンツではより低いビットレートを使用することが可能な場合があります。
  2. これら 6 つの解像度とビットレートは、帯域幅のかなりの範囲をカバーしています。Apple では 8 つの解像度とビットレートを推奨しています。お客様は必要に応じて解像度やプロフィールを追加もしくは削除することができます。
  3. 最初の列は一般解像度です。4 列目と 5 列目にあるように、動画のアスペクト比(4:3 または 16:9)によって最終的な動画の解像度が異なります。
  4. フレームレートは 30 以下に制限する必要があります。フレームレートの変更を強制しないでください。再生をスムーズにするため、高すぎるフレームレートにはデシメーションを行います。最も低いストリームには、フレームレートを 15 以下にデシメーションします。
  1. iPhone 1 の互換性については、Baseline ストリームに H.264 基準フレームを 1 つのみ使用するようにします。
  2. 強制キーフレーム調整でキーフレームの間隔を 5 もしくは 10 にします。
  3. 互換性の幅を最も広げるには、音声サンプルレートを 44,100 以下に制限します。
  4. 再生をスムーズにするため、ビットレートのピークを制限することを検討します。品質と再生とのバランスを考えて、ビットレートの上限を平均ビットレートの 150%、バッファを 3~5 秒にすることを検討します。