Başlangıç

ExoPlayer kullanmaya 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. Oynatıcıyı MediaItem ile oynatılmaya hazır hale getirin.
  5. İşiniz bittiğinde oynatıcıyı bırakın.

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

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

Uygulamanızda ExoPlayer'ı kullanmak için gerekli modülleri ekleyin ve Java 8 desteğini etkinleştirin.

ExoPlayer modülleri ekleme

AndroidX Media3'ü kullanmaya başlamanın en kolay yolu, uygulama modülünüzün build.gradle dosyasına ihtiyacınız olan kitaplıklarla ilgili Gradle bağımlılıklarını 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.1")
implementation("androidx.media3:media3-exoplayer-dash:1.11.1")
implementation("androidx.media3:media3-ui:1.11.1")
implementation("androidx.media3:media3-ui-compose-material3:1.11.1")

Modern

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

Burada 1.11.1, tercih ettiğiniz sürümdür (en yeni sürümü sürüm notlarından öğrenebilirsiniz). 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 mevcuttur, diğerlerinin ise manuel olarak oluşturulması gerekir. Ayrıntılar için kitaplıklar dizinine göz atın ve 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. Bunun için android bölümüne aşağıdakileri ekleyin:

compileOptions {
  targetCompatibility JavaVersion.VERSION_1_8
}

Oynatıcıyı oluşturma

ExoPlayer.Builder kullanarak ExoPlayer örneği oluşturabilirsiniz. Bu örnek, çeşitli özelleştirme seçenekleri sunar. 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();

Mesaj dizileriyle ilgili bir not

ExoPlayer örneklerine tek bir uygulama iş parçacığından erişilmelidir. Çoğu durumda bu, uygulamanın ana iş parçacığı 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ın kullanılması gerekir.

ExoPlayer örneğine erişilmesi gereken iş parçacığı, oynatıcı oluşturulurken bir Looper iletilerek açıkça belirtilebilir. Looper belirtilmezse oynatıcının oluşturulduğu iş parçacığının Looper değeri kullanılır. Bu iş parçacığının Looper değeri yoksa uygulamanın ana iş parçacığının Looper değeri kullanılır. Her durumda, oyuncuya erişilmesi gereken ileti dizisinin 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 önceden oluşturulmuş çeşitli kullanıcı arayüzü bileşenleri sunar. Bunlar arasında, videonun oluşturulduğu bir PlayerControlView, SubtitleView ve Surface öğelerini kapsayan PlayerView yer alır. Uygulamanızın düzen XML'sine bir PlayerView eklenebilir. Ö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ı için hedef SurfaceView, TextureView, SurfaceHolder veya Surface, Player'ın sırasıyla 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 kodu çözülmüş resimleri almak için kullanılabilir.

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

android:keepScreenOn="true"

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

// 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 listesi dolduruluyor ve oynatıcı hazırlanıyor

ExoPlayer'da her medya parçası bir MediaItem ile temsil edilir. Bir medya öğesini oynatmak için ilgili MediaItem öğesini oluşturmanız, oynatıcıya eklemeniz, oynatıcıyı hazırlamanız ve oynatmayı başlatmak için play yöntemini ç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, oynatıcıyı tekrar hazırlamaya gerek kalmadan oynatma sırasında güncellenebilir. Oynatma listesini doldurma ve değiştirme hakkında daha fazla bilgiyi Oynatma listeleri sayfasında bulabilirsiniz. Medya öğeleri sayfasında, medya öğeleri oluştururken kullanabileceğiniz farklı seçenekler (ör. kırpma ve altyazı dosyaları ekleme) hakkında daha fazla bilgi edinin.

Oynatıcıyı kontrol etme

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

  • play ve pause, oynatmayı başlatır ve duraklatır.
  • seekTo, medyada ileri/geri sarmaya olanak tanır.
  • hasPrevious, hasNext, previous ve next, oynatma listesinde gezinmenizi sağlar.
  • setRepeatMode, medyanın döngüye alınıp alınmayacağını ve nasıl alınacağını kontrol eder.
  • setShuffleModeEnabled, oynatma listesini karışık çalmayı kontrol eder.
  • setPlaybackParameters, oynatma hızını ve ses perdesini ayarlar.
  • setScrubbingModeEnabled, kullanıcı bir kaydırma çubuğunu sürüklerken oynatıcıyı sık arama için optimize eder. Ayrıntılı bilgi için İleri geri oynatma modu başlıklı makaleyi inceleyin.

Oynatıcı bir PlayerView veya PlayerControlView öğesine bağlıysa kullanıcının bu bileşenlerle etkileşimi, oynatıcıda ilgili yöntemlerin çağrılmasına neden olur.

Oyuncuyu serbest bırakın

Artık ihtiyaç duyulmadığında oynatıcıyı serbest bırakmak önemlidir. Böylece, video kod çözücüler gibi sınırlı kaynaklar diğer uygulamalar tarafından kullanılmak üzere serbest bırakılır. Bunu yapmak için ExoPlayer.release yöntemini çağırabilirsiniz.