Die kombinierte Routingfunktion für Audiogeräte unterstützt das Streaming von Audio mehrere Audiogeräte gleichzeitig nutzen. Mit dieser Funktion können berechtigte Apps über System-APIs mehrere bevorzugte Geräte für eine bestimmte Strategie auswählen. Mithilfe der öffentlichen APIs, die von dieser Funktion bereitgestellt werden, können Apps die Funktionen von Audiogeräten genauer ermitteln. 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 Weiterleiten 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.
Unterstützung für das Streamen von Audio auf mehrere Audiogeräte
In Android 12 gibt es zwei 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. Das aktive 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. Der Audio Policy Manager verwendet die folgenden Regeln, um aktive Mediengeräte auszuwählen:
- Wenn alle bevorzugten Geräte für Medien verfügbar sind, werden sie alle als aktive Geräte ausgewählt.
- Andernfalls wird das zuletzt verbundene Wechseldatenträger 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 weitergeleitet werden.
Um eine neue Geräteauswahl anzuwenden, schließt und öffnet der Audio Policy Manager einen Ausgabestream bei der Geräteverbindung, wenn der Ausgabestream inaktiv ist, oder verschiebt die Anwendung auf den Zeitpunkt, zu dem der Ausgabestream in den Ruhemodus 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. Das Gerät ist möglicherweise nicht verfügbar, wenn Sie das bevorzugte Gerät festlegen. Es wird jedoch verwendet, sobald es 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 Schnittstelle für Benachrichtigungen zu Änderungen an den bevorzugten Audiogeräten, 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 Anbieter die APIs, die die Meldung von Gerätefunktionen unterstützen. 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 der Audio-HIDL HAL V7 werden Gerätefunktionen mit den Strukturen AudioProfile
und AudioTransport
gemeldet. 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 der Audio-HIDL HAL V7 wird der Datentyp AudioPort
mit den Strukturen AudioTransport
und AudioProfile
definiert, um die Funktionen des Geräts zu beschreiben.
Audio-HAL-Methoden
Im Audiorichtlinien-Manager werden mit den folgenden Methoden die Funktionen:
getParameters:
Eine generische Methode zum Abrufen von anbieterspezifischen Parameterwerten wie unterstützten Audioformaten und ihren 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.
Der folgende Code aus IDevice.hal
zeigt die Schnittstelle für die getAudioPort
-Methode:
/**
* 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
hinzugefügt. Weitere Informationen finden Sie im 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.
Der folgende Code aus 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 in den vorherigen Abschnitten beschriebenen APIs verwenden. In diesen Methoden finden Sie einige Beispiele dafür, 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 AudioDeviceInfo
finden Sie in der CTS-Methode AudioManagerTest#testGetDevices
.
Ein Beispiel für die Implementierung für get_audio_port_v7
findest du unter audio_hal.c
. Dort wird gezeigt, wie Funktionen für mehrere Geräte abgefragt werden.
Zertifizierungsstufe
In diesem Abschnitt finden Sie Informationen zur CTS- und GTS- (Google Mobile Services Test Suite) Validierung des Audiomanagers.
CTS-Tests
CTS-Tests befinden sich unter 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 geprüft, ob die zurückgegebenen Audioprofile im
AudioDeviceInfo
-Format den Inhalt des älteren, flachen Arrayformats beibehalten, aber im neuenAudioProfile
-Format vorliegen.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.
Führen Sie die Tests AudioServiceHostTest#testPreferredDeviceRouting
und AudioServiceHostTest#testPreferredDeviceRoutingForCapturePreset
aus, um zu prüfen, ob die APIs für bevorzugte Geräte für Strategie und Aufnahmevorlage richtig funktionieren.