Merekam pemutaran video dan audio

Aplikasi dapat merekam video atau audio yang sedang diputar dari aplikasi lain. Seperti aplikasi harus menangani Token MediaProjection dengan benar. Halaman ini akan menjelaskan caranya. Video ini juga menunjukkan cara admin perangkat dapat menonaktifkan kemampuan untuk merekam cuplikan layar apa pun, dan bagaimana aplikasi audio dapat mencegah aplikasi lain dari merekam konten yang diputar.

Cara menangani token MediaProjection

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

OS menampilkan token MediaProjection yang aktif di UI Setelan Cepat dan memungkinkan pengguna untuk menarik akses ke token kapan saja. Ketika ini terjadi, tampilan virtual atau streaming audio yang terkait dengan penghentian penerimaan sesi streaming media. Aplikasi Anda harus merespons dengan tepat, jika tidak, aplikasi akan melanjutkan untuk merekam keheningan audio atau streaming video hitam.

Untuk menangani hilangnya token, daftarkan callback pada MediaProjection menggunakan registerCallback , dan berhenti merekam ketika onStop dipanggil.

Untuk informasi selengkapnya, lihat Proyeksi media.

Rekam video

Lihat Aplikasi contoh Screenshot mempelajari cara menggunakan Media Projection API untuk merekam aktivitas 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 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. Ini adalah analog dari tangkapan layar, tetapi untuk audio. Kasus penggunaan utamanya adalah untuk aplikasi streaming yang ingin merekam audio yang sedang diputar oleh game.

Perhatikan bahwa AudioPlaybackCapture API tidak memengaruhi latensi aplikasi yang audionya ditangkap.

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 membangun Objek AudioRecord dan tambahkan AudioPlaybackCaptureConfiguration IP eksternal mana pun yang ditetapkan pada instance tersebut. Ikuti langkah berikut:

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

Mengontrol rekaman audio

Aplikasi Anda dapat mengontrol jenis konten yang dapat direkam, dan hal lainnya jenis aplikasi tertentu dapat merekam pemutarannya sendiri.

Membatasi perekaman dengan konten audio

Aplikasi dapat membatasi audio mana yang dapat direkam menggunakan metode:

Perlu diperhatikan bahwa Anda tidak dapat menggunakan metode addMatchingUsage() dan excludeUsage() secara bersamaan. Anda harus memilih satu atau yang lain. Demikian juga, Anda tidak dapat menggunakan addMatchingUid() dan excludeUid() secara bersamaan.

Membatasi perekaman 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 menyetel penggunaannya kepada USAGE_MEDIA, USAGE_GAME, atau USAGE_UNKNOWN.

Kebijakan perekaman

Kebijakan penangkapan pemain harus AudioAttributes.ALLOW_CAPTURE_BY_ALL, yang memungkinkan aplikasi lain menangkap pemutaran. Ini dapat dilakukan dengan beberapa cara:

Jika prasyarat tersebut terpenuhi, audio apa pun yang diproduksi oleh pemutar dapat direkam.

Menonaktifkan perekaman sistem

Perlindungan yang memungkinkan perekaman yang dijelaskan di atas hanya berlaku untuk aplikasi. Android komponen sistem dapat merekam pemutaran secara default. Banyak dari komponen ini disesuaikan oleh vendor Android dan fitur dukungannya seperti aksesibilitas dan pemberian teks. Oleh karena itu, sebaiknya aplikasi memungkinkan sistem merekam pemutaran mereka. Dalam kasus yang jarang terjadi, ketika Anda tidak ingin sistem merekam pemutaran aplikasi Anda, setel kebijakan perekaman ke ALLOW_CAPTURE_BY_NONE

Menetapkan kebijakan saat runtime

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

Kebijakan = manifes + AudioManager + AudioAttributes

Karena kebijakan perekaman dapat ditentukan di beberapa tempat, penting untuk memahami bagaimana kebijakan yang efektif ditentukan. Kebijakan perekaman yang paling ketat selalu diterapkan. Misalnya, aplikasi yang manifes mencakup setAllowedCapturePolicy="false" tidak akan pernah mengizinkan non-sistem aplikasi 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 menyetel setAllowedCapturePolicy="true", tetapi AudioAttributes dibuat dengan AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM), lalu pemutar media ini tidak dapat direkam oleh aplikasi non-sistem.

Tabel di bawah meringkas efek dari atribut manifes dan kebijakan yang berlaku:

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