Freigeben über


Überlegungen zum Kernelstreaming

In diesem Artikel werden die Anforderungen und besonderen Überlegungen zum Kernelstreaming im Zusammenhang mit bluetooth bypass audio streaming erläutert.

Der Audiotreiber sollte den WaveRT-Porttreiber vollständig unterstützen, einschließlich des "Pullmodus". Weitere Informationen finden Sie unter Einführung des WaveRT-Porttreibers. Obwohl es keine Anforderung gibt, eine Hardware-Audio-Engine für den synchron verbindungsorientierten (SCO) Bypass-Ausgang zu implementieren, schadet es nicht.

Die Windows-Logoanforderungen für die Formatunterstützung umfassen eine Ausnahme für Bluetooth.

Der Audiotreiber sollte die Formate unterstützen, die über die Sideband-Hardware möglich sind, in der Regel 8kHz Mono-Audiostreaming.

Topologie

Alle Bluetooth-Hands-Free-Geräte unterstützen sowohl die Aufnahme als auch das Rendern. Der Audiotreiber sollte eine Kernelstreaming-Topologie (KS) für das Hands-Free-Gerät bereitstellen, wie im folgenden Diagramm dargestellt, um sowohl das Rendern als auch die Aufnahme zu unterstützen.

Diagramm zur Veranschaulichung der KS-Topologie für Audiotreiber, das Rendern und Aufzeichnen in Bluetooth-Hands-Free-Geräten unterstützt.

Anmerkung: Der Entwickler des Audiotreibers kann auswählen, ob ein einzelner Filter für Aufnahme- und Renderpfade oder separate Filter implementiert werden soll. Das HFP-Gerät lässt jedoch nur ein einzelnes Dateiobjekt auf der GUID_DEVINTERFACE_BLUETOOTH_HFP_SCO_HCIBYPASS Geräteschnittstelle zu. Daher muss ein Entwurf, der zwei Filter verwendet, sicherstellen, dass beide Filter das einzelne Dateiobjekt gemeinsam nutzen können.

Die DAC- und ADC-Knoten stellen die analogen/digitalen Konvertierungen dar, unterstützen jedoch keine KS-Eigenschaften.

Die Lautstärkeknoten unterstützen KSPROPERTY_AUDIO_VOLUMELEVEL und KSEVENT_CONTROL_CHANGE, indem sie die SETVOLUME- und GETVOLUMESTATUSUPDATE-IOCTLs an den HFP-Treiber senden.

Der Volumeknoten sollte wie folgt implementiert werden:

  • Wenn das Bluetooth-Headset die Lautstärkeregelung unterstützt, sollte der Audiotreiber einen Volumeknoten in der KS-Topologie enthalten. Die Lautstärkeeigenschafts-Handler des Audiotreibers senden die obigen IOCLTs an den Bluetooth HFP-Treiber, um die Lautstärke zu steuern.
  • Wenn das Bluetooth-Headset kein Hardwarevolume implementiert und der Codec (oder DSP) über ein Hardwarevolume verfügt, sollte der Audiotreiber die Lautstärkeregelung auf dem Codec (oder DSP) verarbeiten.
  • Wenn weder das Bluetooth-Headset noch das Audiogerät über Hardwarelautstärkesteuerungen verfügen, sollte kein Volumeknoten angezeigt werden, und Windows fügt einen Softwarelautstärkensteuerungsknoten ein.
  • Der Stummknoten ist optional. Der Audiotreiber sollte den Stummschaltungsknoten implementieren, wenn und nur, wenn der DSP oder Audiocodec die Möglichkeit bietet, das Umgehungs-PCM-Signal stummzuschalten, bevor er an den Bluetooth-Controller übergeben wird. Die Stummschaltknoten unterstützen KSPROPERTY_AUDIO_MUTE.

Eigenschaftsanforderungen

Der Audiotreiber verwendet die folgenden KS-Eigenschaften, um Informationen über alle Audiobuchsen oder -jacks im Audiopfad abzurufen. Der Audiotreiber kann auch die entsprechende Eigenschaftsanforderung verwenden, um eine Verbindung mit jedem Bluetooth-Audiogerät im Audiopfad herzustellen oder zu unterbrechen.

KSPROPERTY_JACK_DESCRIPTION

Diese Eigenschaft gibt eine KSJACK_DESCRIPTION Struktur zurück. Der Audiotreiber sollte die KSPROPERTY_JACK_DESCRIPTION Felder wie folgt festlegen.

  • ChannelMapping = KSAUDIO_SPEAKER_MONO
  • Farbe = 0
  • ConnectionType = eConnTypeOtherDigital
  • GeoLocation = eGeoLocNotApplicable
  • GenLocation = eGenLocOther
  • PortConnection = ePortConnUnknown
  • IsConnected = <BOOL für den aktuellen Verbindungsstatus>

KSPROPERTY_JACK_DESCRIPTION2

Diese Eigenschaft gibt eine KSJACK_DESCRIPTION2 Struktur zurück. Der Audiotreiber sollte die KSPROPERTY_JACK_DESCRIPTION2 Felder wie folgt festlegen.

  • DeviceStateInfo = 0
  • JackCapabilities = JACKDESC2_PRESENCE_DETECT_CAPABILITY

KSPROPERTY_ONESHOT_RECONNECT

Der Filter des Audiotreibers sollte KSPROPERTY_ONESHOT_RECONNECT unterstützen. Zum Erstellen und Initialisieren dieser Struktur sendet der Audiotreiber IOCTL_BTHHFP_DEVICE_REQUEST_CONNECT an den HFP-Treiber. Der HFP-Treiber schließt diese Anforderung ab und versucht dann, asynchron eine Verbindung mit dem Bluetooth-Audiogerät herzustellen.

KSPROPERTY_ONESHOT_DISCONNECT

Der Filter des Audiotreibers sollte KSPROPERTY_ONESHOT_DISCONNECT unterstützen. Um diese Struktur zu erstellen und zu initialisieren, sendet der Audiotreiber IOCTL_BTHHFP_DEVICE_REQUEST_DISCONNECT an den HFP-Treiber. Der HFP-Treiber schließt diese Anforderung ab und versucht dann, die Verbindung mit dem Bluetooth-Audiogerät asynchron zu trennen.

Wenn ein Audiotreiber diese Eigenschaften unterstützt, macht das Dialogfeld "Sound" in der Systemsteuerung die Befehle "Verbinden" und "Trennen" für den HFP-Endpunkt verfügbar.

Theorie der Bluetooth-Umgehung von Audiostreaming