はじめに
Brightcoveのカタログから動画を取得する場合、SDK は再生するソースを決定する必要があります。これは、 defaultSourceSelectionController コンポーネントと exoPlayerSourceSelectionController コンポーネントに実装されています。
デフォルトの選択プロセス
Android 用 Brightcove Player SDK では、デフォルトのソース選択プロセスが使用されます。簡単にするために、SDK によるBrightcove再生 API および Google の exoPlayer のサポートに重点を置きます。
デフォルトの選択プロセスは次のように定義されます。
-
Android 6.4 以降の Brightcove ネイティブ SDK では、利用可能な場合、すべてのソースタイプの HTTPS 配信が選択されます。
DefaultSourceSelectionController と exoPlayerSourceSelectionController の両方が、
deliveryType
選択したの HTTPS バージョンを選択しようとします。HTTPS ソースが存在しない場合、選択コントローラは最初に使用可能なソースを選択します。 - NS BrightcoveExoPlayerVideoViewを持っている最初のソースを探します
deliveryType
のMPEG-DASH、およびどちらでもないプロファイルurn:hbbtvまたはurn:dvb。SDK は、これらの DASH プロファイルのどちらでも再生をサポートしていないため、ソースから除外されます。 - 上記が見つからない場合、ソースの選択は最初のソースにフォールバックします。
deliveryType
のHLS。 - そのようなソースが見つからない場合は、ソースにフォールバックします。
deliveryType
のMP4 256kBpsに最も近いビットレート。
ソースが見つかると、次のように実装が続行されます。
- 見つかった場合、選択したソースは SELECT_SOURCE イベントに対する応答とともに放出されます。
- デフォルトでは、 VideoPlaybackControllerを処理しますSELECT_SOURCE応答、放出することによってSET_SOURCEイベント。
- VideoDisplayComponent またはサブクラスは、基になるプレーヤー (exoPlayer または MediaPlayer) に URL をロードすることによって、 SET_SOURCE イベントを処理します。
- 再生が開始されると、基になるプレーヤーが HLS コンテンツと DASH コンテンツでビットレートを調整します。HLS では、基になるプレーヤーはマスターマニフェストにリストされている最初のビットレートから始まります。
デフォルトのトランスコード設定を使用する場合、最初の HLS ソースは、個々のソース (レンディション) をすべて指すマスター m3u8 プレイリストである必要があります。
HLS ソースの設定
SDK のデフォルトのソース選択ポリシーが呼び出される前に、アプリレベルでソース選択をカスタマイズして、望ましくない配信タイプを除外することができます。これを行うには、Playback API の JSON レスポンスから Video オブジェクトに設定されるソースコレクションを変更します。
この例では、HLS ソースのみを使用します。
catalog.findVideoByReferenceID(videoReferenceId, new com.brightcove.player.edge.VideoListener() {
@Override
public void onVideo(Video video) {
sourceSelectionFilter(DeliveryType.HLS, video);
brightcoveVideoView.add(video);
brightcoveVideoView.start();
}
});
sourceSelectionFilter()
メソッドは次のようになります。
public static void sourceSelectionFilter(@NonNull DeliveryType deliveryTypeFilter, @NonNull Video video) {
if (video.getSourceCollections().containsKey(deliveryTypeFilter)) {
// Only remove the other delivery types if the desired type is in our Source collections
for (DeliveryType deliveryType : DeliveryType.values()) {
if (!deliveryType.equals(deliveryTypeFilter)) {
video.getSourceCollections().remove(deliveryType);
}
}
}
}