Kombiniertes Routing von Audiogeräten

Die kombinierte Routingfunktion für Audiogeräte unterstützt das Streaming von Audio 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:

  1. Wenn alle bevorzugten Geräte für Medien verfügbar sind, werden alle ausgewählt. als aktive Geräte.
  2. Andernfalls wird das zuletzt verbundene Wechselgerät ausgewählt.
  3. 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 stehen folgende System-APIs zur Verfügung(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 oder setPreferredDevicesForStrategy.

  • getPreferredDeviceForStrategy

    Gibt das bevorzugte Gerät für eine Audiostrategie zurück, die zuvor mit festgelegt wurde setPreferredDeviceForStrategy oder setPreferredDevicesForStrategy.

  • 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 oder setPreferredDevicesForStrategy.

  • 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 neuen AudioProfile-Format.

  • AudioManagerTest#testPreferredDevicesForStrategy und AudioManagerTest#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.