Aplikasi yang memutar media memerlukan komponen antarmuka pengguna untuk menampilkan media dan mengontrol pemutaran. Library Media3 menyertakan modul UI yang berisi sejumlah komponen UI. Untuk bergantung pada modul UI, tambahkan dependensi berikut:
Kotlin
implementation("androidx.media3:media3-ui:1.3.1")
Groovy
implementation "androidx.media3:media3-ui:1.3.1"
Komponen terpenting adalah PlayerView
, tampilan untuk pemutaran media.
PlayerView
menampilkan video, subtitel, dan sampul album selama pemutaran, serta
kontrol pemutaran.
PlayerView
memiliki metode setPlayer
untuk melampirkan dan melepaskan (dengan
meneruskan null
) instance pemain.
TampilanPemutar
PlayerView
dapat digunakan untuk pemutaran video dan audio. Library ini merender
video dan subtitel saat video diputar, dan dapat menampilkan karya seni
yang disertakan sebagai metadata dalam file audio. Anda dapat menyertakannya dalam file tata letak
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. Atribut ini dapat digunakan untuk menyesuaikan perilaku tampilan, serta
tampilan dan nuansanya. Sebagian besar atribut ini memiliki metode penyetel
terkait, yang dapat digunakan untuk menyesuaikan tampilan pada runtime. PlayerView
Javadoc
mencantumkan atribut dan metode penyetel ini
secara lebih mendetail.
Setelah tampilan dideklarasikan dalam file tata letak, tampilan tersebut dapat dicari dalam
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 diinisialisasi, pemutar tersebut dapat dilampirkan 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 permukaan
Atribut surface_type
dari PlayerView
memungkinkan Anda menyetel jenis platform
yang digunakan untuk pemutaran video. Selain nilai spherical_gl_surface_view
(yang merupakan nilai khusus untuk pemutaran video sferikal) dan video_decoder_gl_surface_view
(yang untuk rendering video menggunakan perender ekstensi), nilai yang diizinkan adalah surface_view
, texture_view
, dan none
. Jika
tampilan hanya untuk pemutaran audio, none
harus digunakan untuk menghindari keharusan
membuat platform karena hal ini dapat dikenai biaya.
Jika tampilan tersebut untuk pemutaran video reguler, surface_view
atau texture_view
harus digunakan. SurfaceView
memiliki sejumlah manfaat dibandingkan TextureView
untuk
pemutaran video:
- Mengurangi konsumsi daya secara signifikan di banyak perangkat.
- Pengaturan waktu render frame yang lebih akurat, sehingga menghasilkan pemutaran video yang lebih lancar.
- Dukungan untuk output video HDR berkualitas lebih tinggi pada perangkat yang kompatibel.
- Dukungan untuk output yang aman saat memutar konten yang dilindungi DRM.
- Kemampuan untuk merender konten video pada resolusi penuh tampilan di perangkat Android TV yang meningkatkan kualitas lapisan UI.
Oleh karena itu, SurfaceView
harus lebih diprioritaskan daripada TextureView
jika memungkinkan.
TextureView
hanya boleh digunakan jika SurfaceView
tidak memenuhi kebutuhan Anda. Salah satu
contohnya adalah saat animasi yang lancar atau scroll platform video diperlukan
sebelum Android 7.0 (API level 24), seperti yang dijelaskan dalam catatan berikut. Untuk
hal ini, sebaiknya gunakan TextureView
hanya saat SDK_INT
kurang
dari 24 (Android 7.0) dan SurfaceView
jika tidak.
Navigasi D-pad di Android TV
Remote control Android TV memiliki kontrol D-pad yang mengirimkan perintah yang
masuk sebagai peristiwa tombol di dispatchKeyEvent(KeyEvent)
dari Activity
Anda. Bagian ini
harus didelegasikan ke tampilan pemain:
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 kontrol
pemutaran dan melewati iklan. Sebaiknya minta fokus dalam onCreate
dari
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
AndroidView
sebagaimana mestinya:
AndroidView(
modifier = modifier
.focusable()
.onKeyEvent { playerView.dispatchKeyEvent(it.nativeKeyEvent) },
factory = { playerView }
)
Mengganti drawable
PlayerView
menggunakan PlayerControlView
untuk menampilkan kontrol
pemutaran 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 mengetahui daftar drawable kontrol yang
dapat diganti.
Penyesuaian lebih lanjut
Jika penyesuaian di luar yang dijelaskan di atas diperlukan, kami berharap developer aplikasi akan mengimplementasikan komponen UI mereka sendiri, bukan menggunakan komponen UI yang disediakan oleh modul UI Media3.