Uygulamanıza oynatma kontrolleri ekleme

Medya oynatan bir uygulama, medyayı görüntülemek için kullanıcı arayüzü bileşenleri ve çalmayı kontrol ediyor. 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ğıdakini ekleyin: bağımlılık:

KotlinGroovy
implementation("androidx.media3:media3-ui:1.5.1")
implementation "androidx.media3:media3-ui:1.5.1"

En önemli bileşen, medya oynatmalarına yönelik bir görünüm olan PlayerView'tir. PlayerView, oynatma sırasında video, resim, altyazı ve albüm kapağını gösterir. yanı sıra oynatma kontrollerine de erişebilirsiniz.

PlayerView, eklemek ve çıkarmak için setPlayer yöntemini kullanır ( null) oynatıcı örneği geçiliyor.

PlayerView

PlayerView hem video, resim ve ses oynatmaları için kullanılabilir. Oluşturduğu Video oynatılırken video ve altyazılar, görüntü oynatma için bit eşlemler ve ses dosyalarına meta veri olarak eklenen posterleri gösterebilir. URL'yi diğer kullanıcı arayüzü bileşenlerinde olduğu gibi düzenleyebilirsiniz. Örneğin, aşağıdaki XML'e bir PlayerView dahil edilebilir:

<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 ürününün birkaç özellikleri hakkında daha fazla bilgi edinin. Bu özellikler görünümün davranışını özelleştirmek için kullanılabilir. Örneğin, hem de görünüm ve izlenimi. Bu özelliklerin çoğu, çalışma zamanında görünümü özelleştirmek için kullanılabilecek karşılık gelen ayarlama yöntemlerine sahiptir. PlayerView Javadoc'da bu özellikler ve ayarlayıcı yöntemleri daha ayrıntılı olarak listelenir.

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

KotlinJava
override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  // ...
  playerView = findViewById(R.id.player_view)
}
@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ılarak görünüme eklenebilir:

KotlinJava
// 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()
// 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üzeyin türünü ayarlamanıza olanak tanır. spherical_gl_surface_view değerlerinin yanında Küresel video oynatma için özel bir değerdir) ve video_decoder_gl_surface_view (uzantı kullanarak video oluşturma içindir) oluşturucuları) izin verilen değerler: surface_view, texture_view ve none. Eğer Görünüm yalnızca ses oynatma amaçlı olduğundan, birden fazla kez ses göndermemek için none kullanılmalıdır. Pahalı olabileceği için bir yüzey oluşturmak.

Görünüm normal video oynatma içinse surface_view veya texture_view kullanılmalıdır. SurfaceView, şunun için TextureView ile karşılaştırıldığında çok sayıda avantaj sunar: video oynatma:

  • Birçok cihazda düşük güç tüketimi
  • Daha doğru kare zamanlaması, daha akıcı video oynatma sağlar.
  • Uygun özellikli cihazlarda daha yüksek kaliteli HDR video çıkışı desteği.
  • DRM korumalı içerik oynatılırken güvenli çıkış desteği.
  • Kullanıcı arayüzü katmanını ölçeklendiren Android TV cihazlarda video içeriğini ekranın tam çözünürlüğünde oluşturma olanağı.

Bu nedenle, mümkün olduğunda SurfaceView yerine TextureView tercih edilmelidir. TextureView yalnızca SurfaceView ihtiyaçlarınızı karşılamıyorsa kullanılmalıdır. Örneğin, aşağıdaki notlarda açıklandığı gibi Android 7.0 (API düzeyi 24) öncesinde video yüzeyinin sorunsuz animasyonlarla veya kaydırmayla gösterilmesi gerekir. Örneğin, bu durumda, yalnızca SDK_INT daha az olduğunda TextureView kullanılması tercih edilir 24'ten (Android 7.0) ve aksi takdirde SurfaceView.

Android TV'de D-pad gezinme

Android TV'nin uzaktan kumandasında, D-pad kontrolüne sahip olan Activity saatinizin dispatchKeyEvent(KeyEvent) olanına önemli etkinlik olarak varacaksınız. Bu oynatıcı görünümüne yetki verilmesi gerekir:

KotlinJava
override fun dispatchKeyEvent(event: KeyEvent?): Boolean{
  return playerView.dispatchKeyEvent(event!!) || super.dispatchKeyEvent(event)
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
  return playerView.dispatchKeyEvent(event) || super.dispatchKeyEvent(event);
}

Oynatıcı görünümü için odaklanma isteğinde bulunmak, oynatma kontrollerinde gezinmek ve reklamları atlamak için önemlidir. Activity'teki onCreate alanında odaklanmayı isteyebilirsiniz:

KotlinJava
override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  // ...
  playerView.requestFocus()
  // ...
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // ...
    playerView.requestFocus();
    // ...
}

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

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

Çizilebilir öğeleri geçersiz kılma

PlayerView, oynatmayı görüntülemek için PlayerControlView kullanıyor kontrol düğmeleri ve ilerleme çubuğu. PlayerControlView tarafından kullanılan çekilebilirler uygulamanızda tanımlı aynı adlara sahip çekilebilir öğeler tarafından geçersiz kılınır. Görüntüleyin kontrol çekilebilirlerinin listesi için PlayerControlView Javadoc geçersiz kılınabilir.

Daha fazla özelleştirme

Yukarıda açıklananların ötesinde özelleştirmenin gerekli olduğu durumlarda, uygulamanın geliştiriciler, sağlananlar yerine kendi kullanıcı arayüzü bileşenlerini uygular kullanıcı arayüzü modülü tarafından oluşturulabilir.