Uygulamanıza oynatma kontrolleri ekleme

Medya oynatan bir uygulama, medyayı görüntülemek ve oynatmayı kontrol etmek için kullanıcı arayüzü bileşenleri gerektirir. Media3 kitaplığı, çeşitli kullanıcı arayüzü bileşenleri içeren bir kullanıcı arayüzü modülü içerir. Kullanıcı arayüzü modülüne bağımlı olmak için aşağıdaki bağımlılığı ekleyin:

Kotlin

implementation("androidx.media3:media3-ui:1.3.1")

Modern

implementation "androidx.media3:media3-ui:1.3.1"

En önemli bileşen, medya oynatmalarına yönelik görünüm olan PlayerView'tir. PlayerView, oynatma sırasında videoyu, altyazıları, albüm kapağını ve oynatma kontrollerini gösterir.

PlayerView, oynatıcı örneklerini eklemek ve ayırmak için (null atlayarak) setPlayer yöntemi kullanır.

Oynatıcı Görünümü

PlayerView hem video hem de ses oynatmaları için kullanılabilir. Video oynatılırken video ve altyazı oluşturur, ayrıca ses dosyalarına meta veri olarak eklenen posterleri gösterebilir. Bunu, diğer tüm kullanıcı arayüzü bileşenleri gibi düzen dosyalarınıza ekleyebilirsiniz. Örneğin, aşağıdaki XML ile bir PlayerView eklenebilir:

<androidx.media3.ui.PlayerView
    android:id="@+id/player_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:show_buffering="when_playing"
    app:show_shuffle_button="true"/>

Yukarıdaki snippet, PlayerView öğesinin birkaç özellik sağladığını göstermektedir. Bu özellikler, görünümün davranışının yanı sıra görünüm ve tarzını da özelleştirmek için kullanılabilir. Bu özelliklerin çoğunda, çalışma zamanında görünümü özelleştirmek için kullanılabilen karşılık gelen setter yöntemleri bulunur. PlayerView Javadoc'unda bu özellikler ve ayarlayıcı yöntemleri daha ayrıntılı bir şekilde listelenmektedir.

Görünüm, düzen dosyasında tanımlandıktan sonra etkinliğin onCreate yönteminde aranabilir:

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  // ...
  playerView = findViewById(R.id.player_view)
}

Java

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  // ...
  playerView = findViewById(R.id.player_view);
}

Bir oynatıcı başlatıldıktan sonra setPlayer çağrısı yapılarak görünüme eklenebilir:

Kotlin

// Instantiate the player.
val player = ExoPlayer.Builder(context).build()
// Attach player to the view.
playerView.player = player
// Set the media item to be played.
player.setMediaItem(mediaItem)
// Prepare the player.
player.prepare()

Java

// Instantiate the player.
player = new ExoPlayer.Builder(context).build();
// Attach player to the view.
playerView.setPlayer(player);
// Set the media item to be played.
player.setMediaItem(mediaItem);
// Prepare the player.
player.prepare();

Yüzey türü seçin

PlayerView öğesinin surface_type özelliği, video oynatma için kullanılan yüzey türünü ayarlamanızı sağlar. spherical_gl_surface_view (küresel video oynatma için özel bir değerdir) ve video_decoder_gl_surface_view (uzantı oluşturucuları kullanarak video oluşturma için) değerlerinin yanı sıra, izin verilen değerler surface_view, texture_view ve none'dir. Görüntü yalnızca ses çalma amaçlıysa yüzey oluşturmak zorunda kalmamak için none kullanılmalıdır. Aksi halde durum pahalı olabilir.

Görüntüleme, normal video oynatma içinse surface_view veya texture_view kullanılmalıdır. SurfaceView, video oynatma için TextureView ile karşılaştırıldığında bazı avantajlara sahiptir:

  • Birçok cihazda önemli ölçüde daha düşük güç tüketimi.
  • Daha doğru kare zamanlaması, daha düzgün video oynatması sağlar.
  • Uygun cihazlarda daha yüksek kaliteli HDR video çıkışı desteği.
  • DRM korumalı içerik oynatıldığında güvenli çıkış desteği.
  • Kullanıcı arayüzü katmanını yükselten Android TV cihazlarında ekranın tam çözünürlüğünde video içeriği oluşturma özelliği.

Bu nedenle, mümkün olduğunda TextureView yerine SurfaceView tercih edilmelidir. TextureView, yalnızca SurfaceView ihtiyaçlarınızı karşılamıyorsa kullanılmalıdır. Aşağıdaki notlarda açıklandığı gibi, Android 7.0'dan (API düzeyi 24) önce animasyonların düzgün çalışmasının veya video yüzeyinin kaydırılmasının gerekli olduğu durumlar buna örnek olarak verilebilir. Bu durumda, TextureView özelliğinin yalnızca SDK_INT 24'ten (Android 7.0) küçük olduğunda kullanılması, aksi halde SurfaceView değerinin kullanılması tercih edilir.

Android TV'de D-pad ile gezinme

Android TV'nin uzaktan kumandasında, Activity cihazınızın dispatchKeyEvent(KeyEvent) konumunda önemli etkinlik olarak gelen komutları gönderen bir D-pad kontrolü vardır. Bunların oynatıcı görünümüne yetki verilmesi gerekir:

Kotlin

override fun dispatchKeyEvent(event: KeyEvent?): Boolean{
  return playerView.dispatchKeyEvent(event!!) || super.dispatchKeyEvent(event)
}

Java

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
  return playerView.dispatchKeyEvent(event) || super.dispatchKeyEvent(event);
}

Oynatıcı görünümüne odaklanma isteğinde bulunmak, oynatma denetimlerinde gezinmek ve reklamları atlamak için önemlidir. Activity öğesinin onCreate tanesinde odak isteğinde bulunabilirsiniz:

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  // ...
  playerView.requestFocus()
  // ...
}

Java

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // ...
    playerView.requestFocus();
    // ...
}

Android TV'de Oluşturma özelliğini kullanıyorsanız AndroidView öğesini odaklanılabilir hale getirmeniz ve değiştirici parametresini uygun şekilde AndroidView öğesine ileterek etkinliği yetkilendirmeniz gerekir:

AndroidView(
  modifier = modifier
    .focusable()
    .onKeyEvent { playerView.dispatchKeyEvent(it.nativeKeyEvent) },
  factory = { playerView }
)

Çekilebilirleri geçersiz kıl

PlayerView, oynatma denetimlerini ve ilerleme çubuğunu görüntülemek için PlayerControlView kullanır. PlayerControlView tarafından kullanılan çekilebilir öğeler, uygulamanızda tanımlı olan aynı adlara sahip çekilebilir öğeler tarafından geçersiz kılınabilir. Geçersiz kılınabilen kontrol çekilebilir öğelerinin listesi için PlayerControlView Javadoc'unu inceleyin.

Daha fazla özelleştirme

Yukarıda açıklananın ötesinde özelleştirmenin gerekli olduğu durumlarda, uygulama geliştiricilerinin Media3'ün kullanıcı arayüzü modülü tarafından sağlananlar yerine kendi kullanıcı arayüzü bileşenlerini uygulamasını bekleriz.