Dokumen ini memperkenalkan konsep dasar yang harus Anda ketahui sebelum menggunakan Media Player.
Class suara dan video
Class berikut memutar suara dan video dalam framework Android:
MediaPlayer
: Class ini adalah API utama untuk memutar suara dan video.AudioManager
: Class ini mengelola sumber audio dan output audio di perangkat.
Deklarasi manifes
Sebelum memulai pengembangan pada aplikasi menggunakan MediaPlayer, pastikan manifes Anda memiliki deklarasi yang sesuai untuk mengizinkan penggunaan fitur terkait.
Izin Internet: Jika Anda menggunakan MediaPlayer untuk melakukan streaming konten berbasis jaringan, aplikasi Anda harus meminta akses jaringan.
<uses-permission android:name="android.permission.INTERNET" />
Izin Wake Lock: Jika aplikasi pemutar Anda mengharuskan layar tetap terang atau prosesor tetap bekerja, atau menggunakan metode
MediaPlayer.setScreenOnWhilePlaying(boolean)
atauMediaPlayer.setWakeMode(android.content.Context, int)
, Anda harus meminta izin ini.<uses-permission android:name="android.permission.WAKE_LOCK" />
Menggunakan class MediaPlayer
Class MediaPlayer
adalah komponen penting dari framework media.
Objek class ini dapat mengambil, mendekode, serta memutar
audio dan video dengan sedikit penyiapan. MediaPlayer
mendukung beberapa sumber
media, termasuk:
- Resource lokal
- URI internal, seperti yang mungkin Anda peroleh dari Content Resolver
- URL eksternal (streaming)
Untuk daftar format media yang didukung Android, lihat halaman Format Media yang Didukung.
Contoh cara menggunakan sumber audio
Berikut adalah contoh cara memutar audio yang tersedia sebagai resource mentah lokal
(disimpan dalam direktori res/raw/
aplikasi Anda):
Kotlin
var mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1)
mediaPlayer.start() // no need to call prepare(); create() does that for you
Java
MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1);
mediaPlayer.start(); // no need to call prepare(); create() does that for you
Dalam hal ini, resource "mentah" adalah file yang tidak akan diuraikan oleh sistem dengan cara tertentu. Namun, konten resource ini tidak boleh berupa audio mentah. Konten ini harus berupa file media yang dienkode dan diformat dengan benar dalam salah satu format yang didukung.
Berikut adalah cara melakukan pemutaran dari URI yang tersedia secara lokal dalam sistem (yang diperoleh melalui Content Resolver, misalnya):
Kotlin
val myUri: Uri = .... // initialize Uri here
val mediaPlayer = MediaPlayer().apply {
setAudioAttributes(
AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.setUsage(AudioAttributes.USAGE_MEDIA)
.build()
)
setDataSource(applicationContext, myUri)
prepare()
start()
}
Java
Uri myUri = ....; // initialize Uri here
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioAttributes(
new AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.setUsage(AudioAttributes.USAGE_MEDIA)
.build()
);
mediaPlayer.setDataSource(getApplicationContext(), myUri);
mediaPlayer.prepare();
mediaPlayer.start();
Melakukan pemutaran dari URL jarak jauh menggunakan streaming HTTP akan terlihat seperti ini:
Kotlin
val url = "http://........" // your URL here
val mediaPlayer = MediaPlayer().apply {
setAudioAttributes(
AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.setUsage(AudioAttributes.USAGE_MEDIA)
.build()
)
setDataSource(url)
prepare() // might take long! (for buffering, etc)
start()
}
Java
String url = "http://........"; // your URL here
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioAttributes(
new AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.setUsage(AudioAttributes.USAGE_MEDIA)
.build()
);
mediaPlayer.setDataSource(url);
mediaPlayer.prepare(); // might take long! (for buffering, etc)
mediaPlayer.start();
Menggunakan Persiapan asinkron untuk meningkatkan performa
Perhatikan performa saat Anda menggunakan MediaPlayer
. Misalnya, panggilan
ke prepare()
dapat memerlukan waktu lama untuk dieksekusi, karena mungkin memerlukan
pengambilan dan dekode data media. Jadi, seperti metode apa pun yang mungkin memerlukan waktu lama
untuk dieksekusi, jangan pernah memanggilnya dari UI thread aplikasi. Tindakan ini menyebabkan
UI berhenti merespons hingga metode kembali, yang merupakan pengalaman pengguna
yang buruk dan dapat menyebabkan error ANR (Application Not Responding).
Untuk menghindari UI thread yang tidak merespons, buat thread lain untuk menyiapkan
MediaPlayer
dan beri tahu thread utama setelah selesai. Framework ini menyediakan
cara yang praktis untuk menyelesaikan metode prepareAsync()
guna melakukan
tugas ini. Metode ini mulai menyiapkan media di latar belakang dan segera
kembali. Setelah media selesai disiapkan, metode onPrepared()
dari
MediaPlayer.OnPreparedListener
, yang dikonfigurasi melalui
setOnPreparedListener()
akan dipanggil.
Pelajari lebih lanjut
Jetpack Media3 adalah solusi yang direkomendasikan untuk pemutaran media di aplikasi Anda. Baca selengkapnya tentang hal ini.
Halaman ini membahas topik yang berkaitan dengan perekaman, penyimpanan, dan pemutaran kembali audio dan video: