Freigeben über


IAudioSessionEnumerator-Schnittstelle (audiopolicy.h)

Die IAudioSessionEnumerator-Schnittstelle listet Audiositzungen auf einem Audiogerät auf. Um einen Verweis auf die IAudioSessionEnumerator-Schnittstelle des Sitzungsenumeratorobjekts abzurufen, muss die Anwendung IAudioSessionManager2::GetSessionEnumerator aufrufen.

Vererbung

Die IAudioSessionEnumerator-Schnittstelle erbt von der IUnknown-Schnittstelle . IAudioSessionEnumerator verfügt auch über folgende Membertypen:

Methoden

Die IAudioSessionEnumerator-Schnittstelle verfügt über diese Methoden.

 
IAudioSessionEnumerator::GetCount

Die GetCount-Methode ruft die Gesamtanzahl der Audiositzungen ab, die auf dem Audiogerät geöffnet sind.
IAudioSessionEnumerator::GetSession

Die GetSession-Methode ruft die Audiositzung ab, die durch eine Audiositzungsnummer angegeben wird.

Hinweise

Wenn eine Anwendung benachrichtigt werden möchte, wenn neue Sitzungen erstellt werden, muss sie ihre Implementierung von IAudioSessionNotification beim Sitzungs-Manager registrieren. Nach erfolgreicher Registrierung sendet der Sitzungs-Manager create-session-Benachrichtigungen in Form von Rückrufen an die Anwendung. Diese Benachrichtigungen enthalten einen Verweis auf den IAudioSessionControl-Zeiger der neu erstellten Sitzung.

Der Sitzungsenumerator verwaltet eine Liste der aktuellen Sitzungen, indem er Verweise auf den IAudioSessionControl-Zeiger jeder Sitzung enthält. Der Sitzungsenumerator ist jedoch möglicherweise nicht über die neuen Sitzungen informiert, die über IAudioSessionNotification gemeldet werden. In diesem Fall hätte die Anwendung nur Zugriff auf eine partielle Liste von Sitzungen. Dies kann auftreten, wenn der IAudioSessionControl-Zeiger (im Rückruf) vor der Initialisierung des Sitzungsenumerators freigegeben wird. Wenn eine Anwendung einen vollständigen Satz von Sitzungen für den Audioendpunkt wünscht, sollte die Anwendung daher eine eigene Liste verwalten.

Die Anwendung muss die folgenden Schritte ausführen, um Sitzungsbenachrichtigungen zu empfangen und eine Liste der aktuellen Sitzungen zu verwalten.

  1. Initialisieren Sie COM mit dem MTA-Modell (Multithreaded Apartment), indem Sie in einem Nicht-UI-Thread aufrufen CoInitializeEx(NULL, COINIT_MULTITHREADED) . Wenn MTA nicht initialisiert wird, empfängt die Anwendung keine Sitzungsbenachrichtigungen vom Sitzungs-Manager.
    Hinweis Threads, die die Benutzeroberfläche einer Anwendung ausführen, sollten mit dem Apartmentthreadingmodell initialisiert werden.
     
  2. Aktivieren Sie eine IAudioSessionManager2-Schnittstelle vom Audioendpunktgerät. Rufen Sie IMMDevice::Activate auf, wobei parameter iid auf IID_IAudioSessionManager2 festgelegt ist. Dieser Aufruf empfängt einen Verweis auf die IAudioSessionManager2-Schnittstelle des Sitzungs-Managers im ppInterface-Parameter .
  3. Implementieren Sie die IAudioSessionNotification-Schnittstelle , um das Rückrufverhalten bereitzustellen.
  4. Rufen Sie IAudioSessionManager2::RegisterSessionNotification auf, um die Implementierung von IAudioSessionNotification in der Anwendung zu registrieren.
  5. Erstellen und initialisieren Sie das Sitzungsenumeratorobjekt, indem Sie IAudioSessionManager2::GetSessionEnumerator aufrufen. Diese Methode generiert eine Liste der aktuellen Sitzungen, die für den Endpunkt verfügbar sind, und fügt die IAudioSessionControl-Zeiger für jede Sitzung in der Liste hinzu, sofern sie noch nicht vorhanden sind.
  6. Verwenden Sie die IAudioSessionEnumerator-Schnittstelle , die im vorherigen Schritt zurückgegeben wurde, um die Liste der Sitzungen abzurufen und aufzulisten. Das Sitzungssteuerelement für jede Sitzung kann durch Aufrufen von IAudioSessionEnumerator::GetSession abgerufen werden. Stellen Sie sicher, dass Sie AddRef für jedes Sitzungssteuerelement aufrufen, um die Verweisanzahl beizubehalten.
  7. Wenn die Anwendung eine Create-Session-Benachrichtigung erhält, fügen Sie der Liste der vorhandenen Sitzungen den IAudioSessionControl-Zeiger der neuen Sitzung (empfangen in IAudioSessionNotification::OnSessionCreated) hinzu.
Da die Anwendung diese Liste der Sitzungen verwaltet und die Lebensdauer der Sitzung basierend auf den Anforderungen der Anwendung verwaltet, gibt es keinen Ablaufmechanismus, der vom Audiosystem für die Sitzungssteuerungsobjekte erzwungen wird.

Ein Sitzungssteuerelement ist gültig, solange die Anwendung einen Verweis auf das Sitzungssteuerelement in der Liste enthält.

Beispiele

Der folgende Beispielcode zeigt, wie Sie das Sitzungsenumeratorobjekt erstellen und dann Sitzungen auflisten.

HRESULT EnumSessions(IAudioSessionManager2* pSessionManager)
{
    if (!pSessionManager)
    {
        return E_INVALIDARG;
    }

    HRESULT hr = S_OK;
    
    int cbSessionCount = 0;
    LPWSTR pswSession = NULL;
    
    IAudioSessionEnumerator* pSessionList = NULL;
    IAudioSessionControl* pSessionControl = NULL;
    
    // Get the current list of sessions.
    CHECK_HR( hr = pSessionManager->GetSessionEnumerator(&pSessionList));
    
    // Get the session count.
    CHECK_HR( hr = pSessionList->GetCount(&cbSessionCount));

    for (int index = 0 ; index < cbSessionCount ; index++)
    {
        CoTaskMemFree(pswSession);
        SAFE_RELEASE(pSessionControl);
        
        // Get the <n>th session.
        CHECK_HR(hr = pSessionList->GetSession(index, &pSessionControl));

        CHECK_HR(hr = pSessionControl->GetDisplayName(&pswSession));

        wprintf_s(L"Session Name: %s\n", pswSession);
    }

done:
    CoTaskMemFree(pswSession);
    SAFE_RELEASE(pSessionControl);
    SAFE_RELEASE(pSessionList);

    return hr;

}

Anforderungen

   
Unterstützte Mindestversion (Client) Windows 7 [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 R2 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile audiopolicy.h

Weitere Informationen

Kernaudioschnittstellen