次の方法で共有


一連のファイルを再生する方法

[このページに関連付けられている機能である MFPlay はレガシ機能です。 これは MediaPlayer および IMFMediaEngine に置き換えられました。 これらの機能は、Windows 10 および Windows 11 用に最適化されています。 Microsoftでは、新しいコードで可能な限り DirectShow ではなく MediaPlayerIMFMediaEngine を使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存コードを、新しい API を使用するように可能であれば書き直すことを提案しています。]

このトピックでは、MFPlay を使用して一連のオーディオ/ビデオ ファイルを再生する方法について説明します。

MFPlay の概要」トピックでは、1 つのメディア ファイルを再生する方法を示します。 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 です。
  • 2 番目のパラメーターは、メソッドがブロックされるかどうかを指定します。 次に示すように、値 TRUE を指定すると、メディア項目が作成されるまでメソッドがブロックされます。
  • 3 番目のパラメーターは、任意の DWORD_PTR 値をメディア項目に関連付けます。 この値は、後で IMFPMediaItem::GetUserData を呼び出すことによって取得できます。
  • 4 番目のパラメーターは、メディア項目の IMFPMediaItem インターフェイスへのポインターを受け取ります。

非同期 (非ブロッキング) メソッド

UI スレッドから CreateMediaItemFromURL を呼び出す場合は、ブロック オプションを使用しないでください。完了するまでにかなりの時間がかかる可能性があるためです。 このメソッドは通常、ファイルまたはネットワーク接続を開き、ファイル ヘッダーを解析するのに十分なデータを読み取りますが、これには時間がかかることがあります。 したがって、通常は 2 番目のパラメーターを 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 を使用する