AudioPlaybackCapture API diperkenalkan pada Android 10. API ini memberi aplikasi kemampuan untuk menyalin audio yang sedang diputar oleh aplikasi lain. Fitur ini adalah analog dari tangkapan layar, tetapi untuk audio. Kasus penggunaan utama adalah untuk streaming aplikasi yang ingin merekam audio yang sedang diputar oleh game.
Perhatikan bahwa API perekaman ini tidak memengaruhi latensi aplikasi yang audio sedang direkam.
Membangun aplikasi perekaman
Prasyarat
Untuk keamanan dan privasi, perekaman pemutaran memaksakan beberapa batasan. Untuk dapat merekam audio, aplikasi harus memenuhi persyaratan ini:
- Aplikasi harus memiliki izin
RECORD_AUDIO
. - Aplikasi harus memunculkan prompt yang ditampilkan oleh
MediaProjectionManager.createScreenCaptureIntent()
, dan pengguna harus menyetujuinya. - Aplikasi yang merekam dan memutar aplikasi harus dalam profil pengguna yang sama.
Merekam audio
Untuk merekam audio dari aplikasi lain, aplikasi Anda harus membuat objek AudioRecord
dan menambahkan AudioPlaybackCaptureConfiguration
ke dalamnya. Ikuti langkah ini:
- Panggil
AudioPlaybackCaptureConfiguration.Builder.build()
untuk membangunAudioPlaybackCaptureConfiguration
. - Lewati konfigurasi ke
AudioRecord
dengan memanggilsetAudioPlaybackCaptureConfig
.
Membatasi perekaman dengan konten audio
Aplikasi dapat membatasi audio mana yang dapat direkam dengan menggunakan metode ini:
- Teruskan
AUDIO_USAGE
ke AudioPlaybackCaptureConfiguration.addMatchingUsage() untuk mengizinkan merekam penggunaan tertentu. Panggil metode ini beberapa kali untuk menentukan lebih dari satu penggunaan. - Teruskan
AUDIO_USAGE
ke AudioPlaybackCaptureConfiguration.excludeUsage() untuk melarang perekaman penggunaan itu. Panggil metode ini beberapa kali untuk menentukan lebih dari satu penggunaan. - Berikan UID ke AudioPlaybackCaptureConfiguration.addMatchingUid () untuk hanya merekam aplikasi dengan UID tertentu. Panggil metode ini beberapa kali untuk menentukan lebih dari satu UID.
- Berikan UID ke AudioPlaybackCaptureConfiguration.excludeUid() untuk melarang merekam UID tersebut. Panggil metode ini beberapa kali untuk menentukan lebih dari satu UID.
Perhatikan bahwa Anda tidak dapat menggunakan metode addMatchingUsage()
dan excludeUsage()
bersamaan. Anda harus memilih satu atau yang lain. Demikian juga, Anda tidak dapat menggunakan addMatchingUid()
dan excludeUid()
secara bersamaan.
Mengizinkan perekaman pemutaran
Anda dapat mengonfigurasi aplikasi untuk mencegah aplikasi lain merekam audionya. Audio yang berasal dari aplikasi hanya dapat direkam jika aplikasi memenuhi persyaratan ini:
Pemakaian
Pemutar yang menghasilkan audio tersebut harus menyetel penggunaannya ke USAGE_MEDIA
, USAGE_GAME
, atau USAGE_UNKNOWN
.
Kebijakan perekaman
Perekaman pemutar harus AudioAttributes.ALLOW_CAPTURE_BY_ALL
, yang memungkinkan aplikasi lain merekam pemutaran. Ini dapat dilakukan dengan beberapa cara:
- Untuk mengaktifkan perekaman pada semua pemutar, sertakan
android:allowAudioPlaybackCapture="true"
dalam file aplikasimanifest.xml
. - Anda juga dapat mengaktifkan perekaman pada semua pemutar dengan memanggil
AudioManager.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL)
. - Anda dapat menetapkan kebijakan pada pemutar individu saat Anda membangunnya menggunakan
AudioAttributes.Builder.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL)
. (Jika Anda menggunakan panggilanAAudio
AAudioStreamBuilder_setAllowedCapturePolicy(AAUDIO_ALLOW_CAPTURE_BY_ALL)
.)
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 dikustomisasi oleh vendor Android dan mendukung fitur seperti aksesibilitas dan penulisan teks. Untuk alasan ini, disarankan agar aplikasi memungkinkan sistem merekam pemutarannya. 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 memanggil AudioManager.setAllowedCapturePolicy()
untuk mengubah kebijakan perekaman saat aplikasi sedang berjalan. Jika MediaPlayer atau AudioTrack diputar saat Anda memanggil metode, audionya tidak 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 bagaimana kebijakan yang efektif ditentukan. Kebijakan perekaman yang paling ketat selalu diterapkan. Misalnya, aplikasi yang manifesnya mencakup setAllowedCapturePolicy="false"
tidak akan pernah mengizinkan aplikasi non-sistem untuk menangkap audionya, meskipun AudioManager#setAllowedCapturePolicy
disetel ke ALLOW_CAPTURE_BY_ALL
. Demikian pula, jika AudioManager#setAllowedCapturePolicy
disetel ke ALLOW_CAPTURE_BY_ALL
dan manifes disetel ke setAllowedCapturePolicy="true"
, tetapi AudioAttributes
pemutar media dibangun dengan AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM)
, maka pemutar media ini tidak akan dapat direkam oleh aplikasi non-sistem.
Tabel di bawah ini merangkum efek dari atribut manifes dan kebijakan efektif:
allowAudioPlaybackCapture | ALLOW_CAPTURE_BY_ALL | ALLOW_CAPTURE_BY_SYSTEM | ALLOW_CAPTURE_BY_NONE |
---|---|---|---|
true | aplikasi apa pun | hanya sistem | tidak ada perekaman |
false | hanya sistem | hanya sistem | tidak ada perekaman |