メディア アイテムに複数のトラックが含まれている場合、トラックの選択は、
どちらが再生に選択されるかが決まります。トラック選択プロセスは
TrackSelectionParameters
によって設定されます。これにより、
指定するトラック選択に影響を与えるため、制約とオーバーライドを行います。
利用可能なトラックのクエリ
Player.Listener.onTracksChanged
を再生して、変更に関する通知を受け取ることができます
次のようなトラックにご参加いただけます。
- 利用可能なトラックは、メディア アイテムの準備中に判明 表示されます。なお、プレーヤーは、認識するためにメディア アイテムを準備する必要があります。 トラックの内容を確認できます
- 再生が 1 つのメディアから移行するため、利用可能なトラックが変わる 移動します
- 選択したトラックに対する変更。
player.addListener(
object : Player.Listener {
override fun onTracksChanged(tracks: Tracks) {
// Update UI using current tracks.
}
}
)
player.addListener(
new Player.Listener() {
@Override
public void onTracksChanged(Tracks tracks) {
// Update UI using current tracks.
}
});
player.getCurrentTracks()
を呼び出して現在のトラックをクエリすることもできます。
返される Tracks
には、Track.Group
オブジェクトのリストが含まれます。
単一の Group
は同じコンテンツですが、形式が異なります。
トラックをグループ化する方法の例として、アダプティブ再生について考えてみましょう。 メイン動画フィードは 5 つのビットレートで提供され、代替の動画フィードも提供されます。 (たとえば、スポーツの試合で異なるカメラアングル)は 2 つのビットレートで提供されます。 この場合、2 つの動画トラック グループがあり、1 つはメインの 5 つのトラックを含む動画フィードと、代替動画フィードの 1 つ 2 つのトラックを含みます
言語が異なる音声トラックはグループ化されません。これは、 同じとは見なされません。逆に、音声トラックは 同じ言語で書かれていて、ビットレート、サンプリングなどの特性のみが レート、チャンネル数などを グループ化できますこれはテキスト トラックにも適用されます。
各 Group
に対してクエリを実行することで、どのトラックがサポートされているかを判断できます。
現在選択されている再生、各トラックが使用する Format
:
for (trackGroup in tracks.groups) {
// Group level information.
val trackType = trackGroup.type
val trackInGroupIsSelected = trackGroup.isSelected
val trackInGroupIsSupported = trackGroup.isSupported
for (i in 0 until trackGroup.length) {
// Individual track information.
val isSupported = trackGroup.isTrackSupported(i)
val isSelected = trackGroup.isTrackSelected(i)
val trackFormat = trackGroup.getTrackFormat(i)
}
}
for (Tracks.Group trackGroup : tracks.getGroups()) {
// Group level information.
@C.TrackType int trackType = trackGroup.getType();
boolean trackInGroupIsSelected = trackGroup.isSelected();
boolean trackInGroupIsSupported = trackGroup.isSupported();
for (int i = 0; i < trackGroup.length; i++) {
// Individual track information.
boolean isSupported = trackGroup.isTrackSupported(i);
boolean isSelected = trackGroup.isTrackSelected(i);
Format trackFormat = trackGroup.getTrackFormat(i);
}
}
Player
がトラックをデコードおよびレンダリングできる場合、トラックはサポートされます。 提供しますなお、同じタイプのトラック グループ( 複数の音声トラック グループなど)がサポートされている場合、 個別にサポートされているため、プレーヤーは必ずしも特定の時点で できます。- 現在のトラックが再生対象として選択されている場合、そのトラックは選択されます。
TrackSelectionParameters
。1 つのトラック グループ内の複数のトラックが 選択すると、プレーヤーはこれらのトラックをアダプティブ再生( ビットレートの異なる複数の動画トラックなど)を扱う場合。なお、このうち 1 つのみが 曲が再生されます。
トラック選択パラメータの変更
トラック選択プロセスは、
Player.setTrackSelectionParameters
。この作業は、導入前と導入中の両方で行うことができます。
おすすめします。次の例は、現在の
TrackSelectionParameters
を取得し、変更して Player
を更新します。
結果を変更します。
player.trackSelectionParameters =
player.trackSelectionParameters
.buildUpon()
.setMaxVideoSizeSd()
.setPreferredAudioLanguage("hu")
.build()
player.setTrackSelectionParameters(
player
.getTrackSelectionParameters()
.buildUpon()
.setMaxVideoSizeSd()
.setPreferredAudioLanguage("hu")
.build());
制約ベースのトラック選択
TrackSelectionParameters
のほとんどのオプションでは、制約を指定できます。
実際に利用できるトラックとは無関係です使用可能
次のような制約があります。
- 動画の幅、高さ、フレームレート、ビットレートの最大値と最小値。
- 最大音声チャンネル数とビットレート。
- 動画と音声の優先 MIME タイプ。
- 優先される音声言語とロールのフラグ。
- 使用するテキスト言語とロールフラグ。
ExoPlayer は、これらの制約に対して適切なデフォルト値を使用します。 解像度をディスプレイ サイズに設定し、指定した音声言語を優先的に ユーザーのシステムの言語 / 地域設定と一致している。
制約ベースのトラック選択を 利用可能なトラックの中から 特定のトラックを選択します
- 制約は、メディア アイテムが提供するトラックを確認する前に指定できます。 つまり、プレーヤーがコンテナを準備する前に制約を指定できます。 選択できますが、特定のトラックを選択するには、 利用可能なトラックが判明するまでお待ちください。
- 制約は、再生リスト内のすべてのメディア アイテムに適用されます。
アイテムごとに使用可能なトラックが異なります。たとえば、使用する音声言語は、
指定した場合でも、すべてのメディア アイテムに
その言語のトラックの
Format
はメディア アイテムによって異なります。 以下で説明するように、特定のトラックを選択する場合はこの点が異なります。
特定のトラックを選択する
TrackSelectionParameters
を使用して特定のトラックを選択することもできます。まず、
プレーヤーで現在利用可能なトラックをクエリするには、
Player.getCurrentTracks
。次に 選択する曲を特定したら
TrackSelectionOverride
を使用して TrackSelectionParameters
で設定できます。
たとえば、特定の audioTrackGroup
から最初のトラックを選択するには、次のようにします。
player.trackSelectionParameters =
player.trackSelectionParameters
.buildUpon()
.setOverrideForType(
TrackSelectionOverride(audioTrackGroup.mediaTrackGroup, /* trackIndex= */ 0)
)
.build()
player.setTrackSelectionParameters(
player
.getTrackSelectionParameters()
.buildUpon()
.setOverrideForType(
new TrackSelectionOverride(
audioTrackGroup.getMediaTrackGroup(), /* trackIndex= */ 0))
.build());
TrackSelectionOverride
は、
オーバーライドで指定したものと完全に一致する TrackGroup
。したがって、
後続のメディア アイテムにオーバーライドは適用されませんが、
あります。
トラックタイプまたはトラックグループを無効にする
動画、音声、テキストなどのトラックタイプは、
TrackSelectionParameters.Builder.setTrackTypeDisabled
。無効なトラックタイプ
次のすべてのメディア アイテムで無効になります。
player.trackSelectionParameters =
player.trackSelectionParameters
.buildUpon()
.setTrackTypeDisabled(C.TRACK_TYPE_VIDEO, /* disabled= */ true)
.build()
player.setTrackSelectionParameters(
player
.getTrackSelectionParameters()
.buildUpon()
.setTrackTypeDisabled(C.TRACK_TYPE_VIDEO, /* disabled= */ true)
.build());
または、特定のグループからのトラックが選択されないようにすることもできます。
TrackGroup
で、そのグループに空のオーバーライドを指定します。
player.trackSelectionParameters =
player.trackSelectionParameters
.buildUpon()
.addOverride(
TrackSelectionOverride(disabledTrackGroup.mediaTrackGroup, /* trackIndices= */ listOf())
)
.build()
player.setTrackSelectionParameters(
player
.getTrackSelectionParameters()
.buildUpon()
.addOverride(
new TrackSelectionOverride(
disabledTrackGroup.getMediaTrackGroup(),
/* trackIndices= */ ImmutableList.of()))
.build());
トラック セレクタのカスタマイズ
トラックの選択は TrackSelector
(インスタンス)が行います
これは、ExoPlayer
がビルドされて後で取得されるたびに提供されます。
ExoPlayer.getTrackSelector()
と一緒に使用できます。
val trackSelector = DefaultTrackSelector(context)
val player = ExoPlayer.Builder(context).setTrackSelector(trackSelector).build()
DefaultTrackSelector trackSelector = new DefaultTrackSelector(context);
ExoPlayer player = new ExoPlayer.Builder(context).setTrackSelector(trackSelector).build();
DefaultTrackSelector
は、ほとんどの用途に適した柔軟な TrackSelector
です。
対応できますPlayer
に設定された TrackSelectionParameters
を使用するだけでなく、
高度なカスタマイズ オプションがいくつか用意されています。
DefaultTrackSelector.ParametersBuilder
:
trackSelector.setParameters(
trackSelector.buildUponParameters().setAllowVideoMixedMimeTypeAdaptiveness(true))
)
trackSelector.setParameters(
trackSelector.buildUponParameters().setAllowVideoMixedMimeTypeAdaptiveness(true));
トンネリング
レンダラと API の組み合わせにより、トンネリング再生を有効にできます。
サポートされていますこれを行うには、
DefaultTrackSelector.ParametersBuilder.setTunnelingEnabled(true)
。
オーディオ オフロード
オフロードのオーディオ再生は、
サポートしています。これを行うには、
TrackSelectionParameters
内の AudioOffloadModePreferences
。
val audioOffloadPreferences =
AudioOffloadPreferences.Builder()
.setAudioOffloadMode(AudioOffloadPreferences.AUDIO_OFFLOAD_MODE_ENABLED)
// Add additional options as needed
.setIsGaplessSupportRequired(true)
.build()
player.trackSelectionParameters =
player.trackSelectionParameters
.buildUpon()
.setAudioOffloadPreferences(audioOffloadPreferences)
.build()
AudioOffloadPreferences audioOffloadPreferences =
new AudioOffloadPreferences.Builder()
.setAudioOffloadMode(AudioOffloadPreferences.AUDIO_OFFLOAD_MODE_ENABLED)
// Add additional options as needed
.setIsGaplessSupportRequired(true)
.build();
player.setTrackSelectionParameters(
player.getTrackSelectionParameters()
.buildUpon()
.setAudioOffloadPreferences(audioOffloadPreferences)
.build());
);