Streaming-Audiorenderer
Der Streaming-Audiorenderer (SAR) ist eine Mediensenke, die Audio rendert. Jede Instanz der SAR rendert einen einzelnen Audiodatenstrom. Verwenden Sie zum Rendern mehrerer Datenströme mehrere Instanzen der SAR.
Rufen Sie zum Erstellen der SAR eine der folgenden Funktionen auf:
- MFCreateAudioRenderer. Gibt einen Zeiger auf die SAR zurück.
- MFCreateAudioRendererActivate. Gibt einen Zeiger auf ein Aktivierungsobjekt zurück, das zum Erstellen der SAR verwendet werden kann.
Die zweite Funktion, die ein Aktivierungsobjekt zurückgibt, ist erforderlich, wenn Sie geschützte Inhalte wiedergeben, da das Aktivierungsobjekt in den geschützten Prozess serialisiert werden muss. Zum Löschen von Inhalten können Sie eine der beiden Funktionen verwenden.
Die SAR kann unkomprimierte Audiodaten im PCM- oder IEEE-Gleitkommaformat empfangen. Wenn die Wiedergaberate schneller oder langsamer als 1× ist, passt die SAR die Neigung automatisch an.
Konfigurieren des Audiorenderers
Die SAR unterstützt mehrere Konfigurationsattribute. Der Mechanismus zum Festlegen dieser Attribute hängt davon ab, welche Funktion Sie zum Erstellen der SAR aufrufen. Wenn Sie die funktion MFCreateAudioRenderer verwenden, gehen Sie wie folgt vor:
- Erstellen Sie einen neuen Attributspeicher, indem Sie MFCreateAttributesaufrufen.
- Fügen Sie die Attribute zum Attributspeicher hinzu.
- Übergeben Sie den Attributspeicher an die funktion MFCreateAudioRenderer im pAudioAttributes Parameter.
Wenn Sie die MFCreateAudioRendererActivate-Funktion verwenden, gibt die Funktion einen Zeiger auf die IMFAttributes Schnittstelle im ppActivate Parameter zurück. Verwenden Sie diesen Zeiger, um die Attribute hinzuzufügen.
Eine Liste der Konfigurationsattribute finden Sie unter Audiorendererattribute.
Auswählen des Audioendpunktgeräts
Ein Audioendpunktgerät ist ein Hardwaregerät, das Audio rendert oder erfasst. Beispiele sind Lautsprecher, Kopfhörer, Mikrofone und CD-Player. Die SAR verwendet immer ein Audiorenderinggerät. Es gibt zwei Möglichkeiten, das Gerät auszuwählen.
Der erste Ansatz besteht darin, die Audiorenderinggeräte auf dem System mithilfe der IMMDeviceEnumerator Schnittstelle auflisten. Diese Schnittstelle ist in der Hauptdokumentation der Audio-API dokumentiert.
- Erstellen Sie das Geräteenumeratorobjekt.
- Verwenden Sie die Geräteumerator zum Aufzählen von Audiorenderinggeräten. Jedes Gerät wird durch einen Zeiger auf die IMMDevice Schnittstelle dargestellt.
- Wählen Sie ein Gerät basierend auf den Geräteeigenschaften oder der Auswahl des Benutzers aus.
- Rufen Sie IMMDevice::GetId auf, um den Gerätebezeichner abzurufen.
- Legen Sie den Gerätebezeichner als Wert des attributs MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ID fest.
Anstatt Geräte auflisten, können Sie das Audiogerät anhand der Rolleangeben. Eine Audiorolle identifiziert eine allgemeine Kategorie der Verwendung. Beispielsweise wird die Konsole Rolle für Spiele und Systembenachrichtigungen definiert, während die Multimedia- Rolle für Musik und Filme definiert ist. Jeder Rolle ist ein Audiorenderinggerät zugewiesen, und der Benutzer kann diese Zuweisungen ändern. Wenn Sie eine Geräterolle angeben, verwendet die SAR, welches Audiogerät für diese Rolle zugewiesen wurde. Um die Geräterolle anzugeben, legen Sie das attribut MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ROLE fest.
Die beiden in diesem Abschnitt aufgeführten Attribute schließen sich gegenseitig aus. Wenn Sie keines davon festlegen, verwendet die SAR das Audiogerät, das der rolle eConsole zugewiesen ist.
Der folgende Code listet die Audiorenderinggeräte auf und weist dem SAR das erste Gerät in der Liste zu. In diesem Beispiel wird die MFCreateAudioRenderer--Funktion verwendet, um die SAR zu erstellen.
#include <mmdeviceapi.h>
HRESULT hr = S_OK;
IMMDeviceEnumerator *pEnum = NULL; // Audio device enumerator.
IMMDeviceCollection *pDevices = NULL; // Audio device collection.
IMMDevice *pDevice = NULL; // An audio device.
IMFAttributes *pAttributes = NULL; // Attribute store.
IMFMediaSink *pSink = NULL; // Streaming audio renderer (SAR)
LPWSTR wstrID = NULL; // Device ID.
// Create the device enumerator.
hr = CoCreateInstance(
__uuidof(MMDeviceEnumerator),
NULL,
CLSCTX_ALL,
__uuidof(IMMDeviceEnumerator),
(void**)&pEnum
);
// Enumerate the rendering devices.
if (SUCCEEDED(hr))
{
hr = pEnum->EnumAudioEndpoints(eRender, DEVICE_STATE_ACTIVE, &pDevices);
}
// Get ID of the first device in the list.
if (SUCCEEDED(hr))
{
hr = pDevices->Item(0, &pDevice);
}
if (SUCCEEDED(hr))
{
hr = pDevice->GetId(&wstrID);
}
// Create an attribute store and set the device ID attribute.
if (SUCCEEDED(hr))
{
hr = MFCreateAttributes(&pAttributes, 2);
}
if (SUCCEEDED(hr))
{
hr = pAttributes->SetString(
MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ID,
wstrID
);
}
// Create the audio renderer.
if (SUCCEEDED(hr))
{
hr = MFCreateAudioRenderer(pAttributes, &pSink);
}
SAFE_RELEASE(pEnum);
SAFE_RELEASE(pDevices);
SAFE_RELEASE(pDevice);
SAFE_RELEASE(pAttributes);
CoTaskMemFree(wstrID);
Um das Aktivierungsobjekt für die SAR zu erstellen, ändern Sie den Code, der nach dem Aufruf von IMMDevice::GetId angezeigt wird:
IMFActivate *pActivate = NULL; // Activation object.
if (SUCCEEDED(hr))
{
hr = MFCreateAudioRendererActivate(&pActivate);
}
if (SUCCEEDED(hr))
{
hr = pActivate->SetString(
MF_AUDIO_RENDERER_ATTRIBUTE_ENDPOINT_ID,
wstrID
);
}
SAFE_RELEASE(pActivate);
Auswählen der Audiositzung
Eine Audiositzung ist eine Gruppe verwandter Audiodatenströme, die von einer Anwendung gemeinsam verwaltet werden können. Die Anwendung kann den Lautstärke- und Stummschaltungszustand jeder Sitzung steuern. Sitzungen werden durch GUID identifiziert. Verwenden Sie das attribut MF_AUDIO_RENDERER_ATTRIBUTE_SESSION_ID, um die Audiositzung für die SAR anzugeben. Wenn Sie dieses Attribut nicht festlegen, nimmt die SAR an der Standardsitzung für diesen Prozess teil, die durch GUID_NULLidentifiziert wird.
Standardmäßig ist eine Audiositzung prozessspezifisch, d. h. sie enthält nur Datenströme aus dem aufrufenden Prozess. Um einer prozessübergreifenden Sitzung beizutreten, legen Sie das attribut MF_AUDIO_RENDERER_ATTRIBUTE_FLAGS mit dem Wert MF_AUDIO_RENDERER_ATTRIBUTE_FLAGS_CROSSPROCESSfest.
Nachdem Sie die SAR erstellt haben, verwenden Sie die IMFAudioPolicy Schnittstelle, um der Sitzung einer Gruppe von Sitzungen beizutreten, die alle durch die gleiche Lautstärkeregelung in der Systemsteuerung gesteuert werden. Sie können diese Schnittstelle auch verwenden, um den Anzeigenamen und das Symbol festzulegen, das im Lautstärkesteuerelement angezeigt wird.
Steuern der Lautstärkestufen
Um die Masterlautstärke aller Datenströme in der Audiositzung der SAR zu steuern, verwenden Sie die IMFSimpleAudioVolume Schnittstelle. Verwenden Sie zum Steuern des Volumens eines einzelnen Datenstroms oder zum Steuern des Volumens einzelner Kanäle innerhalb eines Datenstroms die IMFAudioStreamVolume Schnittstelle. Beide Schnittstellen werden durch Aufrufen IMFGetService::GetServiceabgerufen. Sie können GetService- direkt auf der SAR aufrufen oder in der Mediensitzung aufrufen. Volumenstufen werden als Dämpfungswerte ausgedrückt. Für jeden Kanal ist die Dämpfungsebene das Produkt des Mastervolumes und des Kanalvolumes.
Verwandte Themen