一連のファイルを再生する方法
[MFPlay は、[要件] セクションで指定したオペレーティング システムで使用できます。 今後のバージョンでは変更されるか、利用できなくなる場合もあります。 ]
このトピックでは、MFPlay を使用して一連のオーディオ/ビデオ ファイルを再生する方法について説明します。
MFPlay ではじめにトピックでは、1 つのメディア ファイルを再生する方法を示します。 MFPlay を使用して一連のファイルを再生することもできます。
同期 (ブロック) メソッド
- IMFPMediaPlayer::CreateMediaItemFromURL メソッドを呼び出します。 メソッドは、メディア項目を作成します。
- IMFPMediaPlayer::SetMediaItem を呼び出して、再生のためにメディア項目をキューに入れます。
- 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 が必要です。
関連トピック
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示