多重ビットレート ストリーミングとは、視聴者の接続速度に最適な解像度とビットレートで動画を配信する機能です。メディア ライブラリ内の各動画に対して、解像度とビットレートの異なる 1 本以上のレンディションを作成することができます。このトピックでは、プレーヤ API を使用し、プレーヤで再生する動画のレンディションを選択する方法を説明します。多重ビットレート ストリーミングの紹介は、多重ビットレート ストリーミングを使用するを参照してください。
プレーヤ API の VideoPlayer モジュールには、setRenditionSelectionCallback というメソッドがあり、これを使用して、どの多重ビットレート ストリーミング レンディションをプレーヤで再生可能にするかを指定できます。setRenditionSelectionCallback メソッドのシグネチャは次のとおりです。
setRenditionSelectionCallback(callback:Function):void
setRenditionSelectionCallback で渡す関数は、プレーヤが新しいレンディションを選択できる状態であると判断したとき、つまり、新しい動画が選択されて再生が開始したとき(プレーヤのロード時、または cueVideo() が呼び出されたときではない)、そして、ストリーミングの場合は、画面サイズが変わったとき、または複数のバッファリング イベントが発生したときに呼び出されます。
関数には、次のプロパティを含むコンテキスト オブジェクトが渡されます。
| property | description |
|---|---|
| video | レンディションが属する現在再生中の動画 |
| currentRendition | 現在選択されている動画のレンディション |
| renditions | 選択される動画のレンディションの配列 |
| detectedBandwidth | 最後に検出された帯域幅の値 |
| screenWidth | レンディションが再生される動画画面の幅(単位: ピクセル) |
| screenHeight | レンディションが再生される動画画面の高さ(単位: ピクセル) |
コンテキスト オブジェクトには、コールバック関数がレンディションを選択するために必要とする情報が含まれています。どのレンディションを選択するかは、視聴者が独自に判断できます。例で、3 つの一般的なシナリオを紹介します。関数が、再生されるレンディションのインデックスを返すことだけ確認してください。
多重ビットレート ストリーミング レンディションの選択方法を例示した、zip ファイルをダウンロードできます。
zip ファイルには、ActionScript と JavaScript がどちらも含まれます。これらの例をプレーヤで使用するには、以下を行います。
JavaScript を使用する場合は、APIModules_all.js に加え、JavaScript ファイルをプレーヤのパブリッシング コードに含めます。プレーヤが API 対応であることを確認します。たとえば、JavaScript のプレーヤ パブリッシング コードに、以下のような行を含めます。
<script src="http://admin.brightcove.co.jp/js/APIModules_all.js"> </script> <script src="http://www.example.com/js/SelectOptimalRendition.js"> </script>
ファイルに、選択中のレンディションを示すアラートが表示されます。
ActionScript を使用する場合、コンパイル済みの SWF をサーバーに置き、Modules 要素を使用して BEML プレーヤ テンプレートに SWF への参照を含めます。以下が例になります。
<Modules> <Module file="http://example.com/selectHighestRendition.swf" /> </Modules>
SWF には、フラッシュログまで追跡するトレースがあります。ActionScript のパブリッシング コードを使用してプレーヤをロードする場合は、Flex Builder または Flash のトレースがあるはずです。
プレーヤの再生中は、Brightcove プレーヤのデバッガを使用し、再生中のレンディションを確認できます。プレーヤのデバッガを開くには、別のブラウザ ウィンドウを開き、http://admin.brightcove.co.jp/viewer/BrightcoveDebugger.html に移動します。
以下に、SelectLowestRendition.js の例のレンディション選択関数を示します。
function selectRendition(context) {
var renditions = context.renditions;
var renditionIndex = -1;
var size = Number.MAX_VALUE;
for (var i = 0; i < renditions.length; i++) {
// 最小サイズのレンディションのインデックスを設定
if (renditions[i].size < size) {
size = renditions[i].size;
renditionIndex = i;
}
}
return renditionIndex;
}
selectRendition 関数にコンテキスト オブジェクトが渡されます。そのうち、renditions 配列のみが使用されます。この関数が、最小のレンディションをどのように識別し、それに応じて renditionIndex をどのように設定するかを確認してください。返された renditionIndex の値が、-1 である場合、または利用可能なレンディションのインデックスに一致しない他の値である場合、プレーヤは、通常の選択アルゴリズムを使用して、どのレンディションを使用するかを再計算します。
もう少し複雑な例を SelectOptimalRendition.js で見てみましょう。この例では 2 つの定数を使用し、選択されたレンディションが、使用可能な画面高さと帯域幅にどれほど密接にマッチする必要があるかを制御します。
// レンディションが動画画面の高さより何パーセント高くてもよいか var FRAME_HEIGHT_TOLERANCE = 1.2; // エンコーディングをチェックしたときに、検出された帯域幅が減らされるパーセント。通常は、スムーズな再生のため、利用可能な帯域幅未満でレンディションをエンコードします。 var ENCODING_RATE_TOLERANCE = 0.70
これらの定数の値は、各自の要件に応じて調整できます。この例では、コンテキスト オブジェクトの detectedBandwidth と screenHeight の両方を使用し、レンディションから最適な組み合わせを選択します。