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ığı, şunları içeren bir UI modülü içerir: bazı kullanıcı arayüzü bileşenlerine sahip. Kullanıcı arayüzü modülüne bağımlı olmak için aşağıdakini ekleyin: bağımlılık:

Kotlin

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

Eski

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

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.

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

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, PlayerView aşağıdaki XML ile birlikte 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 ü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ğunda, ilgili Bu yöntemler, çalışma zamanında görünümü özelleştirmek için kullanılabilir. İlgili içeriği oluşturmak için kullanılan PlayerView Javadoc bu özellikleri ve belirleyici yöntemlerini ele alacağız.

Görünüm düzen dosyasında bildirildikten sonra onCreate etkinliğin yöntemi:

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ığında, oynatıcıyı çağırarak görünüme eklenebilir. setPlayer:

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 için surface_type özelliği, yüzey türünü ayarlamanızı sağlar. Video oynatma için kullanılı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üntüleme 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:

  • Önemli ölçüde daha düşük güç YouTube'da cihazlar.
  • Daha doğru kare zamanlaması, daha akıcı video oynatma sağlar.
  • Uygun olan cihazlarda daha yüksek kaliteli HDR video çıkışı desteği.
  • DRM korumalı içerik oynatılırken güvenli çıkış desteği.
  • Video içeriğini ekranın tam çözünürlüğünde Kullanıcı arayüzü katmanını yükselten Android TV cihazları.

Dolayısıyla mümkünse TextureView yerine SurfaceView tercih edilmelidir. TextureView yalnızca SurfaceView ihtiyaçlarınızı karşılamıyorsa kullanılmalıdır. Bir Örneğin, video yüzeyinin yumuşak animasyonların veya kaydırılmasının gerekli olduğu durumlar (API düzeyi 24) sürümüne sahip olduğunuzdan emin olun. Ö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 ile gezinme

Android TV'nin uzaktan kumandasında, D-pad kontrolüne sahip olan Activity cihazınızın dispatchKeyEvent(KeyEvent) zamanına önemli etkinlik olarak varacaksınız. Bu 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ü için odak isteğinde bulunmak, oynatma arasında gezinme açısından önemlidir ve reklamları atlama. Şuna odaklanılmasını isteyebilirsiniz: onCreate Activity:

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ştur özelliğini kullanıyorsanız AndroidView ayarını yapmanız gerekir. odaklanılabilir ve değiştirici parametreyi AndroidView:

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

Çekilebilir öğeleri geçersiz kıl

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.