Freigeben über


Überlegungen zum Kernelstreaming

In diesem Artikel werden die Anforderungen und besonderen Überlegungen zum Kernelstreaming im Zusammenhang mit Bluetooth-Umgehungs-Audiostreaming erläutert.

Der Audiotreiber sollte den WaveRT-Porttreiber vollständig unterstützen, einschließlich des "Pullmodus". Weitere Informationen finden Sie unter Einführung in den WaveRT-Porttreiber. Obwohl es keine Notwendigkeit gibt, eine Hardwareaudio-Engine für die synchrone verbindungsorientierte (SCO)-Umgehungsausgabe zu implementieren, ist dies nicht schadet.

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

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

Topologie

Alle Bluetooth Hands-Free-Geräte unterstützen sowohl die Erfassung als auch das Rendern. Der Audiotreiber sollte eine Kernelstreamingtopologie (KS) für das Hands-Free-Gerät verfügbar machen, wie im folgenden Diagramm gezeigt, um sowohl Rendern als auch Erfassen zu unterstützen.

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

Hinweis: Der Audiotreiberentwickler 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, zulassen, 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 Volumeknoten 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 seine KS-Topologie aufnehmen. Die Volumeeigenschaftenhandler des Audiotreibers senden die oben genannten IOCLTs an den Bluetooth HFP-Treiber, um das Volume zu verarbeiten.
  • Wenn das Bluetooth-Headset kein Hardwarevolume implementiert und der Codec (oder DSP) über eine Hardwarelautstärke verfügt, sollte der Audiotreiber die Lautstärkeregelung auf dem Codec (oder DSP) verarbeiten.
  • Wenn weder das Bluetooth-Headset noch das Audiogerät über Eine Hardware-Lautstärkeregelung verfügen, sollte kein Lautstärkeknoten angezeigt werden, und Windows fügt einen Softwarelautsteuerungsknoten ein.
  • Der Stummschaltungsknoten ist optional. Der Audiotreiber sollte den Stummschaltungsknoten nur implementieren, wenn der DSP oder Audiocodec die Möglichkeit bietet, das Umgehungs-PCM-Signal stummzuschalten, bevor es an den Bluetooth-Controller übergeben wird. Die Stummschaltungsknoten unterstützen KSPROPERTY_AUDIO_MUTE.

Eigenschaftenanforderungen

Der Audiotreiber verwendet die folgenden KS-Eigenschaften, um Informationen zu beliebigen Audiobuchsen oder Buchsen im Audiopfad abzurufen. Der Audiotreiber kann auch die entsprechende Eigenschaftsanforderung verwenden, um eine Verbindung mit einem beliebigen 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 aktuelle Verbindungs-status>

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 führt diese Anforderung aus 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, werden im Dialogfeld Sound im Systemsteuerung die Befehle Verbinden und Trennen für den HFP-Endpunkt verfügbar gemacht.

Theorie der Bluetooth-Umgehung von Audiostreaming