共用方式為


如何播放一連串的檔案

[與此頁面 MFPlay 相關聯的功能是舊版功能。 它已被 MediaPlayerIMFMediaEngine 取代。 這些功能已針對 Windows 10 和 Windows 11 進行優化。 Microsoft強烈建議新程式代碼盡可能使用 MediaPlayerIMFMediaEngine,而不是 DirectShow。 Microsoft建議使用舊版 API 的現有程式代碼,盡可能改寫成使用新的 API。]

本主題描述如何使用 MFPlay 播放一系列音訊/視訊檔案。

開始使用 MFPlay 主題示範如何播放單一媒體檔案。 您也可以使用 MFPlay 播放一連串的檔案。

同步 (封鎖) 方法

  1. 呼叫 IMFPMediaPlayer::CreateMediaItemFromURL 方法。 方法會建立媒體專案。
  2. 呼叫 IMFPMediaPlayer::SetMediaItem 將媒體專案排入佇列以供播放。
  3. 呼叫 IMFPMediaPlayer::P lay 開始播放。

下列程式碼顯示這些步驟。

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;
}

CreateMediaItemFromURL 方法會採用下列參數:

  • 第一個參數是檔案的 URL。
  • 第二個參數會指定方法是否封鎖。 如這裡所示,指定 TRUE 值會導致 方法封鎖,直到建立媒體項目為止。
  • 第三個參數會將任意 DWORD_PTR 值與媒體專案產生關聯。 您稍後可以呼叫 IMFPMediaItem::GetUserData 來取得此值。
  • 第四個參數會接收媒體專案之 IMFPMediaItem 介面的指標

異步 (非封鎖) 方法

如果您從UI線程呼叫 CreateMediaItemFromURL ,請避免封鎖選項,因為可能需要相當長的時間才能完成。 方法通常會開啟檔案或網路連線,並讀取足夠的數據來剖析檔案標頭,這一切可能需要一些時間。 因此,通常最好將第二個參數設定為 FALSE。 此選項會讓方法以異步方式執行。 使用異步選項時,最後一個參數必須是 NULL

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

建立媒體專案時,您的應用程式會收到 MFP_EVENT_TYPE_MEDIAITEM_CREATED 事件。 此事件的數據結構包含媒體專案的指標。 將此指標傳遞至 SetMediaItem 方法,以將專案排入佇列以供播放。

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);
    }
}

需求

MFPlay 需要 Windows 7。

使用 MFPlay 進行音訊/視訊播放