Başlangıç

Basit kullanım alanlarında ExoPlayer ile çalışmaya başlamak için aşağıdaki adımları uygulamanız gerekir:

  1. ExoPlayer'ı projenize bağımlılık olarak ekleyin.
  2. ExoPlayer örneği oluşturun.
  3. Oynatıcıyı bir görünüme ekleyin (video çıkışı ve kullanıcı girişi için).
  4. Oyuncuyu MediaItem ile oynamaya hazırlayın.
  5. İşiniz bittiğinde oynatıcıyı bırakın.

Bu adımlar aşağıda daha ayrıntılı olarak açıklanmıştır. Tam bir örnek için ana demo uygulamasındaki PlayerActivity bölümüne bakın.

ExoPlayer'ı bağımlılık olarak ekleme

ExoPlayer modülleri ekleme

AndroidX Media3'ü kullanmaya başlamanın en kolay yolu, uygulamanızın build.gradle dosyasında ihtiyacınız olan kitaplıklara gradle bağımlılıkları eklemektir.

Örneğin, DASH oynatma desteği ve kullanıcı arayüzü bileşenleri içeren ExoPlayer'a bağımlı olmak için modüllere aşağıdaki gibi bağımlılıklar ekleyebilirsiniz:

Kotlin

implementation("androidx.media3:media3-exoplayer:1.11.0")
implementation("androidx.media3:media3-exoplayer-dash:1.11.0")
implementation("androidx.media3:media3-ui:1.11.0")
implementation("androidx.media3:media3-ui-compose-material3:1.11.0")

Modern

implementation "androidx.media3:media3-exoplayer:1.11.0"
implementation "androidx.media3:media3-exoplayer-dash:1.11.0"
implementation "androidx.media3:media3-ui:1.11.0"
implementation("androidx.media3:media3-ui-compose-material3:1.11.0")

Burada 1.11.0, tercih ettiğiniz sürümdür (en son sürümü sürüm notlarına bakarak bulabilirsiniz). Tüm modüller aynı sürümde olmalıdır.

AndroidX Media3, ek işlevler sağlamak için harici kitaplıklara bağlı kitaplık modüllerine sahiptir. Bazıları Maven deposunda bulunurken diğerlerinin manuel olarak oluşturulması gerekir. Kitaplık dizinine göz atın ve ayrıntılar için her bir README dosyasını inceleyin.

Kullanılabilen kitaplık modülleri hakkında daha fazla bilgiyi Google Maven AndroidX Media sayfasında bulabilirsiniz.

Java 8 desteğini etkinleştirme

Henüz etkinleştirilmediyse ExoPlayer'a bağlı tüm build.gradle dosyalarında en az Java 8 desteğini etkinleştirmeniz gerekir. Bunu yapmak için android bölümüne aşağıdakileri ekleyin:

compileOptions {
  targetCompatibility JavaVersion.VERSION_1_8
}

Oynatıcıyı oluşturma

Çeşitli özelleştirme seçenekleri sunan ExoPlayer.Builder kullanarak bir ExoPlayer örneği oluşturabilirsiniz. Aşağıdaki kod, örnek oluşturmanın en basit örneğidir.

Kotlin

val player = ExoPlayer.Builder(context).build()

Java

ExoPlayer player = new ExoPlayer.Builder(context).build();

İş parçacığı oluşturma hakkında not

ExoPlayer örneklerine tek bir uygulama iş parçacığından erişilmelidir. Çok büyük bir çoğunlukta bu, uygulamanın ana ileti dizisi olmalıdır. ExoPlayer'ın kullanıcı arayüzü bileşenlerini veya IMA uzantısını kullanırken uygulamanın ana iş parçacığını kullanmanız gerekir.

Bir ExoPlayer örneğine erişilmesi gereken iş parçacığı, oynatıcı oluşturulurken Looper geçirilerek açıkça belirtilebilir. Looper belirtilmezse oynatıcının oluşturulduğu iş parçacığının Looper kullanılır. Bu iş parçacığında Looper yoksa uygulamanın ana iş parçacığının Looper kullanılır. Her durumda, oyuncuya erişilmesi gereken iş parçacığının Looper değeri Player.getApplicationLooper kullanılarak sorgulanabilir.

ExoPlayer'ın iş parçacığı modeli hakkında daha fazla bilgi için ExoPlayer Javadoc'un "İş parçacığı modeli" bölümüne bakın.

Oynatıcıyı bir görünüme ekleme

media3-ui kitaplığı, medya oynatma için çeşitli önceden oluşturulmuş kullanıcı arayüzü bileşenleri sağlar. Bunlar arasında, PlayerView, PlayerControlView, SubtitleView ve videonun oluşturulduğu Surface yer alır. PlayerView uygulamanızın düzen xml'sine dahil edilebilir. Örneğin, oynatıcıyı görünüme bağlamak için:

Kotlin

// Bind the player to the view.
playerView.player = player

Java

// Bind the player to the view.
playerView.setPlayer(player);

