Fitur perutean perangkat audio gabungan menambahkan dukungan untuk streaming audio ke beberapa perangkat audio secara bersamaan. Dengan fitur ini, aplikasi istimewa dapat memilih beberapa perangkat pilihan untuk strategi tertentu melalui API sistem. Aplikasi dapat menemukan kemampuan perangkat audio secara lebih akurat dengan menggunakan API publik yang disediakan oleh fitur ini. Untuk Android versi 11 dan yang lebih lama, penerapan framework 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 memilih beberapa perangkat dengan jenis yang sama untuk kasus penggunaan tertentu.
Mulai Android 12, batasan ini dihapus untuk memungkinkan kasus penggunaan baru seperti penyiaran audio, multi-casting ke grup headphone audio BLE, atau memilih beberapa kartu suara USB secara bersamaan. Perutean ke beberapa perangkat USB secara bersamaan tidak didukung.
Mulai Android 14, framework USB mendukung perutean ke beberapa perangkat USB asalkan perangkat USB tersebut 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 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 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 dengan lebih baik. API sistem ini memungkinkan penyetelan, pengambilan dan penghapusan 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 mendeskripsikan perangkat yang kemungkinan besar dipilih untuk pemutaran media. Saat perangkat yang dapat dilepas terhubung, output streaming HAL audio yang dapat dirutekan ke perangkat ini mungkin harus dibuka dan diperiksa atribut yang didukungnya.
Perangkat audio harus ditentukan saat membuka aliran output. Perangkat media aktif adalah perangkat yang digunakan saat aliran output dibuka dalam konteks ini.
Pilihan perangkat media aktif dapat berubah bergantung pada perangkat yang terhubung atau terputus sambungannya. Audio Policy Manager menggunakan serangkaian aturan berikut untuk memilih perangkat media aktif:
- Jika semua perangkat pilihan untuk media tersedia, semuanya akan dipilih sebagai perangkat aktif.
- Jika tidak, perangkat penyimpanan eksternal yang terakhir terhubung akan dipilih.
- Jika tidak ada perangkat yang dapat dilepas terhubung, aturan kebijakan audio default untuk memilih perangkat output diterapkan untuk memilih perangkat aktif.
Aliran output harus memenuhi kriteria berikut agar dapat dibuka kembali dan dirutekan ke perangkat aktif sehingga konfigurasi terbaik dipilih untuk pemutaran:
- Aliran output harus mendukung perangkat aktif.
- Aliran output harus mendukung profil dinamis.
- Aliran output tidak boleh dirutekan ke perangkat aktif saat ini.
Untuk menerapkan pilihan perangkat baru, Audio Policy Manager menutup dan membuka kembali aliran output saat koneksi perangkat jika aliran output tidak ada aktivitas, atau menundanya saat aliran output dalam mode standby.
Audio Policy Manager menawarkan daftar API sistem berikut(seperti yang ditentukan dalam
AudioManager.java
):
setPreferredDeviceForStrategy
Menetapkan perangkat pilihan untuk perutean 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 pilihan strategi.
removeOnPreferredDevicesForStrategyChangedListener
Menghapus pendengar perubahan yang sebelumnya ditambahkan ke perangkat audio yang lebih disukai strategi.
Melaporkan kemampuan perangkat
Sebagai bagian dari penerapan HAL Audio, vendor menerapkan API yang mendukung pelaporan kemampuan perangkat. Bagian ini menjelaskan jenis data dan metode 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 deskriptor hardware mentah untuk format yang tidak diketahui oleh platform. Struktur
AudioProfile
berisi format audio, frekuensi sampling 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
Audio Policy Manager menggunakan metode berikut untuk mengkueri kemampuan perangkat:
getParameters:
Metode generik untuk mengambil nilai parameter khusus vendor seperti format audio yang didukung dan frekuensi samplingnya masing-masing.getAudioPort:
Menampilkan daftar atribut yang didukung (seperti laju pengambilan sampel, 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, versi 3.2 API lama 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 API get_audio_port_v7
:
/**
* 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 tinggi. 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 dalam AudioDeviceInfo
yang sedang digunakan, lihat metode
AudioManagerTest#testGetDevices
yang ada di CTS.
Contoh penerapan 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) Audio Manager.
Pengujian CTS
Pengujian CTS terletak di android.media.cts.AudioManagerTest
.
Berikut adalah daftar pengujian Audio Manager yang tersedia:
AudioManagerTest#testGetDevices
Memverifikasi kemampuan presisi perangkat audio. Hal ini juga memverifikasi bahwa profil audio yang ditampilkan dalam struktur
AudioDeviceInfo
mempertahankan konten dari format array lama yang diratakan, tetapi dalam formatAudioProfile
baru.AudioManagerTest#testPreferredDevicesForStrategy
danAudioManagerTest#testPreferredDeviceForCapturePreset
Pastikan pengujian API terkait preset strategi dan pengambilan gambar untuk perangkat pilihan berhasil diselesaikan.
Pengujian GTS
Pengujian GTS berada di com.google.android.gts.audioservice.AudioServiceHostTest
.
Untuk memvalidasi apakah API untuk perangkat pilihan untuk strategi dan preset pengambilan berfungsi dengan benar, jalankan pengujian AudioServiceHostTest#testPreferredDeviceRouting
dan AudioServiceHostTest#testPreferredDeviceRoutingForCapturePreset
.