Aplikasi yang memutar media memerlukan komponen antarmuka pengguna untuk menampilkan media dan mengontrol pemutaran. Library Media3 berisi modul UI yang berisi sejumlah komponen UI. Untuk bergantung pada modul UI, tambahkan kode berikut dependensi:
Kotlin
implementation("androidx.media3:media3-ui:1.4.1")
Groovy
implementation "androidx.media3:media3-ui:1.4.1"
Komponen terpenting adalah PlayerView
, yang merupakan tampilan untuk pemutaran media.
PlayerView
menampilkan video, gambar, subtitel, dan sampul album selama pemutaran,
serta kontrol pemutaran.
PlayerView
memiliki metode setPlayer
untuk memasang dan melepaskan (dengan
meneruskan null
) instance pemain.
Tampilan Pemutar
PlayerView
dapat digunakan untuk pemutaran video, gambar, dan audio. Dirender
video dan subtitel untuk pemutaran video, bitmap untuk pemutaran gambar
dan dapat menampilkan poster yang disertakan sebagai metadata dalam file audio. Anda dapat menyertakannya
dalam file tata letak Anda seperti
komponen UI lainnya. Misalnya, PlayerView
dapat disertakan dengan XML berikut:
<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"/>
Cuplikan di atas mengilustrasikan bahwa PlayerView
menyediakan beberapa
. Atribut ini dapat digunakan untuk menyesuaikan perilaku tampilan, seperti
serta tampilan dan nuansanya. Sebagian besar atribut ini memiliki penyetel terkait
, yang dapat digunakan untuk menyesuaikan tampilan saat runtime. Tujuan
PlayerView
Javadoc mencantumkan atribut dan metode penyetel ini di
secara lebih mendetail.
Setelah tampilan dideklarasikan dalam file tata letak, tampilan tersebut dapat dicari di
Metode onCreate
aktivitas:
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); }
Setelah pemutar telah diinisialisasi, pemutar dapat dipasang ke tampilan dengan memanggil
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();
Pilih jenis platform
Atribut surface_type
dari PlayerView
memungkinkan Anda menyetel jenis platform
yang digunakan untuk pemutaran video. Selain nilai spherical_gl_surface_view
(yang
adalah nilai khusus untuk pemutaran video bundar) dan
video_decoder_gl_surface_view
(untuk rendering video menggunakan ekstensi
perender), nilai yang diizinkan adalah surface_view
, texture_view
, dan none
. Jika
tampilan ini hanya untuk pemutaran audio, none
harus digunakan agar tidak perlu
membuat platform karena memerlukan banyak biaya.
Jika penayangan tersebut adalah untuk pemutaran video reguler, berarti surface_view
atau texture_view
sebaiknya digunakan. SurfaceView
memiliki sejumlah manfaat dibandingkan TextureView
untuk
pemutaran video:
- Secara signifikan menurunkan daya konsumsi konten di banyak perangkat.
- Waktu render frame yang lebih akurat sehingga pemutaran video lebih lancar.
- Dukungan untuk output video HDR berkualitas lebih tinggi pada perangkat yang mendukung.
- Dukungan untuk output yang aman saat memutar konten yang dilindungi DRM.
- Kemampuan untuk merender konten video pada resolusi penuh dari tampilan di Perangkat Android TV yang meningkatkan kualitas lapisan UI.
Oleh karena itu, SurfaceView
harus lebih diprioritaskan daripada TextureView
jika memungkinkan.
TextureView
sebaiknya hanya digunakan jika SurfaceView
tidak memenuhi kebutuhan Anda. paket Premium AI
misalnya saat animasi yang halus atau scroll permukaan video diperlukan
sebelum Android 7.0 (level API 24), seperti dijelaskan dalam catatan berikut. Sebagai
dalam hal ini, sebaiknya gunakan TextureView
hanya jika SDK_INT
lebih jarang
dari versi 24 (Android 7.0) dan SurfaceView
.
Navigasi D-pad di Android TV
Remote control Android TV memiliki
kontrol D-pad yang mengirimkan perintah yang
tiba sebagai peristiwa utama pada dispatchKeyEvent(KeyEvent)
dari Activity
Anda. Ini
perlu didelegasikan ke tampilan pemutar:
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); }
Meminta fokus untuk tampilan pemutar penting untuk menavigasi pemutaran
mengontrol iklan dan
melewatkan iklan. Sebaiknya minta fokus di 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(); // ... }
Jika menggunakan Compose di Android TV, Anda harus membuat AndroidView
dapat difokuskan dan mendelegasikan peristiwa dengan meneruskan parameter pengubah ke dalam
AndroidView
sesuai dengan:
AndroidView(
modifier = modifier
.focusable()
.onKeyEvent { playerView.dispatchKeyEvent(it.nativeKeyEvent) },
factory = { playerView }
)
Mengganti drawable
PlayerView
menggunakan PlayerControlView
untuk menampilkan pemutaran
kontrol dan status progres. Drawable yang digunakan oleh PlayerControlView
dapat
diganti oleh drawable dengan nama yang sama yang ditetapkan dalam aplikasi Anda. Lihat
Javadoc PlayerControlView
untuk daftar drawable kontrol yang
dapat diganti.
Penyesuaian lebih lanjut
Jika penyesuaian di luar yang dijelaskan di atas diperlukan, kami mengharapkan aplikasi tersebut developer akan mengimplementasikan komponen UI-nya sendiri, bukan menggunakan komponen yang disediakan oleh modul UI Media3.