Durch die kombinierte Routingfunktion für Audiogeräte wird das Streaming von Audio zu mehrere Audiogeräte gleichzeitig nutzen. Mit dieser Funktion können privilegierte Apps Mehrere bevorzugte Geräte für eine bestimmte Strategie auswählen über System-APIs. Apps können Funktionen von Audiogeräten besser erkennen und zwar mithilfe der öffentlichen APIs, die über diese Funktion bereitgestellt werden. Bei Android 11 und niedriger hat die Implementierung des Audio-Frameworks Begrenzte Unterstützung für mehrere Audiogeräte desselben Typs (z. B. 2 Bluetooth-A2DP-Headsets), die gleichzeitig angeschlossen sind. Das standardmäßige Audiorouting können Nutzer auch nicht mehrere Geräte desselben Typs für eine für den jeweiligen Anwendungsfall.
Ab Android 12 werden diese Einschränkungen aufgehoben um neue Anwendungsfälle wie Audioübertragungen, Multicasting an eine Gruppe BLE-Audiokopfhörer verwenden oder mehrere USB-Soundkarten gleichzeitig auswählen. Das gleichzeitige Routing an mehrere USB-Geräte wird nicht unterstützt.
Ab Android 14 unterstützt das USB-Framework Weiterleitung an mehrere USB-Geräte, sofern die USB-Geräte unterschiedliche Audiosignale haben Es gibt Kernel- und Anbieter-Unterstützung, um mehrere USB- Geräte gleichzeitig.
Auf dieser Seite erfahren Sie, wie Sie die Unterstützung für Streaming von Audio auf Audiogeräte testen und wie Sie Ihre Implementierung dieser Funktion.
Audiostreaming auf mehrere Audiogeräte unterstützen
In Android 12 gibt es zwei Gruppen von APIs, die diese Funktion unterstützen:
- Die System-APIs verarbeiten mehrere bevorzugte Geräte für eine Strategie.
- Die vom Anbieter als Teil des Audio-HAL implementierte HIDL-Schnittstelle meldet Gerätefunktionen.
In den folgenden Abschnitten werden diese APIs ausführlicher erläutert.
Mehrere bevorzugte Geräte für eine Strategie verarbeiten
Der Audiorichtlinien-Manager bietet System-APIs zur besseren Unterstützung von Audiostreams an mehrere Audiogeräte gleichzeitig nutzen. Diese System-APIs ermöglichen die Einstellung, und mehrere bevorzugte Geräte für eine bestimmte Strategie entfernen. Bis Android 12, wurde diese Funktion nur für ein einzelnes Gerät unterstützt.
Im Audiorichtlinienmanager wird das Konzept aktiver Mediengeräte für beschreiben die Geräte, die am ehesten für die Medienwiedergabe ausgewählt werden. Wann? ein trennbares Gerät angeschlossen ist, werden die Audio-HAL-Ausgabestreams, die An dieses Gerät weitergeleitete Attribute müssen möglicherweise geöffnet und auf unterstützte Attribute geprüft werden.
Beim Öffnen eines Ausgabestreams muss ein Audiogerät angegeben werden. Die aktiven Mediengerät ist das Gerät, das verwendet wird, wenn Ausgabestreams in diesem Kontext geöffnet werden.
Die Auswahl der aktiven Mediengeräte kann je nach Gerät variieren. verbunden oder getrennt. Im Audiorichtlinien-Manager werden zur Auswahl aktiver Mediengeräte:
- Wenn alle bevorzugten Geräte für Medien verfügbar sind, werden alle ausgewählt. als aktive Geräte.
- Andernfalls wird das zuletzt verbundene Wechselgerät ausgewählt.
- Wenn keine Wechseldatenträger verbunden sind, werden die Standardregeln für die Audiorichtlinie zur Auswahl von Ausgabegeräten zur Auswahl aktiver Geräte.
Ein Ausgabestream muss die folgenden Kriterien erfüllen, um neu geöffnet und weitergeleitet zu werden zu den aktiven Geräten, damit die beste Konfiguration für die Wiedergabe ausgewählt wird:
- Der Ausgabestream muss die aktiven Geräte unterstützen.
- Der Ausgabestream muss dynamische Profile unterstützen.
- Der Ausgabestream darf derzeit nicht an aktive Geräte geleitet werden.
Damit eine neue Geräteauswahl angewendet werden kann, wird der Audiorichtlinien-Manager geschlossen und einen Ausgabestream bei Geräteverbindung erneut öffnet, wenn er inaktiv ist, oder verzögert den Vorgang, wenn der Ausgabestream in den Standby-Modus versetzt wird.
Im Audiorichtlinien-Manager sind folgende System-APIs verfügbar(definiert in
AudioManager.java
):
setPreferredDeviceForStrategy
Hiermit wird das bevorzugte Gerät für das Audiorouting für eine bestimmte Strategie festgelegt. Hinweis Das Gerät ist möglicherweise nicht zum Zeitpunkt verfügbar, zu dem das bevorzugte Gerät ausgewählt wird. festgelegt ist, aber verwendet wird, sobald er verfügbar ist.
removePreferredDeviceForStrategy
Entfernt die bevorzugten Audiogeräte, die zuvor mit
setPreferredDeviceForStrategy
odersetPreferredDevicesForStrategy
.getPreferredDeviceForStrategy
Gibt das bevorzugte Gerät für eine Audiostrategie zurück, die zuvor mit festgelegt wurde
setPreferredDeviceForStrategy
odersetPreferredDevicesForStrategy
.setPreferredDevicesForStrategy
Legt die bevorzugten Geräte für eine bestimmte Strategie fest.
getPreferredDevicesForStrategy
Gibt die bevorzugten Geräte für eine Audiostrategie zurück, die zuvor mit
setPreferredDeviceForStrategy
odersetPreferredDevicesForStrategy
.OnPreferredDevicesForStrategyChangedListener
Definiert eine Oberfläche für die Benachrichtigung über Änderungen am bevorzugten Audio Geräte, die für eine bestimmte Audiostrategie festgelegt sind.
addOnPreferredDevicesForStrategyChangedListener
Fügt einen Listener hinzu, um über Änderungen an den bevorzugten Audioinhalten der Strategie benachrichtigt zu werden .
removeOnPreferredDevicesForStrategyChangedListener
Entfernt einen zuvor hinzugefügten Listener von Änderungen an der bevorzugten Strategie Audiogerät.
Berichte zu Gerätefunktionen erstellen
Im Rahmen der Audio-HAL-Implementierung implementieren die Anbieter die APIs, die Funktionen für die Berichterstellung. In diesem Abschnitt werden die Datentypen und -methoden erläutert. Wird verwendet, um Gerätefunktionen zu melden, und listet einige Änderungen in Audio-HIDL HAL auf V7 zur Unterstützung mehrerer Geräte.
Datentypen
In Audio-HIDL HAL V7 werden Gerätefunktionen mithilfe der AudioProfile
und AudioTransport
. Die AudioTransport
-Struktur beschreibt die
einen Audioport mit AudioProfile
für bekannte Audioformate oder mit
unformatierte Hardwaredeskriptoren für Formate,
die der Plattform nicht bekannt sind. Die
Die AudioProfile
-Struktur enthält das Audioformat, die unterstützten Abtastraten
und die Liste der Kanalmasken, wie im folgenden Code dargestellt:
blockieren von 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;
};
In Audio-HIDL HAL V7 wird der Datentyp AudioPort
mit der Methode
AudioTransport
- und AudioProfile
-Strukturen zur Beschreibung der
Funktionen.
Audio-HAL-Methoden
Im Audiorichtlinien-Manager werden mit den folgenden Methoden die Funktionen:
getParameters:
Eine generische Methode zum Abrufen anbieterspezifischer Parameter -Werte wie unterstützte Audioformate und ihre jeweiligen Abtastraten.getAudioPort:
Gibt die Liste der unterstützten Attribute (z. B. die Stichprobenerhebung) zurück Raten, Formate, Kanalmasken, Verstärkungs-Controller) für einen bestimmten Audioport.
Mit dem folgenden Code von IDevice.hal
zeigt die Benutzeroberfläche für die Methode 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);
Änderungen an der alten API
Zur Unterstützung mehrerer Audioprofile wird in Version 3.2 der alten API eine neue
Struktur namens audio_port_v7
. Siehe Quellcode
.
Durch die Hinzufügung von audio_port_v7
wird in Version 3.2 der alten API ein
neue API mit dem Namen get_audio_port_v7
, um die Funktionen von Geräten mithilfe des
audio_port_v7
-Struktur.
Mit dem folgenden Code von audio.h
zeigt die Definition der 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);
Daten aus der alten get_audio_port
API müssen in die neue
AudioPort
-Format, wenn die alte API-Version unter 3.2 und die HIDL HAL-Version ist
Version 7 oder höher ist. In diesem Fall werden alle gemeldeten
Abtastraten und Channels
Es wird angenommen, dass Masken aus get_audio_port
für alle zurückgegebenen
Formate, die eine einfache Zuordnung von get_audio_port
-Werten zum
neue AudioPort
-Struktur.
Beispiele für API-Implementierungen
In diesem Abschnitt werden mehrere Testsuites mit Methoden beschrieben, die die APIs verwenden. die in den vorherigen Abschnitten behandelt wurden. In diesen Methoden finden Sie einige Beispiele wie diese APIs implementiert und verwendet werden.
Ein Beispiel für die Verwendung von setPreferredDevicesForStrategy
,
getPreferredDevicesForStrategy
, removePreferredDeviceForStrategy
und
System-APIs von OnPreferredDevicesForStrategyChangedListener
befinden sich in der
PreferredDeviceRoutingTest
-Methode, die sich in GTS befindet.
Ein Beispiel für die neue Struktur in der Verwendung von AudioDeviceInfo
finden Sie auf der
AudioManagerTest#testGetDevices
-Methode, die sich in CTS befindet.
Ein Beispiel für die Implementierung von get_audio_port_v7
finden Sie unter
audio_hal.c
und wie Funktionen
für mehrere Geräte abgefragt werden.
Zertifizierungsstufe
Dieser Abschnitt enthält Informationen zu CTS. und GTS (Google Mobile Services Test Suite) des Audio-Managers überprüfen.
CTS-Tests
CTS-Tests befinden sich in android.media.cts.AudioManagerTest
.
Im Folgenden finden Sie eine Liste der verfügbaren Audio-Manager-Tests:
AudioManagerTest#testGetDevices
Verifiziert die genauen Funktionen des Audiogeräts. Außerdem wird bestätigt, Die zurückgegebenen Audioprofile in der
AudioDeviceInfo
-Struktur behalten das aus dem älteren, vereinfachten Array-Format, befinden sich jedoch im neuenAudioProfile
-Format.AudioManagerTest#testPreferredDevicesForStrategy
undAudioManagerTest#testPreferredDeviceForCapturePreset
Vergewissern Sie sich, dass die bevorzugten Geräte für Strategie und Aufnahmevoreinstellungen API-Tests wurden erfolgreich abgeschlossen.
GTS-Tests
GTS-Tests finden in com.google.android.gts.audioservice.AudioServiceHostTest
statt.
Um zu prüfen, ob die APIs für bevorzugte Geräte für Strategie und Erfassungsvoreinstellung festgelegt sind
funktionieren, führen Sie die Tests AudioServiceHostTest#testPreferredDeviceRouting
und AudioServiceHostTest#testPreferredDeviceRoutingForCapturePreset
aus.