Media3'ün önceden oluşturulmuş kullanıcı arayüzü bileşenlerinin kullanımı isteğe bağlıdır. Kendi kullanıcı arayüzünü uygulayan video uygulamalarında hedef SurfaceView, TextureView, SurfaceHolder veya Surface sırasıyla Player'ın setVideoSurfaceView, setVideoTextureView, setVideoSurfaceHolder ve setVideoSurface yöntemleri kullanılarak ayarlanabilir. Listener.onCues geri çağırma işlevi, oynatma sırasında oluşturulması gereken altyazıları almak için, setImageOutput ise kod çözümü yapılmış resimleri almak için kullanılabilir.

Daha rahat bir kullanıcı deneyimi için keepScreenOn özelliğini eklemeyi düşünebilirsiniz. Cihazın uyanık kalmasına neden olan diğer işlemleri arka plan çalışması sayfalarında inceleyebilirsiniz.

android:keepScreenOn="true"

Uygulamanızın kullanıcı arayüzünde Jetpack Compose kullanılıyorsa Player kitaplığındaki media3-ui-compose-material3 composable'ı kullanabilirsiniz. Player, videoyu gösterir ve oynatma kontrolü yuvaları için önceden doldurulmuş değerler içerir. Bir androidx.media3.common.Player nesnesini bir androidx.media3.common.Player Composable'a eklemek için bunu bağımsız değişken olarak iletmeniz yeterlidir:androidx.media3.ui.compose.material3.Player

// Bind the player to the composable.
Player(player = player)

Media3 kullanıcı arayüzü bileşenlerini kullanma ve özelleştirme hakkında daha fazla bilgiyi Kullanıcı Arayüzü sayfasında bulabilirsiniz.

Oynatma listesini doldurma ve oynatıcıyı hazırlama

ExoPlayer'da her medya parçası bir MediaItem ile temsil edilir. Bir medya öğesini oynatmak için karşılık gelen bir MediaItem oluşturmanız, bunu oynatıcıya eklemeniz, oynatıcıyı hazırlamanız ve oynatmayı başlatmak için play işlevini çağırmanız gerekir:

Kotlin

// Build the media item.
val mediaItem = MediaItem.fromUri(videoUri)
// Set the media item to be played.
player.setMediaItem(mediaItem)
// Prepare the player.
player.prepare()
// Start the playback.
player.play()

Java

// Build the media item.
MediaItem mediaItem = MediaItem.fromUri(videoUri);
// Set the media item to be played.
player.setMediaItem(mediaItem);
// Prepare the player.
player.prepare();
// Start the playback.
player.play();

ExoPlayer, oynatma listelerini doğrudan destekler. Bu nedenle, oynatıcıyı art arda oynatılacak birden fazla medya öğesiyle hazırlamak mümkündür:

Kotlin

// Build the media items.
val firstItem = MediaItem.fromUri(firstVideoUri)
val secondItem = MediaItem.fromUri(secondVideoUri)
// Add the media items to be played.
player.addMediaItem(firstItem)
player.addMediaItem(secondItem)
// Prepare the player.
player.prepare()
// Start the playback.
player.play()

Java

// Build the media items.
MediaItem firstItem = MediaItem.fromUri(firstVideoUri);
MediaItem secondItem = MediaItem.fromUri(secondVideoUri);
// Add the media items to be played.
player.addMediaItem(firstItem);
player.addMediaItem(secondItem);
// Prepare the player.
player.prepare();
// Start the playback.
player.play();

Oynatma listesi, oynatma sırasında güncellenebilir. Oynatıcının tekrar hazırlanması gerekmez. Oynatma listesini doldurma ve oynatma listesiyle ilgili işlemler hakkında daha fazla bilgiyi Oynatma listeleri sayfasında bulabilirsiniz. Medya öğeleri sayfasında, medya öğeleri oluştururken kullanılabilen farklı seçenekler (ör. kırpma ve altyazı dosyası ekleme) hakkında daha fazla bilgi edinin.

Oynatıcıyı kontrol etme

Oynatıcı hazırlandıktan sonra, oynatıcıdaki yöntemler çağrılarak oynatma kontrol edilebilir. En yaygın kullanılan yöntemlerden bazıları şunlardır:

  • play ve pause ile oynatmayı başlatıp duraklatabilirsiniz.
  • seekTo, medyada arama yapmaya olanak tanır.
  • hasPrevious, hasNext, previous ve next, oynatma listesinde gezinmeye olanak tanır.
  • setRepeatMode, medyanın döngüye alınıp alınmayacağını ve nasıl döngüye alınacağını kontrol eder.
  • setShuffleModeEnabled, oynatma listesinde karıştırma işlemini kontrol eder.
  • setPlaybackParameters oynatma hızını ve ses tonunu ayarlar.

Oynatıcı bir PlayerView veya PlayerControlView öğesine bağlıysa kullanıcı bu bileşenlerle etkileşime girdiğinde oynatıcıda ilgili yöntemler çağrılır.

Oyuncuyu serbest bırakma

Video kod çözücüler gibi sınırlı kaynakların diğer uygulamalar tarafından kullanılabilmesi için oynatıcıyı artık gerekmediğinde serbest bırakmak önemlidir. Bu işlem, ExoPlayer.release numarası aranarak yapılabilir.