どのレンディションが再生されるかの判定

このトピックでは、Brightcove プレーヤーがどのレンディションを再生するかをどのように判断するかについて説明します。

HLS か MP4 か?

新しい Brightcove プレーヤーを使用する場合は、できるだけ多くのデバイスやブラウザに対応できるよう、HLS と MP4 の両方のレンディションを含むトランスコードプロファイルを選択または作成することを推奨します。次の表は、特定のブラウザで実行時にプレーヤーがどのレンディションを再生するかをどのように決定するかを示しています。

ブラウザの種類 既定で使用される再生テクノロジー
デスクトップ版 Chrome 34+、デスクトップ版 Firefox 42+、Edge、および Android 5.0+ 上の Chrome 34+ HTML ベースの HLS(MSE[1-1] を使用)
デスクトップ(macOS)Safari、モバイル(iOS)Safari ネイティブ HLS(ブラウザによる実装)
旧バージョンの Firefox および Chrome Flash ベースの HLS(Flash 10.3 以上が必要。Flash が無効な場合は MP4 にフォールバック)
Windows 8.1+ 上の IE 11 HTML ベースの HLS(MSE を使用)

補足

HLS と DASH のレンディション選択

HLS および DASH 動画はセグメントに分割されます。これらは通常約 10 秒程度の長さですが、より短い、または長い場合もあります。帯域幅と解像度が分かっている場合、プレーヤーはそれらの条件に基づいてレンディションを選択します。解像度または帯域幅が不明な場合(例えば、プレーヤー作成時に display:none を指定している場合など)は、プレーヤーは 0.5 MB/秒(4,000 kbps 相当)に最も近いレンディションから開始します。セグメントの境界ごとに、以下の本文および図で説明するように、より高い、または低いレンディションへ切り替えます。

HLS と DASH では、利用可能な帯域幅とエンコーディングを前提として、かつプレーヤーサイズも考慮しながら、可能な限り高品質な視聴体験を提供しようとします。これは、常に最高ビットレートのレンディションを使うという意味ではありません。例えば、プレーヤーサイズが 300px × 150px の場合、4K ストリームをダウンロードするのは帯域の無駄です。

デフォルトでは、プレーヤーは「直近で検出されたセグメントの帯域幅」より小さい中で最もビットレートが高いバリアントを読み込もうとします。ただし、現在のプレーヤーサイズよりも大きな解像度を持つバリアントが複数存在する場合は、「現在のプレーヤーサイズより一段階だけ大きいサイズ」のバリアントにのみ切り替えます。

再生中、プレーヤーは次のアルゴリズムに基づいて、より高いまたは低いレンディションに切り替えます。このアルゴリズムへの入力は次のとおりです。

  • 利用可能な帯域幅
  • プレーヤーの表示サイズ(寸法)

アルゴリズムの概要(ハイレベル)

  1. 測定された帯域幅よりビットレートが高いレンディションをすべて除外する。
  2. 残ったレンディションを解像度(水平ライン数)の高い順にソートする。
  3. プレーヤーの寸法に最も近いレンディションを特定し、その一つ上の解像度のレンディションを選択する。

このプロセスは次のように図示されます。

  1. 新しいセグメントがダウンロードされるたびに、そのセグメントのサイズとダウンロードにかかった時間からダウンロードビットレートを算出します。
    HLS rendition1
  2. 新たに測定されたビットレートより高いビットレートを持つレンディションはすべて除外されます。
    HLS rendition2
  3. 現在のプレーヤーの寸法より大きいレンディションも除外されます。
    HLS rendition3
  4. プレーヤーサイズがわずか 1 ピクセル小さいだけで大きな品質低下が起きるのは望ましくないため、次に高い解像度のレンディションを再度候補に加えます。最終的に残った中で最も高いビットレートのレンディションが使用されます。
    HLS rendition4

上記のフィルタリングの結果、適切なレンディションが一つも残らなかった場合は、マスタープレイリストで最初に指定されているエンコーディングが使用されます。

この例では、900×500 の範囲内に収まる解像度が 640×360 であり、その一つ上の解像度が 960x5@ 720kbpsbps であるため、960x5@ 720kbpsbps のレンディションが最適と判断されます。また、理論的には帯域幅制限がない前提のもとで、720kbps がその範囲内で最も高いビットレートとなります。さらに、ピクセル比にも依存します(Retina ディスプレイの場合、プレーヤーはこれを 1800×1000 として扱います)。帯域幅の詳細については、Github を参照してください。

別の優先順位ロジックを使用したい場合は、レンディション選択ロジックを完全に差し替えることも可能です。例えば、再生中の停止が増える可能性があっても、常に解像度に基づき最適なレンディションを選択することもできます。詳細は player.hls.selectPlaylist に関するドキュメントを参照してください。

