Jetpack Media3, temel işlevselliği özetleyen bir Player
arayüzünü tanımlar
video ve ses dosyalarını oynatmak için kullanılır. ExoPlayer
, varsayılan uygulamadır
ilişkin talimatları uygulayın. ExoPlayer'ı kullanmanızı öneririz, çünkü bu uygulama
çoğu oynatma durumunu kapsayan
kapsamlı bir özellik grubudur.
durumlar için özelleştirilebilir. ExoPlayer ayrıca
cihaz ve işletim sistemi bölünmesini soyutlayarak kodunuzun tutarlı bir şekilde çalışmasını sağlar
dönüşüm hunisinin her yerinde
gerçekleşiyor. ExoPlayer şunları içerir:
- Oynatma listeleri için destek
- Çeşitli progresif ve uyarlanabilir akış seçenekleri için destek biçimler
- Hem istemci tarafı hem de sunucu tarafı reklam ekleme desteği
- DRM korumalı oynatma desteği
Bu sayfa, bir oynatma listesi oluşturmanın bazı önemli adımlarında size yol gösterir daha fazla bilgi için bkz. Media3 ExoPlayer.
Başlarken
Başlamak için ExoPlayer, UI ve Genel modüllerine bağımlılık ekleyin. Jetpack Media3:
implementation "androidx.media3:media3-exoplayer:1.4.1" implementation "androidx.media3:media3-ui:1.4.1" implementation "androidx.media3:media3-common:1.4.1"
Kullanım alanınıza bağlı olarak Media3'ten ek modüllere de ihtiyaç duyabilirsiniz.
Örneğin, akışları DASH biçiminde oynatmak için exoplayer-dash
.
1.4.1
yerine
kitaplığını açar. Sürüm notlarına
en son sürümü görebilirsiniz.
Medya oynatıcı oluşturma
Media3 ile, dahil edilen Player
uygulamasını kullanabilirsiniz
arayüzünü, ExoPlayer
veya kendi özel uygulamanızı oluşturabilirsiniz.
ExoPlayer Oluşturma
ExoPlayer
örneği oluşturmanın en basit yolu şu şekildedir:
Kotlin
val player = ExoPlayer.Builder(context).build()
Java
ExoPlayer player = new ExoPlayer.Builder(context).build();
Medya oynatıcınızı şu öğenin onCreate()
yaşam döngüsü yönteminde oluşturabilirsiniz:
Bulunduğu yerde Activity
, Fragment
veya Service
.
Builder
şunları içerir:
ilginizi çekebilecek bir dizi özelleştirme seçeneği mevcuttur. Örneğin:
setAudioAttributes()
ses odağı işlemeyi yapılandırmak içinsetHandleAudioBecomingNoisy()
ses çıkış cihazı bağlantısı kesildiğinde oynatma davranışını yapılandırmak içinsetTrackSelector()
parça seçimini yapılandırmak için
Media3, uygulamanızın arayüzüne ekleyebileceğiniz bir PlayerView
kullanıcı arayüzü bileşeni sağlar
düzen dosyası olabilir. Bu bileşen, oynatma için bir PlayerControlView
içerir
kontrolleri, altyazıları görüntülemek için SubtitleView
ve oluşturma için Surface
videosunu izleyin.
Oynatıcıyı hazırlama
Şunun için oynatma listesine medya öğeleri ekleyin:
çeşitli yöntemlerle
setMediaItem()
ve addMediaItem()
.
Ardından, prepare()
numaralı telefonu arayarak
medya yüklemeye ve gerekli kaynakları edinmeye başlayın.
Uygulama ön planda olmadan bu adımları uygulamamalısınız. Eğer
Activity
veya Fragment
içindedir. Bu, oyuncuyu
API düzeyi 24 ve üstü veya onResume()
üzerinde onStart()
yaşam döngüsü yöntemi
yaşam döngüsü yöntemini uygulayın. Service
içinde yer alan bir oyuncu için
bunu onCreate()
ile hazırlayabilirsiniz.
Oynatıcıyı kontrol etme
Oynatıcı hazırlandıktan sonra çağrı yöntemleriyle oynatmayı kontrol edebilirsiniz. örneğin:
play()
vepause()
çalmayı başlatmak ve duraklatmak içinseekTo()
: geçerli medya öğesinin içindeki bir konumaseekToNextMediaItem()
veseekToPreviousMediaItem()
oynatma listesinde gezinmek için
PlayerView
veya PlayerControlView
gibi kullanıcı arayüzü bileşenleri güncellenir
her zaman uygun olması gerekir.
Oynatıcıyı serbest bırakın
Oynatma için video gibi sınırlı kaynaklar gerekebilir.
kod çözücüler olduğu için release()
artık ihtiyacınız kalmadığında kaynakları serbest bırakmak için oynatıcınıza.
Oynatıcınız bir Activity
veya Fragment
içindeyse oynatıcıyı
API düzeyi 24 ve üstü veya onPause()
üzerinde onStop()
yaşam döngüsü yöntemi
yöntemini çağırın. Service
içindeki bir oyuncu için şunları yapabilirsiniz:
onDestroy()
yılında yayınlayacağım.
Medya oturumuyla oynatmayı yönetme
Android'de medya oturumları, medyayla etkileşimde bulunmak için standart bir yol sunar. oyuncuları bu teste tabi tutmak isteyebilirsiniz. Oynatıcınıza medya oturumu bağlama medya oynatma işlemlerinizin reklamını harici olarak ve oynatma alma gibi işlemler için yapmanıza olanak tanır. harici kaynaklardan gelen komutlar (örneğin, Mobil cihazlarda ve büyük ölçekte sistem medya denetimleri cihazları ayırın.
Medya oturumlarını kullanmak için Media3 Oturumu modülüne bir bağımlılık ekleyin:
implementation "androidx.media3:media3-session:1.4.1"
Medya oturumu oluşturma
Oynatıcıyı başlattıktan sonra aşağıdaki şekilde MediaSession
oluşturabilirsiniz:
Kotlin
val player = ExoPlayer.Builder(context).build() val mediaSession = MediaSession.Builder(context, player).build()
Java
ExoPlayer player = new ExoPlayer.Builder(context).build(); MediaSession mediaSession = new MediaSession.Builder(context, player).build();
Media3, Player
öğesinin durumunu
MediaSession
. Aşağıdakiler dahil tüm Player
uygulamalarında çalışır:
ExoPlayer
, CastPlayer
veya bir
yardımcı olur.
Diğer istemcilere denetim izni ver
İstemci uygulamaları, bir medya denetleyicisi uygulayabilir.
medya oturumunuzun oynatılmasını kontrol etmek için. Bu istekleri almak için bir
callback nesnesi
MediaSession
oluşturun.
Bir kumanda medya oturumunuza bağlanmak üzereyken
onConnect()
yöntemi çağrılır. Sunulan ControllerInfo
kullanılabilir.
karar vermek için kabul etme
veya reddet
talep ediyor. Media3 Oturumu demo uygulamasında bunun bir örneğini görebilirsiniz.
Bağlandıktan sonra kumanda, oturuma oynatma komutları gönderebilir. İlgili içeriği oluşturmak için kullanılan
ardından bu komutları oyuncuya aktarır. Oynatma ve oynatma listesi
Player
arayüzünde tanımlanan komutlar, Search Ads 360'ta otomatik olarak
kabul edilir.
Diğer geri çağırma yöntemleri, örneğin
özel oynatma komutları
ve oynatma listesinde değişiklik yapmak. Bu geri çağırmalar benzer şekilde bir ControllerInfo
nesnesi içerir. Böylece
istek bazında belirleyebilirsiniz.
Arka planda medya oynatma
Örneğin, uygulamanız ön planda değilken medya oynatmaya devam etmek için
Kullanıcı uygulamanızın yanında olmasa bile müzik, sesli kitap veya podcast çalmak için
açık, Player
ve MediaSession
bir
ön plan hizmeti sunar. Medya3
MediaSessionService
arayüzünü kullanmanızı öneririz.
MediaSessionService
uygulama
MediaSessionService
uzantısını genişleten bir sınıf oluşturun ve
onCreate()
yaşam döngüsü yönteminde MediaSession
.
Kotlin
class PlaybackService : MediaSessionService() { private var mediaSession: MediaSession? = null // Create your Player and MediaSession in the onCreate lifecycle event override fun onCreate() { super.onCreate() val player = ExoPlayer.Builder(this).build() mediaSession = MediaSession.Builder(this, player).build() } // Remember to release the player and media session in onDestroy override fun onDestroy() { mediaSession?.run { player.release() release() mediaSession = null } super.onDestroy() } }
Java
public class PlaybackService extends MediaSessionService { private MediaSession mediaSession = null; @Override public void onCreate() { super.onCreate(); ExoPlayer player = new ExoPlayer.Builder(this).build(); mediaSession = new MediaSession.Builder(this, player).build(); } @Override public void onDestroy() { mediaSession.getPlayer().release(); mediaSession.release(); mediaSession = null; super.onDestroy(); } }
Manifest'inizde, MediaSessionService
amacı taşıyan Service
sınıfınız
filtrele ve ön plan çalıştırmak için FOREGROUND_SERVICE
izni iste
hizmet:
<service
android:name=".PlaybackService"
android:foregroundServiceType="mediaPlayback"
android:exported="true">
<intent-filter>
<action android:name="androidx.media3.session.MediaSessionService"/>
</intent-filter>
</service>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
Son olarak, oluşturduğunuz sınıfta kontrol etmek için onGetSession()
yöntemini geçersiz kılın.
medya oturumunuza istemci erişimi. Şu şartları kabul etmek için MediaSession
iade edin:
bağlantı isteğini gönderin veya isteği reddetmek için null
değerini döndürün.
Kotlin
// This example always accepts the connection request override fun onGetSession( controllerInfo: MediaSession.ControllerInfo ): MediaSession? = mediaSession
Java
@Override public MediaSession onGetSession(MediaSession.ControllerInfo controllerInfo) { // This example always accepts the connection request return mediaSession; }
Kullanıcı arayüzünüze bağlanılıyor
Medya oturumunuz artık Activity
veyaService
Oynatıcı kullanıcı arayüzünüzün bulunduğu Fragment
ise bağlantı kurmak için MediaController
kullanabilirsiniz
oluşturmaktır. Activity
veya Fragment
hesabının onStart()
yönteminde
Kullanıcı arayüzü, MediaSession
için bir SessionToken
oluşturun, ardından SessionToken
kullanın
MediaController
oluşturmak için
kullanın. Bir MediaController
oluşturulur
eşzamansız olarak ayarlayabilirsiniz.
Kotlin
override fun onStart() { val sessionToken = SessionToken(this, ComponentName(this, PlaybackService::class.java)) val controllerFuture = MediaController.Builder(this, sessionToken).buildAsync() controllerFuture.addListener( { // Call controllerFuture.get() to retrieve the MediaController. // MediaController implements the Player interface, so it can be // attached to the PlayerView UI component. playerView.setPlayer(controllerFuture.get()) }, MoreExecutors.directExecutor() ) }
Java
@Override public void onStart() { SessionToken sessionToken = new SessionToken(this, new ComponentName(this, PlaybackService.class)); ListenableFuture<MediaController> controllerFuture = new MediaController.Builder(this, sessionToken).buildAsync(); controllerFuture.addListener(() -> { // Call controllerFuture.get() to retrieve the MediaController. // MediaController implements the Player interface, so it can be // attached to the PlayerView UI component. playerView.setPlayer(controllerFuture.get()); }, MoreExecutors.directExecutor()) }
MediaController
, Player
arayüzünü uyguladığından aynı
oynatmayı kontrol etmek için play()
ve pause()
gibi yöntemleri kullanın. Diğerlerine benzer
aşağıdaki kod parçasını kaldırdıktan sonra MediaController
öğesini yayınlamayı unutmayın:
(ör. Activity
için onStop()
yaşam döngüsü yöntemi)
MediaController.releaseFuture()
.
Bildirim yayınlama
Etkin durumdayken bildirim yayınlamak için ön plan hizmetleri gereklidir. CEVAP
MediaSessionService
, otomatik olarak bir
Şunun için MediaStyle
bildirim:
MediaNotification
biçiminde alırsınız.
Özel bir bildirim sağlamak için
MediaNotification.Provider
DefaultMediaNotificationProvider.Builder
ile
veya sağlayıcı arayüzünün özel bir uygulamasını oluşturarak.
MediaSession
ile bağlantı kurarak
setMediaNotificationProvider
İçerik kitaplığınızı tanıtma
MediaLibraryService
, istemcinin izin verdiği MediaSessionService
üzerinde çalışır
uygulamalar (uygulamanız tarafından sağlanan medya içeriğine göz atmak için) İstemci uygulamaları
Etkileşimde bulunmak için MediaBrowser
MediaLibraryService
cihazınızla.
MediaLibraryService
uygulamak,
MediaSessionService
, ancak onGetSession()
içinde
MediaSession
yerine MediaLibrarySession
. Şuna kıyasla:
MediaSession.Callback
, MediaLibrarySession.Callback
ek bilgiler içerir
tarayıcı istemcisinin web sitenizde sunulan içerikte gezinmesine olanak tanıyan
yardımcı oluyorum.
MediaSessionService
benzer şekilde, MediaLibraryService
öğesini
manifest dosyasını açın ve ön plan çalıştırmak için FOREGROUND_SERVICE
iznini isteyin
hizmet:
<service
android:name=".PlaybackService"
android:foregroundServiceType="mediaPlayback"
android:exported="true">
<intent-filter>
<action android:name="androidx.media3.session.MediaLibraryService"/>
<action android:name="android.media.browse.MediaBrowserService"/>
</intent-filter>
</service>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
Yukarıdaki örnekte hem MediaLibraryService
için bir intent filtresi bulunmaktadır.
ve geriye dönük uyumluluk için eski MediaBrowserService
. İlgili içeriği oluşturmak için kullanılan
ek amaç filtresi, MediaBrowserCompat
API'yi kullanan istemci uygulamalarını etkinleştirir
Service
cihazınızı tanımak için.
MediaLibrarySession
, içerik kitaplığınızı ağaçta sunmanızı sağlar
yapısında, tek bir kök MediaItem
bulunur. Ağaçtaki her MediaItem
şuna sahip olabilir:
için istediğiniz sayıda alt MediaItem
düğümü oluşturabilirsiniz. Farklı bir kök veya
farklı bir ağaç ekleyebilirsiniz. Örneğin, ziyaret ettiğiniz ağaç
önerilen medya öğelerinin listesini arayan bir müşteriye yalnızca
kök MediaItem
ve tek düzeyde alt MediaItem
düğümünü içermelidir.
Bu durumda farklı bir istemci uygulamasına döndüğünüz ağaç,
tamamını da kullanabilirsiniz.
MediaLibrarySession
oluşturuluyor
MediaLibrarySession
MediaSession
API'yi genişleterek içeriğe göz atma API'leri ekler. Şuna kıyasla:
MediaSession
geri arama,
MediaLibrarySession
geri arama
aşağıdaki gibi yöntemler ekler:
onGetLibraryRoot()
(müşteri içerik ağacının kökMediaItem
'sini istediğinde kullanılır)onGetChildren()
istemci, içerik ağacındaki birMediaItem
öğesinin alt öğelerini istediğindeonGetSearchResult()
belirli bir sorgu için içerik ağacından arama sonuçları istediğinde sorgu
İlgili geri çağırma yöntemleri bir LibraryParams
içerir
istemci uygulamasının topladığı içerik ağacı türüyle ilgili ek sinyaller içeren nesne
yardımcı olur.