Bir medya öğesi birden çok parça içeriyorsa parça seçimi,
hangilerinin oynatılmak üzere seçileceğini belirler. Parça seçme süreci
TrackSelectionParameters
tarafından yapılandırıldığı için birçok farklı
Belirtilen parça seçimini etkileyen kısıtlamalar ve geçersiz kılmalar.
Kullanılabilir kanalları sorgulama
Değişikliklerle ilgili bildirim almak için Player.Listener.onTracksChanged
adlı parçayı dinleyebilirsiniz
şunlar da dahil olmak üzere:
- Kullanılabilir parçalar, oluşturulan medya öğesi hazırlanırken bilinmeye başlar oynatma sayısındaki artış. Oynatıcının, bilmesi gereken bir medya öğesini hazırlaması gerektiğini unutmayın parçalarının hangileri olduğunu öğrendik.
- Bir medyadan oynatma geçişi nedeniyle kullanılabilir parçalar değişiyor öğeyi başka bir öğeye koyabilirsiniz.
- Seçili parçalarda yapılan değişiklikler.
Kotlin
player.addListener( object : Player.Listener { override fun onTracksChanged(tracks: Tracks) { // Update UI using current tracks. } } )
Java
player.addListener( new Player.Listener() { @Override public void onTracksChanged(Tracks tracks) { // Update UI using current tracks. } });
Ayrıca, player.getCurrentTracks()
numaralı telefonu arayarak mevcut parçaları sorgulayabilirsiniz.
Döndürülen Tracks
, Track.Group
nesnelerinin bir listesini içerir. Bu nesnede parçaların bir
tek bir Group
aynı içeriği farklı biçimlerde sunuyor.
Parçaların nasıl gruplandırılabileceğine bir örnek olarak, Ana video feed'i beş bit hızında, alternatif bir video feed'i ise (örneğin, bir spor maçında farklı bir kamera açısı) iki bit hızında sağlanır. Bu durumda, biri ana kanala karşılık gelen beş parça, ikincisi ise alternatif video feed'i içeren video feed'i iki parçadan oluşur.
Dilleri farklı olan ses parçaları gruplanmaz çünkü içerik farklı diller aynı kabul edilmez. Buna karşılık ses parçaları bit hızı, örnekleme gibi özellikler açısından farklı olması gerekir. dönüşüm oranı, kanal sayısı vb. bilgiler gruplanabilir. Bu, metin parçaları için de geçerlidir.
Hangi kanalların desteklendiğini belirlemek için her Group
sorgulanabilir
şu anda seçili olan oynatma listesi ve her parçanın Format
kullandığı bilgi listesi:
Kotlin
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) } }
Java
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
, kodunu çözebiliyor ve oluşturabiliyorsa parça desteklenir kullanabilirsiniz. Aynı türde birden çok izleme grubu (örneğin, birden çok ses parçası grubu) desteklenir, bu yalnızca ses parçasının tek başına desteklenir ve oyuncu bunları anlamına gelir.- Bir parça, içinde bulunulan döneme göre çalma için seçilmişse seçilir
TrackSelectionParameters
. Bir izleme grubunda birden fazla parça varsa oynatıcı, uyarlanabilir oynatma için bu parçaları kullanır (örneğin, farklı bit hızlarına sahip birden fazla video parçasını kullanabilirsiniz. Bunlardan yalnızca birinin parça herhangi bir zamanda çalınır.
Kanal seçimi parametrelerini değiştirme
Kanal seçme süreci,
Player.setTrackSelectionParameters
Bunu hem öncesinde hem de sırasında
oynatmaya devam edebilirsiniz. Aşağıdaki örnek, geçerli değerlerin nasıl alınacağını gösterir.
TrackSelectionParameters
, değişiklikleri yapın ve Player
güncelleyin
değişiklik yapılan sonuçla:
Kotlin
player.trackSelectionParameters = player.trackSelectionParameters .buildUpon() .setMaxVideoSizeSd() .setPreferredAudioLanguage("hu") .build()
Java
player.setTrackSelectionParameters( player .getTrackSelectionParameters() .buildUpon() .setMaxVideoSizeSd() .setPreferredAudioLanguage("hu") .build());
Kısıtlamaya dayalı parça seçimi
TrackSelectionParameters
içerisindeki çoğu seçenek, sınırlamalar belirlemenize olanak tanır.
mevcut parçalardan bağımsızdır. Uygun
kısıtlamalar şunları içerir:
- Maksimum ve minimum video genişliği, yüksekliği, kare hızı ve bit hızı.
- Maksimum ses kanalı sayısı ve bit hızı.
- Video ve ses için tercih edilen MIME türleri.
- Tercih edilen ses dilleri ve rol işaretleri.
- Tercih edilen metin dilleri ve rol işaretleri.
ExoPlayer bu kısıtlamalar için makul varsayılanlar kullanır (örneğin görüntü boyutuna göre daha yüksek bir ses dili veya video kullanıcının sistem Yerel ayarıyla eşleşir.
İzleme sistemi yerine kısıtlamaya dayalı parça seçimini kullanmanın mevcut parçalardan belirli parçaları seçerek:
- Bir medya öğesinin hangi kanalları sağladığını öğrenmeden önce kısıtlamalar belirtebilirsiniz. Bu, kısıtlamaların oynatıcı henüz bir kontrol listesi hazırlamadan önce belirlenebileceği anlamına gelir. belirli bir parçayı seçmek için bir uygulama kodu ve mevcut parçalar öğrenilene kadar bekleyin.
- Kısıtlamalar, oynatma listesindeki tüm medya öğelerine uygulanır.
öğe için kullanabileceğiniz farklı parçalar var. Örneğin, tercih edilen ses dili
kısıtlama tüm medya öğelerine otomatik olarak uygulanır.
Parçanın bu dildeki
Format
kadarı medya öğeleri arasında değişiklik gösterir. Aşağıda açıklandığı gibi, belirli parçalar seçilirken bu durum geçerli değildir.
Belirli parçaları seçme
TrackSelectionParameters
kullanarak belirli parçaları seçebilirsiniz. İlk olarak,
Oynatıcının şu anda kullanılabilir olan parçaları
Player.getCurrentTracks
İkinci olarak, hangi parçaları seçeceğinize karar
onlar, TrackSelectionParameters
üzerinde TrackSelectionOverride
kullanılarak ayarlanabilir.
Örneğin, belirli bir audioTrackGroup
içindeki ilk parçayı seçmek için:
Kotlin
player.trackSelectionParameters = player.trackSelectionParameters .buildUpon() .setOverrideForType( TrackSelectionOverride(audioTrackGroup.mediaTrackGroup, /* trackIndex= */ 0) ) .build()
Java
player.setTrackSelectionParameters( player .getTrackSelectionParameters() .buildUpon() .setOverrideForType( new TrackSelectionOverride( audioTrackGroup.getMediaTrackGroup(), /* trackIndex= */ 0)) .build());
TrackSelectionOverride
, yalnızca
Geçersiz kılmada belirtilenle tam olarak eşleşen TrackGroup
. Dolayısıyla
sonraki medya öğesi için geçersiz kılma geçerli olmayabilir.
oluşturabilirsiniz.
İzleme türlerini veya gruplarını devre dışı bırakma
Video, ses veya metin gibi parça türleri,
TrackSelectionParameters.Builder.setTrackTypeDisabled
Devre dışı bırakılmış parça türü
tüm medya öğeleri için devre dışı bırakılır:
Kotlin
player.trackSelectionParameters = player.trackSelectionParameters .buildUpon() .setTrackTypeDisabled(C.TRACK_TYPE_VIDEO, /* disabled= */ true) .build()
Java
player.setTrackSelectionParameters( player .getTrackSelectionParameters() .buildUpon() .setTrackTypeDisabled(C.TRACK_TYPE_VIDEO, /* disabled= */ true) .build());
Alternatif olarak, parçaların belirli bir listeden seçilmesini
TrackGroup
:
Kotlin
player.trackSelectionParameters = player.trackSelectionParameters .buildUpon() .addOverride( TrackSelectionOverride(disabledTrackGroup.mediaTrackGroup, /* trackIndices= */ listOf()) ) .build()
Java
player.setTrackSelectionParameters( player .getTrackSelectionParameters() .buildUpon() .addOverride( new TrackSelectionOverride( disabledTrackGroup.getMediaTrackGroup(), /* trackIndices= */ ImmutableList.of())) .build());
Kanal seçiciyi özelleştirme
Kanal seçimi, TrackSelector
adlı bir örneğin sorumluluğundadır
Bunlar, ExoPlayer
oluşturulduğunda ve daha sonra elde edildiğinde sağlanabilir.
ExoPlayer.getTrackSelector()
ile.
Kotlin
val trackSelector = DefaultTrackSelector(context) val player = ExoPlayer.Builder(context).setTrackSelector(trackSelector).build()
Java
DefaultTrackSelector trackSelector = new DefaultTrackSelector(context); ExoPlayer player = new ExoPlayer.Builder(context).setTrackSelector(trackSelector).build();
DefaultTrackSelector
, çoğu kullanıma uygun esnek bir TrackSelector
durumlarda işe yarar. Player
içinde ayarlanan TrackSelectionParameters
kullanılır, ancak aynı zamanda
Veri Merkezi bölümünde belirtilebilecek bazı gelişmiş özelleştirme seçenekleri sunar.
DefaultTrackSelector.ParametersBuilder
:
Kotlin
trackSelector.setParameters( trackSelector.buildUponParameters().setAllowVideoMixedMimeTypeAdaptiveness(true)) )
Java
trackSelector.setParameters( trackSelector.buildUponParameters().setAllowVideoMixedMimeTypeAdaptiveness(true));
Tünel
Tünelsiz oynatmayı etkinleştirebilirsiniz. Örneğin, oluşturucu ve
seçili parçalar bunu destekliyor. Bunu yapmak için,
DefaultTrackSelector.ParametersBuilder.setTunnelingEnabled(true)
Ses Aktarımı
Şu gibi durumlarda yüklenmemiş ses çalmayı etkinleştirebilirsiniz:
oluşturucuları ve seçili parçalar bunu destekler. Bunu yapmak için,
TrackSelectionParameters
cihazınızdaki AudioOffloadModePreferences
.
Kotlin
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()
Java
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()); );