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 yang disukai untuk strategi tertentu oleh 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 mengarahkan rute ke beberapa perangkat USB asalkan perangkat USB memiliki audio yang berbeda jenis perangkat dan, ada dukungan {i>kernel<i} dan vendor untuk menghubungkan beberapa USB perangkat secara bersamaan.
Halaman ini membahas cara menerapkan dukungan untuk streaming audio ke beberapa perangkat audio, dan cara memvalidasi penerapan mengenai 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 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
Pengelola Kebijakan Audio menawarkan API sistem untuk mendukung streaming audio yang lebih baik ke beberapa perangkat audio secara bersamaan. API sistem ini mengaktifkan pengaturan, 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 yang aktif dapat berubah bergantung pada perangkat yang sebenarnya terhubung atau terputus. Audio Policy Manager menggunakan rangkaian berikut aturan untuk memilih perangkat media yang aktif:
- Jika semua perangkat pilihan untuk media tersedia, semuanya akan dipilih sebagai perangkat aktif.
- Jika tidak, perangkat portabel yang terakhir terhubung akan dipilih.
- Jika tidak ada perangkat portabel yang terhubung, aturan kebijakan audio default untuk memilih perangkat {i>output<i} diterapkan untuk memilih perangkat yang 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 bagi strategi tertentu. Catatan bahwa perangkat mungkin tidak tersedia pada saat perangkat yang dipilih ditetapkan, namun 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 audio pilihan strategi perangkat seluler.
removeOnPreferredDevicesForStrategyChangedListener
Menghapus pemroses perubahan yang ditambahkan sebelumnya pada strategi pilihan perangkat audio.
Melaporkan kemampuan perangkat
Sebagai bagian dari penerapan Audio HAL, vendor menerapkan API yang mendukung kemampuan pelaporan perangkat. Bagian ini menjelaskan jenis dan metode data digunakan untuk melaporkan kemampuan perangkat dan mencantumkan beberapa perubahan yang dibuat dalam 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
porta audio dengan AudioProfile
untuk format audio yang dikenal, atau dengan
deskripsi perangkat keras 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;
};
Dalam audio HIDL HAL V7, jenis data AudioPort
ditentukan dengan
Struktur AudioTransport
dan AudioProfile
untuk mendeskripsikan karakteristik perangkat
kemampuan IT.
Metode HAL Audio
Pengelola Kebijakan Audio menggunakan metode berikut untuk membuat kueri kemampuan perangkat:
getParameters:
Metode umum untuk mengambil parameter khusus vendor seperti format audio yang didukung dan frekuensi samplingnya masing-masing.getAudioPort:
Menampilkan daftar atribut yang didukung (seperti pengambilan sampel tarif, format, mask saluran, pengontrol keuntungan) untuk porta 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 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 API baru
Format AudioPort
jika versi API lama di bawah 3.2 dan HIDL HAL
adalah versi 7 atau yang lebih baru. Dalam hal ini, semua frekuensi sampel dan saluran yang dilaporkan
mask dari get_audio_port
dianggap didukung untuk semua
format, yang memungkinkan pemetaan secara 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 dibahas di bagian sebelumnya. Lihat metode ini untuk beberapa contoh bagaimana API ini diimplementasikan dan digunakan.
Contoh penggunaan setPreferredDevicesForStrategy
,
getPreferredDevicesForStrategy
, removePreferredDeviceForStrategy
, dan
API sistem OnPreferredDevicesForStrategyChangedListener
berada dalam
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 CTS dan validasi GTS (Google Mobile Services Test Suite) dari Pengelola Audio.
Uji CTS
Uji 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 terletak 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
.