Merekam pemutaran video dan audio

Aplikasi dapat merekam video atau audio yang sedang diputar dari aplikasi lain. Aplikasi tersebut harus menangani token MediaProjection dengan benar. Halaman ini menjelaskan caranya. Contoh ini juga menunjukkan cara admin perangkat dapat menonaktifkan kemampuan untuk merekam snapshot layar, dan bagaimana aplikasi audio dapat mencegah aplikasi lain merekam konten yang diputarnya.

Cara menangani token MediaProjection

MediaProjection API memungkinkan aplikasi memperoleh token MediaProjection yang memberinya akses satu kali untuk merekam konten layar atau audio. OS Android akan meminta izin kepada pengguna sebelum memberikan token ke aplikasi Anda.

OS akan menampilkan token MediaProjection yang aktif di UI Setelan Cepat dan memungkinkan pengguna menarik akses ke token kapan saja. Jika hal ini terjadi, tampilan virtual atau streaming audio yang terkait dengan sesi akan berhenti menerima streaming media. Aplikasi Anda harus merespons dengan tepat. Jika tidak, aplikasi akan terus merekam keheningan audio atau streaming video hitam.

Untuk menangani hilangnya token, daftarkan callback pada instance MediaProjection menggunakan metode registerCallback, dan hentikan perekaman saat metode onStop dipanggil.

Untuk mengetahui informasi selengkapnya, lihat Proyeksi media.

Rekam video

Lihat aplikasi contoh ScreenCapture untuk mempelajari cara mempelajari cara menggunakan Media Projection API untuk merekam layar perangkat secara real time dan menampilkannya di SurfaceView.

Anda dapat menggunakan DevicePolicyManager untuk mencegah perekaman layar. Untuk akun perusahaan (Android for Work), administrator dapat menonaktifkan pengumpulan data asisten untuk profil kerja menggunakan metode setScreenCaptureDisabled.

Codelab Mengelola Perangkat Android Tanpa Aplikasi menunjukkan cara melarang screenshot.

Merekam pemutaran audio

AudioPlaybackCapture API diperkenalkan di Android 10. API ini memberi aplikasi kemampuan untuk menyalin audio yang sedang diputar oleh aplikasi lain. Fitur ini adalah analog screenshot, tetapi untuk audio. Kasus penggunaan utama adalah untuk streaming aplikasi yang ingin merekam audio yang sedang diputar oleh game.

Perhatikan bahwa AudioPlaybackCapture API tidak memengaruhi latensi aplikasi yang audionya sedang direkam.

Membangun aplikasi perekaman

Untuk keamanan dan privasi, perekaman pemutaran memaksakan beberapa batasan. Untuk dapat merekam audio, aplikasi harus memenuhi persyaratan ini:

Untuk merekam audio dari aplikasi lain, aplikasi Anda harus mem-build objek AudioRecord dan menambahkan AudioPlaybackCaptureConfiguration ke objek tersebut. Ikuti langkah berikut:

  1. Panggil AudioPlaybackCaptureConfiguration.Builder.build() untuk mem-build AudioPlaybackCaptureConfiguration.
  2. Teruskan konfigurasi ke AudioRecord dengan memanggil setAudioPlaybackCaptureConfig.

Mengontrol perekaman audio

Aplikasi Anda dapat mengontrol jenis konten yang dapat direkam, dan jenis aplikasi lain yang dapat merekam pemutarannya sendiri.

Membatasi perekaman dengan konten audio

Aplikasi dapat membatasi audio mana yang dapat direkamnya dengan menggunakan metode berikut:

Perhatikan bahwa Anda tidak dapat menggunakan metode addMatchingUsage() dan excludeUsage() bersama-sama. Anda harus memilih satu atau yang lain. Demikian pula, Anda tidak dapat menggunakan addMatchingUid() dan excludeUid() secara bersamaan.

Membatasi pengambilan gambar oleh aplikasi lain

Anda dapat mengonfigurasi aplikasi untuk mencegah aplikasi lain merekam audionya. Audio yang berasal dari aplikasi hanya dapat direkam jika aplikasi memenuhi persyaratan berikut:

Penggunaan

Pemutar yang menghasilkan audio harus menetapkan penggunaannya ke USAGE_MEDIA, USAGE_GAME, atau USAGE_UNKNOWN.

Kebijakan perekaman

Kebijakan perekaman pemutar harus berupa AudioAttributes.ALLOW_CAPTURE_BY_ALL, yang memungkinkan aplikasi lain merekam pemutaran. Ini dapat dilakukan dengan beberapa cara:

Jika prasyarat ini dipenuhi, audio apa pun yang diproduksi oleh pemutar dapat direkam.

Menonaktifkan perekaman sistem

Perlindungan yang memungkinkan perekaman yang dijelaskan di atas hanya berlaku untuk aplikasi. Komponen sistem Android dapat merekam pemutaran secara default. Banyak dari komponen ini disesuaikan oleh vendor Android dan mendukung fitur seperti aksesibilitas dan teks. Karena alasan ini, sebaiknya aplikasi mengizinkan sistem merekam pemutarannya. Dalam kasus yang jarang terjadi, jika Anda tidak ingin sistem merekam pemutaran aplikasi, tetapkan kebijakan perekaman ke ALLOW_CAPTURE_BY_NONE.

Menetapkan kebijakan saat runtime

Anda dapat memanggil AudioManager.setAllowedCapturePolicy() untuk mengubah kebijakan perekaman saat aplikasi sedang berjalan. Jika MediaPlayer atau AudioTrack diputar saat Anda memanggil metode, audio tidak akan terpengaruh. Anda harus menutup dan membuka kembali pemutar atau melacak agar perubahan kebijakan berlaku.

Kebijakan = manifes + AudioManager + AudioAttributes

Karena kebijakan perekaman dapat ditentukan di beberapa tempat, penting untuk memahami cara kebijakan yang efektif ditentukan. Kebijakan perekaman yang paling ketat selalu diterapkan. Misalnya, aplikasi yang manifesnya menyertakan setAllowedCapturePolicy="false" tidak akan pernah mengizinkan aplikasi non-sistem untuk merekam audionya, meskipun AudioManager#setAllowedCapturePolicy disetel ke ALLOW_CAPTURE_BY_ALL. Demikian pula, jika AudioManager#setAllowedCapturePolicy disetel ke ALLOW_CAPTURE_BY_ALL dan manifes menetapkan setAllowedCapturePolicy="true", tetapi AudioAttributes pemutar media dibuat dengan AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM), pemutar media ini tidak akan dapat direkam oleh aplikasi non-sistem.

Tabel di bawah ini meringkas efek atribut manifes dan kebijakan efektif:

allowAudioPlaybackCapture ALLOW_CAPTURE_BY_ALL ALLOW_CAPTURE_BY_SYSTEM ALLOW_CAPTURE_BY_NONE
true aplikasi mana pun hanya sistem tidak ada perekaman
false hanya sistem hanya sistem tidak ada perekaman