Freigeben über


Wiedergeben einer Abfolge von Dateien

[Bei dem auf dieser Seite gezeigten Feature MFPlay handelt es sich um ein Legacyfeature. Es wurde durch MediaPlayer und IMFMediaEngine abgelöst. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass in neuem Code wenn möglich MediaPlayer und IMFMediaEngine anstelle von DirectShow verwendet wird. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, wenn möglich umgeschrieben wird, um die neuen APIs zu verwenden.]

In diesem Thema wird die Wiedergabe einer Abfolge von Audio-/Videodateien mit MFPlay beschrieben.

Im Thema Erste Schritte mit MFPlay wird die Wiedergabe einer einzelnen Mediendatei gezeigt. Sie können mit MFPlay auch eine Abfolge von Dateien wiedergeben.

Synchrone (blockierende) Methode

  1. Rufen Sie die IMFPMediaPlayer::CreateMediaItemFromURL-Methode auf. Die Methode erstellt ein Medienelement.
  2. Rufen Sie IMFPMediaPlayer::SetMediaItem auf, um das Medienelement für die Wiedergabe in die Warteschlange zu stellen.
  3. Rufen Sie IMFPMediaPlayer::Play auf, um die Wiedergabe zu starten.

Diese Schritte werden im folgenden Code gezeigt.

HRESULT OpenMediaFile(IMFPMediaPlayer *pPlayer, PCWSTR pwszURL)
{
    HRESULT hr = S_OK;
    
    IMFPMediaItem *pItem = NULL;

    hr = pPlayer->CreateMediaItemFromURL(
        sURL, 
        TRUE,  // Blocking call
        0,     // User data.
        &pItem
        );

    if (SUCCEEDED(hr))
    {
        hr = pPlayer->SetMediaItem(pItem);
    }

    if (SUCCEEDED(hr))
    {
       hr = pPlayer->Play();
    }

    if (pItem)
    {
        pItem->Release();
    }
    return hr;
}

Die CreateMediaItemFromURL-Methode akzeptiert die folgenden Parameter:

  • Der erste Parameter ist die URL der Datei.
  • Der zweite Parameter gibt an, ob die Methode blockiert. Das Festlegen des Werts TRUE, wie hier gezeigt, bewirkt, dass die Methode blockiert, bis das Medienelement erstellt ist.
  • Der dritte Parameter ordnet dem Medienelement einen beliebigen DWORD_PTR-Wert zu. Sie können diesen Wert später abrufen, indem Sie IMFPMediaItem::GetUserData aufrufen.
  • Der vierte Parameter empfängt einen Zeiger auf die IMFPMediaItem-Schnittstelle des Medienelements.

Asynchrone (nicht blockierende) Methode

Vermeiden Sie die blockierende Option, wenn Sie CreateMediaItemFromURL über Ihren Benutzeroberflächenthread aufrufen, denn der Abschluss des Vorgangs kann merklich Zeit in Anspruch nehmen. Die Methode öffnet in der Regel eine Datei- oder Netzwerkverbindung und liest genügend Daten, um die Dateiheader zu parsen, was alles einige Zeit dauern kann. Daher ist es im Allgemeinen besser, den zweiten Parameter auf FALSE festzulegen. Diese Option bewirkt, dass die Methode asynchron ausgeführt wird. Wenn die asynchrone Option verwendet wird, muss der letzte Parameter NULL sein:

    hr = pPlayer->CreateMediaItemFromURL(
        sURL, 
        FALSE,  // Non-blocking call.
        0,      // User data.
        NULL    // Must be NULL for the non-blocking call.
        );

Wenn das Medienelement erstellt wird, empfängt Ihre Anwendung ein MFP_EVENT_TYPE_MEDIAITEM_CREATED-Ereignis. Die Datenstruktur für dieses Ereignis enthält einen Zeiger auf das Medienelement. Übergeben Sie diesen Zeiger an die SetMediaItem-Methode, um das Element für die Wiedergabe in die Warteschlange zu stellen.

void OnMediaItemCreated(MFP_MEDIAITEM_CREATED_EVENT *pEvent)
{
    HRESULT hr = S_OK;
    if (FAILED(pEvent->header.hrEvent))
    {
        // Handle error. (Not shown.)
    }
    else
    {
        hr = g_pPlayer->SetMediaItem(pEvent->pMediaItem);
    }
}

Anforderungen

MFPlay erfordert Windows 7.

Verwenden von MFPlay für die Audio-/Videowiedergabe