Fitur pemilihan rute perangkat audio gabungan menambahkan dukungan untuk streaming audio ke beberapa perangkat audio secara bersamaan. Dengan fitur ini, aplikasi dengan hak istimewa dapat memilih beberapa perangkat pilihan untuk strategi tertentu melalui API sistem. Aplikasi dapat menemukan kemampuan perangkat audio dengan lebih teliti menggunakan API publik yang disediakan oleh fitur ini. Untuk Android versi 11 dan yang lebih lama, implementasi framework audio memiliki dukungan terbatas untuk beberapa perangkat audio dari jenis yang sama (misalnya, 2 headset A2DP Bluetooth) yang terhubung secara bersamaan. Aturan pemilihan rute audio default juga tidak mengizinkan pengguna memilih beberapa perangkat dari jenis yang sama untuk kasus penggunaan tertentu.
Mulai Android 12, batasan ini dihapus untuk memungkinkan kasus penggunaan baru seperti siaran audio, multicast ke grup headset audio BLE, atau memilih beberapa kartu suara USB secara bersamaan. Pemilihan rute ke beberapa perangkat USB secara bersamaan tidak didukung.
Mulai Android 14, framework USB mendukung rute ke beberapa perangkat USB asalkan perangkat USB memiliki jenis perangkat audio yang berbeda dan, ada dukungan kernel dan vendor untuk menghubungkan beberapa perangkat 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 kumpulan API di Android 12 yang mendukung fitur ini:
- API sistem menangani beberapa perangkat pilihan untuk strategi.
- Antarmuka HIDL, yang diimplementasikan oleh vendor sebagai bagian dari HAL audio, melaporkan kemampuan perangkat.
Bagian berikut membahas setiap API ini secara lebih mendetail.
Menangani beberapa perangkat pilihan untuk strategi
Audio Policy Manager menawarkan API sistem untuk mendukung streaming audio ke beberapa perangkat audio secara bersamaan. API sistem ini memungkinkan setelan, mendapatkan, dan menghapus beberapa perangkat pilihan untuk strategi tertentu. Hingga Android 12, fitur ini hanya didukung untuk satu perangkat.
Pengelola Kebijakan Audio memperkenalkan konsep perangkat media aktif untuk menjelaskan perangkat yang paling mungkin dipilih untuk pemutaran media. Saat perangkat yang dapat dilepas terhubung, streaming output HAL audio yang dapat diarahkan ke perangkat ini mungkin harus dibuka dan diuji untuk atribut yang didukung.
Perangkat audio harus ditentukan saat membuka streaming output. Perangkat media aktif adalah perangkat yang digunakan saat streaming output dibuka dalam konteks ini.
Pilihan perangkat media aktif dapat berubah bergantung pada perangkat sebenarnya yang terhubung atau terputus. Pengelola Kebijakan Audio menggunakan serangkaian aturan berikut untuk memilih perangkat media aktif:
- Jika semua perangkat pilihan untuk media tersedia, semua perangkat tersebut akan dipilih sebagai perangkat aktif.
- Jika tidak, perangkat yang dapat dilepas yang terakhir terhubung akan dipilih.
- Jika tidak ada perangkat yang dapat dilepas yang terhubung, aturan kebijakan audio default untuk memilih perangkat output akan diterapkan untuk memilih perangkat aktif.
Streaming output harus memenuhi kriteria berikut agar dapat dibuka kembali dan dirutekan ke perangkat aktif sehingga konfigurasi terbaik dipilih untuk pemutaran:
- Streaming output harus mendukung perangkat yang aktif.
- Streaming output harus mendukung profil dinamis.
- Saat ini, streaming output tidak boleh dirutekan ke perangkat aktif.
Untuk menerapkan pemilihan perangkat baru, Pengelola Kebijakan Audio akan menutup dan membuka kembali aliran output setelah koneksi perangkat jika aliran output tidak ada aktivitas, atau menundanya saat aliran output ditempatkan ke mode standby.
Audio Policy Manager menawarkan daftar API sistem berikut(seperti yang ditentukan dalam
AudioManager.java
):
setPreferredDeviceForStrategy
Menetapkan perangkat pilihan untuk pemilihan rute audio untuk strategi tertentu. Perhatikan bahwa perangkat mungkin tidak tersedia pada saat perangkat pilihan ditetapkan, tetapi akan digunakan setelah tersedia.
removePreferredDeviceForStrategy
Menghapus perangkat audio pilihan yang sebelumnya ditetapkan dengan
setPreferredDeviceForStrategy
atausetPreferredDevicesForStrategy
.getPreferredDeviceForStrategy
Menampilkan perangkat pilihan untuk strategi audio yang sebelumnya ditetapkan dengan
setPreferredDeviceForStrategy
atausetPreferredDevicesForStrategy
.setPreferredDevicesForStrategy
Menetapkan perangkat pilihan untuk strategi tertentu.
getPreferredDevicesForStrategy
Menampilkan perangkat pilihan untuk strategi audio yang sebelumnya ditetapkan dengan
setPreferredDeviceForStrategy
atausetPreferredDevicesForStrategy
.OnPreferredDevicesForStrategyChangedListener
Menentukan antarmuka untuk notifikasi perubahan pada perangkat audio pilihan yang ditetapkan untuk strategi audio tertentu.
addOnPreferredDevicesForStrategyChangedListener
Menambahkan pemroses untuk mendapatkan notifikasi tentang perubahan pada perangkat audio yang disukai strategi.
removeOnPreferredDevicesForStrategyChangedListener
Menghapus pemroses perubahan yang ditambahkan sebelumnya ke perangkat audio yang disukai strategi.
Melaporkan kemampuan perangkat
Sebagai bagian dari penerapan Audio HAL, vendor menerapkan API yang mendukung kemampuan pelaporan perangkat. Bagian ini menjelaskan jenis dan metode data yang digunakan untuk melaporkan kemampuan perangkat dan mencantumkan beberapa perubahan yang dilakukan di audio HIDL HAL V7 untuk mendukung beberapa perangkat.
Jenis data
Di audio HIDL HAL V7, kemampuan perangkat dilaporkan menggunakan struktur AudioProfile
dan AudioTransport
. Struktur AudioTransport
menjelaskan
kemampuan port audio dengan AudioProfile
untuk format audio yang diketahui, atau dengan
deskripsi hardware mentah untuk format yang tidak diketahui oleh platform. Struktur
AudioProfile
berisi format audio, frekuensi sampel yang didukung
oleh profil, dan daftar mask saluran, seperti yang ditunjukkan dalam 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;
};
Di audio HIDL HAL V7, jenis data AudioPort
ditentukan dengan
struktur AudioTransport
danAudioProfile
untuk mendeskripsikan kemampuan
perangkat.
Metode HAL audio
Pengelola Kebijakan Audio menggunakan metode berikut untuk membuat kueri kemampuan perangkat:
getParameters:
Metode umum untuk mengambil nilai parameter khusus vendor seperti format audio yang didukung dan kecepatan samplingnya masing-masing.getAudioPort:
Menampilkan daftar atribut yang didukung (seperti kecepatan sampling, format, mask saluran, pengontrol gain) 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, API lama versi 3.2 menambahkan struktur
baru yang disebut audio_port_v7
. Lihat kode sumber
untuk mengetahui detail selengkapnya.
Karena penambahan audio_port_v7
, API lama versi 3.2 menambahkan
API baru yang disebut get_audio_port_v7
untuk mengkueri 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 lama harus diisi ke dalam format
AudioPort
baru jika versi API lama di bawah 3.2 dan versi HIDL HAL
adalah 7 atau yang lebih baru. Dalam hal ini, semua frekuensi sampel dan mask saluran
yang dilaporkan dari get_audio_port
diasumsikan didukung untuk semua format
yang ditampilkan, sehingga memungkinkan pemetaan langsung dari nilai get_audio_port
ke
struktur AudioPort
baru.
Contoh penerapan API
Bagian ini menjelaskan beberapa rangkaian pengujian yang berisi metode yang menggunakan API yang dibahas di bagian sebelumnya. Lihat metode ini untuk beberapa contoh cara API ini diterapkan dan digunakan.
Contoh penggunaan API sistem setPreferredDevicesForStrategy
,
getPreferredDevicesForStrategy
, removePreferredDeviceForStrategy
, dan
OnPreferredDevicesForStrategyChangedListener
ada dalam
metode PreferredDeviceRoutingTest
, yang terletak di GTS.
Untuk melihat contoh struktur baru di AudioDeviceInfo
yang digunakan, lihat
metode AudioManagerTest#testGetDevices
yang terletak di CTS.
Contoh implementasi untuk get_audio_port_v7
terletak di
audio_hal.c
dan menunjukkan cara kemampuan dikueri untuk beberapa perangkat.
Validasi
Bagian ini memberikan informasi tentang validasi CTS dan GTS (Google Mobile Services Test Suite) untuk Pengelola Audio.
Pengujian CTS
Pengujian CTS terletak di android.media.cts.AudioManagerTest
.
Berikut adalah daftar pengujian Pengelola Audio yang tersedia:
AudioManagerTest#testGetDevices
Memverifikasi kemampuan perangkat audio yang tepat. Fungsi ini juga memverifikasi bahwa profil audio yang ditampilkan dalam struktur
AudioDeviceInfo
mempertahankan konten dari format array yang lebih lama dan rata, tetapi dalam formatAudioProfile
baru.AudioManagerTest#testPreferredDevicesForStrategy
danAudioManagerTest#testPreferredDeviceForCapturePreset
Pastikan perangkat pilihan untuk strategi dan pengambilan pengujian API terkait preset berhasil diselesaikan.
Pengujian GTS
Pengujian GTS berada di com.google.android.gts.audioservice.AudioServiceHostTest
.
Untuk memvalidasi apakah API untuk perangkat pilihan untuk strategi dan pengambilan preset
berfungsi dengan benar, jalankan pengujian AudioServiceHostTest#testPreferredDeviceRouting
dan AudioServiceHostTest#testPreferredDeviceRoutingForCapturePreset
.