Fitur perutean perangkat audio gabungan menambahkan dukungan untuk streaming audio ke beberapa perangkat audio secara bersamaan. Dengan menggunakan fitur ini, aplikasi dengan hak istimewa dapat memilih beberapa perangkat pilihan untuk strategi tertentu melalui API sistem. Aplikasi dapat menemukan kemampuan perangkat audio secara lebih tepat dengan menggunakan API publik yang disediakan oleh fitur ini. Untuk Android versi 11 dan yang lebih rendah, implementasi kerangka kerja audio memiliki dukungan terbatas untuk beberapa perangkat audio dengan jenis yang sama (misalnya, 2 headset Bluetooth A2DP) yang terhubung secara bersamaan. Aturan perutean audio default juga tidak mengizinkan pengguna untuk memilih beberapa perangkat dengan jenis yang sama untuk kasus penggunaan tertentu.
Dimulai dengan Android 12, batasan ini dihapus untuk memungkinkan kasus penggunaan baru seperti penyiaran audio, multicasting ke grup headphone audio BLE, atau menggunakan beberapa kartu suara USB secara bersamaan.
Halaman ini membahas cara menerapkan dukungan untuk streaming audio ke beberapa perangkat audio, dan cara memvalidasi penerapan fitur ini.
Mendukung streaming audio ke beberapa perangkat audio
Ada dua set API di Android 12 yang mendukung fitur ini:
- API sistem menangani beberapa perangkat pilihan untuk suatu strategi.
- Antarmuka HIDL, yang diimplementasikan oleh vendor sebagai bagian dari audio HAL, melaporkan kemampuan perangkat.
Bagian berikut membahas masing-masing API ini secara lebih mendetail.
Menangani beberapa perangkat pilihan untuk sebuah strategi
Audio Policy Manager menawarkan API sistem untuk lebih mendukung streaming audio ke beberapa perangkat audio secara bersamaan. API sistem ini memungkinkan pengaturan, mendapatkan, dan menghapus beberapa perangkat pilihan untuk strategi tertentu. Hingga Android 12, fitur ini hanya didukung untuk satu perangkat.
Audio Policy Manager memperkenalkan konsep perangkat media aktif untuk menjelaskan perangkat yang paling mungkin dipilih untuk pemutaran media. Saat perangkat yang dapat dilepas terhubung, aliran output audio HAL yang dapat dirutekan ke perangkat ini mungkin harus dibuka dan diperiksa untuk atribut yang didukung.
Perangkat audio harus ditentukan saat membuka aliran keluaran. Perangkat media aktif adalah perangkat yang digunakan saat aliran keluaran dibuka dalam konteks ini.
Pemilihan perangkat media aktif dapat berubah tergantung pada perangkat yang sebenarnya terhubung atau terputus. Pengelola Kebijakan Audio menggunakan rangkaian aturan berikut untuk memilih perangkat media aktif:
- Jika semua perangkat pilihan untuk media tersedia, semuanya dipilih sebagai perangkat aktif.
- Jika tidak, perangkat lepasan yang terhubung terakhir akan dipilih.
- Jika tidak ada perangkat yang dapat dilepas yang terhubung, aturan kebijakan audio default untuk memilih perangkat keluaran diterapkan untuk memilih perangkat yang aktif.
Aliran keluaran harus memenuhi kriteria berikut untuk dibuka kembali dan dirutekan ke perangkat aktif sehingga konfigurasi terbaik dipilih untuk pemutaran:
- Aliran keluaran harus mendukung perangkat aktif.
- Aliran keluaran harus mendukung profil dinamis.
- Aliran keluaran saat ini tidak boleh dirutekan ke perangkat aktif.
Untuk menerapkan pemilihan perangkat baru, Pengelola Kebijakan Audio menutup dan membuka kembali aliran keluaran pada sambungan perangkat jika aliran keluaran menganggur, atau menundanya saat aliran keluaran ditempatkan ke siaga.
Audio Policy Manager menawarkan daftar API sistem berikut (sebagaimana didefinisikan dalam AudioManager.java
):
setPreferredDeviceForStrategy
Menyetel perangkat pilihan untuk perutean audio untuk strategi tertentu. Perhatikan bahwa perangkat mungkin tidak tersedia pada saat perangkat pilihan diatur, tetapi digunakan setelah tersedia.
removePreferredDeviceForStrategy
Menghapus perangkat audio pilihan yang sebelumnya disetel dengan
setPreferredDeviceForStrategy
atausetPreferredDevicesForStrategy
.getPreferredDeviceForStrategy
Mengembalikan perangkat pilihan untuk strategi audio yang sebelumnya disetel dengan
setPreferredDeviceForStrategy
atausetPreferredDevicesForStrategy
.setPreferredDevicesForStrategy
Menetapkan perangkat pilihan untuk strategi tertentu.
getPreferredDevicesForStrategy
Mengembalikan perangkat pilihan untuk strategi audio yang sebelumnya disetel dengan
setPreferredDeviceForStrategy
atausetPreferredDevicesForStrategy
.OnPreferredDevicesForStrategyChangedListener
Menentukan antarmuka untuk pemberitahuan perubahan pada perangkat audio pilihan yang disetel untuk strategi audio tertentu.
addOnPreferredDevicesForStrategyChangedListener
Menambahkan pendengar untuk mendapatkan pemberitahuan tentang perubahan pada perangkat audio pilihan strategi.
removeOnPreferredDevicesForStrategyChangedListener
Menghapus pendengar perubahan yang ditambahkan sebelumnya ke perangkat audio pilihan strategi.
Kemampuan perangkat pelaporan
Sebagai bagian dari implementasi Audio HAL, vendor mengimplementasikan API yang mendukung kemampuan perangkat pelaporan. Bagian ini menjelaskan tipe data dan metode yang digunakan untuk melaporkan kemampuan perangkat dan mencantumkan beberapa perubahan yang dibuat pada audio HIDL HAL V7 untuk mendukung beberapa perangkat.
Tipe data
Dalam audio HIDL HAL V7, kemampuan perangkat dilaporkan menggunakan struktur AudioProfile
dan AudioTransport
. Struktur AudioTransport
menjelaskan kemampuan port audio dengan AudioProfile
untuk format audio yang dikenal, atau dengan deskriptor perangkat keras mentah untuk format yang tidak diketahui oleh platform. Struktur AudioProfile
berisi format audio, laju sampel yang didukung oleh profil, dan daftar topeng saluran, seperti yang ditunjukkan pada blok kode berikut dari types.hal
:
/**
* Configurations supported for a certain audio format.
*/
struct AudioProfile {
AudioFormat format;
/** List of the sample rates (in Hz) supported by the profile. */
vec<uint32_t> sampleRates;
/** List of channel masks supported by the profile. */
vec<AudioChannelMask> channelMasks;
};
Dalam audio HIDL HAL V7, tipe data AudioPort
didefinisikan dengan struktur AudioTransport
dan AudioProfile
untuk menjelaskan kemampuan perangkat.
Metode Audio HAL
Manajer Kebijakan Audio menggunakan metode berikut untuk menanyakan kemampuan perangkat:
-
getParameters:
Metode umum untuk mengambil nilai parameter khusus vendor seperti format audio yang didukung dan kecepatan pengambilan sampelnya masing-masing. -
getAudioPort:
Mengembalikan daftar atribut yang didukung (seperti laju pengambilan sampel, format, masker saluran, pengontrol penguatan) untuk port audio tertentu.
Kode berikut dari IDevice.hal
menunjukkan antarmuka untuk metode getAudioPort
:
/**
* Returns the list of supported attributes for a given audio port.
*
* As input, 'port' contains the information (type, role, address etc...)
* needed by the HAL to identify the port.
*
* As output, 'resultPort' contains possible attributes (sampling rates,
* formats, channel masks, gain controllers...) for this port.
*
* @param port port identifier.
* @return retval operation completion status.
* @return resultPort port descriptor with all parameters filled up.
*/
getAudioPort(AudioPort port)
generates (Result retval, AudioPort resultPort);
Perubahan pada API lama
Untuk mendukung beberapa profil audio, versi 3.2 dari API lama menambahkan struktur baru yang disebut audio_port_v7
. Lihat kode sumber untuk lebih jelasnya.
Karena penambahan audio_port_v7
, versi 3.2 dari API lawas menambahkan API baru yang disebut get_audio_port_v7
untuk menanyakan kemampuan perangkat menggunakan struktur audio_port_v7
.
Kode berikut dari audio.h
menunjukkan definisi get_audio_port_v7
API:
/**
* Fills the list of supported attributes for a given audio port.
* As input, "port" contains the information (type, role, address etc...)
* needed by the HAL to identify the port.
* As output, "port" contains possible attributes (sampling rates,
* formats, channel masks, gain controllers...) for this port. The
* possible attributes are saved as audio profiles, which contains audio
* format and the supported sampling rates and channel masks.
*/
int (*get_audio_port_v7)(struct audio_hw_device *dev,
struct audio_port_v7 *port);
Data dari get_audio_port
API lawas harus diisi ke dalam format AudioPort
baru bila versi API lawas di bawah 3.2 dan versi HIDL HAL 7 atau lebih tinggi. Dalam hal ini, semua laju sampel dan masker saluran yang dilaporkan dari get_audio_port
diasumsikan didukung untuk semua format yang dikembalikan, memungkinkan pemetaan langsung dari nilai get_audio_port
ke struktur AudioPort
baru.
Contoh implementasi API
Bagian ini menjelaskan beberapa rangkaian pengujian yang berisi metode yang menggunakan API yang tercakup dalam bagian sebelumnya. Lihat metode ini untuk beberapa contoh bagaimana API ini diterapkan dan digunakan.
Contoh penggunaan setPreferredDevicesForStrategy
, getPreferredDevicesForStrategy
, removePreferredDeviceForStrategy
, dan OnPreferredDevicesForStrategyChangedListener
ada di metode PreferredDeviceRoutingTest
, yang terletak di GTS.
Untuk melihat contoh struktur baru di AudioDeviceInfo
digunakan, lihat metode AudioManagerTest#testGetDevices
yang terletak di CTS.
Contoh implementasi untuk get_audio_port_v7
terletak di audio_hal.c
dan menunjukkan bagaimana kemampuan ditanyakan untuk beberapa perangkat.
Validasi
Bagian ini memberikan informasi tentang validasi CTS dan GTS (Google Mobile Services Test Suite) dari Pengelola Audio.
tes CTS
Tes CTS terletak di android.media.cts.AudioManagerTest
.
Berikut adalah daftar tes Audio Manager yang tersedia:
AudioManagerTest#testGetDevices
Memverifikasi kemampuan yang tepat dari perangkat audio. Ini juga memverifikasi bahwa profil audio yang dikembalikan dalam struktur
AudioDeviceInfo
mempertahankan konten dari format array yang lebih lama dan rata, tetapi dalam formatAudioProfile
baru.AudioManagerTest#testPreferredDevicesForStrategy
danAudioManagerTest#testPreferredDeviceForCapturePreset
Verifikasi bahwa perangkat pilihan untuk strategi dan menangkap tes API terkait preset berhasil diselesaikan.
tes GTS
Tes GTS terletak di com.google.android.gts.audioservice.AudioServiceHostTest
.
Untuk memvalidasi apakah API untuk perangkat pilihan untuk strategi dan menangkap prasetel berfungsi dengan benar, jalankan AudioServiceHostTest#testPreferredDeviceRouting
dan AudioServiceHostTest#testPreferredDeviceRoutingForCapturePreset
.