Oynatıcı, uygulamanızda medya öğelerinin oynatılmasını kolaylaştıran bileşendir.
Media3 Player
arayüzü, genellikle bir oynatıcı tarafından işlenen işlevler için bir ana hat oluşturur. Buna aşağıdakiler dahildir:
- Oynatma, duraklatma ve sarma gibi oynatma kontrollerini etkileme
- O anda oynatılan medyanın oynatma konumu gibi özelliklerini sorgulama
- Medya öğelerinden oluşan bir oynatma listesini/sırayı yönetme
- Karıştırma, tekrarlama, hız ve ses düzeyi gibi oynatma özelliklerini yapılandırma
- Videoyu ekrana oluşturma
Media3, Player
arayüzünün ExoPlayer
adlı bir uygulamasını da sağlar.
Bileşenler arasında ortak bir arayüz
Media3'teki çeşitli bileşenler Player arayüzünü uygular. Örneğin:
Bileşen | Açıklama ve davranış notları |
---|---|
ExoPlayer |
Bir medya oynatıcı API'si ve Player arayüzünün varsayılan uygulaması. |
MediaController |
Oynatma komutları göndermek için MediaSession ile etkileşim kurar. Player ve MediaSession 'unuz, oyuncunuzun kullanıcı arayüzünün bulunduğu Activity veya Fragment 'ten ayrı bir Service 'deyse MediaController 'inizi PlayerView kullanıcı arayüzünüzün oyuncusu olarak atayabilirsiniz. Oynatma ve oynatma listesi yöntemi çağrıları, MediaSession üzerinden Player 'ünüze gönderilir.
|
MediaBrowser |
MediaController tarafından sunulan işlevlere ek olarak, mevcut medya içeriğine göz atmak için MediaLibrarySession ile etkileşim kurar.
|
ForwardingPlayer |
Yöntem çağrılarını başka bir Player 'e yönlendiren bir Player uygulaması. İlgili yöntemleri geçersiz kılarak belirli işlemleri engellemek veya değiştirmek için bu sınıfı kullanın.
|
SimpleBasePlayer |
Uygulanacak yöntem sayısını en aza indiren bir Player uygulaması. Bir MediaSession cihazına bağlamak istediğiniz özel oynatıcı kullanırken faydalıdır.
|
CastPlayer |
Cast alıcı uygulamasıyla iletişim kuran bir Player uygulaması. Davranış, temel Cast oturumuna bağlıdır.
|
MediaSession
, Player
arayüzünü uygulamasa da oluşturulurken bir Player
gerektirir. Amacının, diğer işlemlerden veya iş parçalarından Player
'e erişim sağlamak olduğunu belirtmek isteriz.
Media3 oynatma mimarisi
Bir Player
'e erişiminiz varsa oynatma komutları vermek için doğrudan yöntemlerini çağırmanız gerekir. MediaSession
uygulayarak oynatma işleminizin reklamını yapabilir ve harici kaynaklara oynatma kontrolü verebilirsiniz. Bu harici kaynaklar, medya oturumuna bağlanmayı ve oynatma komutu isteklerini göndermeyi kolaylaştıran bir MediaController
uygular.
Arka planda medya oynatırken medya oturumunuzu ve oynatıcınızı ön plan hizmeti olarak çalışan bir MediaSessionService
veya MediaLibraryService
içinde barındırmanız gerekir. Bunu yaparsanız oynatıcınızı, oynatma kontrolü için kullanıcı arayüzünü içeren uygulamanızdaki Etkinlik'ten ayırabilirsiniz. Bu durumda bir medya kumandası kullanmanız gerekebilir.
Oynatıcı durumu
Player
arayüzünü uygulayan bir medya oynatıcının durumu temel olarak 4 bilgi kategorisinden oluşur:
- Oynatma durumu
getPlaybackState()
ile alın.- Arayüz tarafından tanımlanan durum değeri
STATE_IDLE
,STATE_BUFFERING
,STATE_READY
veSTATE_ENDED
şeklindedir.
- Medya öğelerinin oynatma listesi
- Oynatma için
MediaItem
örneği dizisi. getCurrentTimeline()
ile almaPlayer
örnekleri,MediaItem
ekleme veya kaldırma gibi oynatma listesi işlem yöntemleri vegetCurrentMediaItem()
gibi kolaylık yöntemleri sağlayabilir.
- Oynatma için
- Oynatma/duraklatma özellikleri (ör. şu emojiler):
playWhenReady
: Kullanıcının medyanın mümkün olduğunda oynatılmasını mı yoksa duraklatılmış kalmasını mı istediğini gösteren bir gösterge- Oynatma engelleme nedeni:
playWhenReady
true
olsa bile oynatmanın neden engellendiğini belirten bir gösterge isPlaying
: Oynatıcının o anda oynatıp oynamadığını gösteren bir gösterge. Yalnızca oynatma durumuSTATE_READY
,playWhenReady
true
ve oynatma devre dışı bırakılmamışsatrue
değeri gösterilir.
- Aşağıdakiler dahil olmak üzere oynatma konumu:
- Mevcut medya öğesi dizini:
Oynatma listesindeki geçerli
MediaItem
öğesinin dizini. isPlayingAd
: Eklenen bir reklamın oynatılıp oynatılmadığını gösterir.- Mevcut oynatma konumu:
Mevcut
MediaItem
veya yerleştirilmiş reklamdaki mevcut oynatma konumu.
- Mevcut medya öğesi dizini:
Oynatma listesindeki geçerli
Ayrıca Player
arayüzü, mevcut parçalara, medya meta verilerine, oynatma hızına, ses seviyesine ve oynatmanın diğer yardımcı özelliklerine erişmenize olanak tanır.
Değişiklikleri dinleyin
Player
'daki değişiklikleri dinlemek için Player.Listener
kullanın. Dinleyici oluşturma ve kullanmayla ilgili ayrıntılar için ExoPlayer'ın Oynatıcı etkinlikleri ile ilgili belgelerini inceleyin.
İşleyici arayüzünün normal oynatma ilerlemesini izlemek için geri çağırma içermediğini unutmayın. Oynatma ilerlemesini sürekli olarak izlemek için (ör. ilerleme çubuğu kullanıcı arayüzü oluşturmak için) mevcut konumu uygun aralıklarla sorgulamanız gerekir.
Kotlin
val handler = Handler(Looper.getMainLooper()) fun checkPlaybackPosition(delayMs: Long): Boolean = handler.postDelayed( { val currentPosition = player.currentPosition // Update UI based on currentPosition checkPlaybackPosition(delayMs) }, delayMs)
Java
Handler handler = new Handler(Looper.getMainLooper()); boolean checkPlaybackPosition(long delayMs) { return handler.postDelayed(() -> { long currentPosition = player.getCurrentPosition(); // Update UI based on currentPosition checkPlaybackPosition(delayMs); }, delayMs); }
Oynatma seçeneklerini kontrol etme
Player
arayüzü, durumu değiştirmek ve oynatmayı kontrol etmek için birçok yol sunar:
play()
,pause()
,prepare()
vestop()
gibi temel oynatma kontrolleriaddMediaItem()
veyaremoveMediaItem()
gibi şarkı listesi işlemleri.- Mevcut öğeyi veya konumu değiştirmek için arama.
- Tekrarlama modlarını ve karıştırma modunu ayarlayın.
- Parça seçimi tercihlerini güncelleyin.
- Oynatma hızını ayarlayın.
Özel Player
uygulamaları
Özel bir oynatıcı oluşturmak için Media3'e dahil edilen SimpleBasePlayer
öğesini genişletebilirsiniz. Bu sınıf, uygulamanız gereken yöntem sayısını minimuma indirmek için Player
arabirimini temel bir şekilde uygular.
getState()
yöntemini geçersiz kılarak başlayın. Bu yöntem, çağrıldığında mevcut oyuncu durumunu doldurmalıdır. Şunlar dahildir:
- Kullanılabilir komutlar grubu
- Oynatma durumu
STATE_READY
olduğunda oynatıcının oynatmaya başlayıp başlamaması, oynatılan medya öğesinin dizini ve mevcut öğedeki oynatma konumu gibi oynatma özellikleri
Kotlin
class CustomPlayer : SimpleBasePlayer(looper) { override fun getState(): State { return State.Builder() .setAvailableCommands(...) // Set which playback commands the player can handle // Configure additional playback properties .setPlayWhenReady(true, PLAY_WHEN_READY_CHANGE_REASON_USER_REQUEST) .setCurrentMediaItemIndex(0) .setContentPositionMs(0) .build() } }
Java
public class CustomPlayer extends SimpleBasePlayer { public CustomPlayer(Looper looper) { super(looper); } @Override protected State getState() { return new State.Builder() .setAvailableCommands(...) // Set which playback commands the player can handle // Configure additional playback properties .setPlayWhenReady(true, PLAY_WHEN_READY_CHANGE_REASON_USER_REQUEST) .setCurrentMediaItemIndex(0) .setContentPositionMs(0) .build(); } }
SimpleBasePlayer
, State
öğesinin geçerli bir durum değerlerinin kombinasyonuyla oluşturulmasını zorunlu kılar. Aynı zamanda dinleyicileri ve durum
değişiklikleri konusunda dinleyicileri de bilgilendirecek. Durum güncellemesini manuel olarak tetiklemeniz gerekiyorsa invalidateState()
numaralı telefondan bizi arayın.
getState()
yönteminin ötesinde, yalnızca oynatıcınızın kullanılabilir olduğunu belirttiği komutlar için kullanılan yöntemleri uygulamanız gerekir. Uygulamak istediğiniz işleve karşılık gelen geçersiz kılınabilir işleyici yöntemini bulun. Örneğin, COMMAND_SEEK_IN_CURRENT_MEDIA_ITEM
ve COMMAND_SEEK_TO_NEXT_MEDIA_ITEM
gibi işlemleri desteklemek için handleSeek()
yöntemini geçersiz kılın.