MP4 のレンディション選択

モバイル デバイスで MP4 を再生する場合(上記のルールに基づき MP4 が選択された場合)、プレーヤーは 0.5 MB/秒に最も近いビットレートの MP4 を選択します。デスクトップまたはノート PC の場合は、3 MB/秒に最も近いビットレートの MP4 を選択します。

オーディオトラックの選択

マニフェストは、選択されたビデオトラックに応じて、どのオーディオトラックを読み込むかを決定します。

playlist-1.m3u8

      #EXTM3U
      
        #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="stereo",LANGUAGE="en",NAME="English",DEFAULT=YES,AUTOSELECT=YES,URI="audio/stereo/en/128kbit.m3u8"
        #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="stereo",LANGUAGE="dubbing",NAME="Dubbing",DEFAULT=NO,AUTOSELECT=YES,URI="audio/stereo/none/128kbit.m3u8"
        
        #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="surround",LANGUAGE="en",NAME="English",DEFAULT=YES,AUTOSELECT=YES,URI="audio/surround/en/320kbit.m3u8"
        #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="surround",LANGUAGE="dubbing",NAME="Dubbing",DEFAULT=NO,AUTOSELECT=YES,URI="audio/stereo/none/128kbit.m3u8"
        
        #EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="Deutsch",DEFAULT=NO,AUTOSELECT=YES,FORCED=NO,LANGUAGE="de",URI="subtitles_de.m3u8"
        #EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="English",DEFAULT=YES,AUTOSELECT=YES,FORCED=NO,LANGUAGE="en",URI="subtitles_en.m3u8"
        #EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="Espanol",DEFAULT=NO,AUTOSELECT=YES,FORCED=NO,LANGUAGE="es",URI="subtitles_es.m3u8"
        #EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="Français",DEFAULT=NO,AUTOSELECT=YES,FORCED=NO,LANGUAGE="fr",URI="subtitles_fr.m3u8"
        
        #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=258157,CODECS="avc1.4d400d,mp4a.40.2",AUDIO="stereo",RESOLUTION=422x180,SUBTITLES="subs"
        video/250kbit.m3u8
        #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=520929,CODECS="avc1.4d4015,mp4a.40.2",AUDIO="stereo",RESOLUTION=638x272,SUBTITLES="subs"
        video/500kbit.m3u8
        #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=831270,CODECS="avc1.4d4015,mp4a.40.2",AUDIO="stereo",RESOLUTION=638x272,SUBTITLES="subs"
        video/800kbit.m3u8
        #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1144430,CODECS="avc1.4d401f,mp4a.40.2",AUDIO="surround",RESOLUTION=958x408,SUBTITLES="subs"
        video/1100kbit.m3u8
        #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1558322,CODECS="avc1.4d401f,mp4a.40.2",AUDIO="surround",RESOLUTION=1277x554,SUBTITLES="subs"
        video/1500kbit.m3u8
        #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=4149264,CODECS="avc1.4d4028,mp4a.40.2",AUDIO="surround",RESOLUTION=1921x818,SUBTITLES="subs"
        video/4000kbit.m3u8
        #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=6214307,CODECS="avc1.4d4028,mp4a.40.2",AUDIO="surround",RESOLUTION=1921x818,SUBTITLES="subs"
        video/6000kbit.m3u8
        #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=10285391,CODECS="avc1.4d4033,mp4a.40.2",AUDIO="surround",RESOLUTION=4096x1744,SUBTITLES="subs"
        video/10000kbit.m3u8

上記のサンプルでは、stereosurround の 2 つのオーディオグループがあります。また、6 つの解像度に対して 8 つのビットレートの動画が存在します。

  • 下位 3 つのビットレートは stereo オーディオグループを使用します。
  • 上位 5 つのビットレートは surround オーディオグループを使用します。

それぞれのオーディオグループには、言語や名称が異なる 2 つのストリームがあります。これらが存在する場合、プレーヤーのメニューに「代替オーディオトラック」として表示されます。

補足

  • HLS では、オーディオが分離された(demuxed)構成の場合、オーディオストリームのアダプティブ配信はできません。そのため、上記の例のように異なるオーディオグループや代替オーディオがある場合でも、stereo や surround トラックについて複数の品質レンディションを指定することはできません。

    ただし、プレイリストがオーディオのみの場合は、通常の EXT-X-STREAM-INF タグを使用して提供されていれば、アダプティブ配信が可能です。

  • DASH の場合、アダプティブオーディオを持つことはできますが、現在のところ、オーディオのみのマニフェストでない限り、アダプティブに切り替えることはサポートしていません。動画レンディションに紐づいた 1 つのオーディオレンディションのみを選択し、その動画に紐づく最初のオーディオレンディションを使用します。