Share via


Wiedergeben einer Sequenz von Dateien

[MFPlay ist für die Verwendung in den Betriebssystemen verfügbar, die im Abschnitt Anforderungen angegeben sind. Es kann in nachfolgenden Versionen geändert oder entfernt werden. ]

In diesem Thema wird beschrieben, wie Eine Sequenz von Audio-/Videodateien mithilfe von MFPlay wiedergegeben wird.

Das Thema Erste Schritte mit MFPlay zeigt, wie eine einzelne Mediendatei wiedergegeben wird. Sie können MFPlay auch verwenden, um eine Sequenz von Dateien wiederzugeben.

Synchrone Methode (Blockierung)

  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::P lay 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 verwendet die folgenden Parameter:

  • Der erste Parameter ist die URL der Datei.
  • Der zweite Parameter gibt an, ob die Methode blockiert. Wenn Sie den Wert TRUE angeben, wie hier gezeigt, wird die -Methode blockiert, bis das Medienelement erstellt wird.
  • 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 Blockierungsoption, wenn Sie CreateMediaItemFromURL über Ihren UI-Thread aufrufen, da die Ausführung spürbar viel Zeit in Anspruch nehmen kann. Die Methode öffnet in der Regel eine Datei- oder Netzwerkverbindung und liest genügend Daten, um die Dateiheader zu analysieren, was alle Zeit in Anspruch nehmen 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