Mulai menggunakan Media Player

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) atau MediaPlayer.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: