次の方法で共有


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

[MFPlay は、[要件] セクションで指定したオペレーティング システムで使用できます。 今後のバージョンでは変更されるか、利用できなくなる場合もあります。 ]

このトピックでは、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 を使用する