Воспроизведение последовательности файлов
[Функция, связанная с этой страницей MFPlay, является устаревшей функцией. Он был заменен MediaPlayer и МВФMediaEngine. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать новый код MediaPlayer и IMFMediaEngine вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]
В этом разделе описывается, как воспроизводить последовательность звуковых и видеофайлов с помощью MFPlay.
В разделе " Начало работы с MFPlay" показано, как воспроизводить один файл мультимедиа. Для воспроизведения последовательности файлов можно также использовать MFPlay.
Синхронный метод (блокировка)
- Вызовите метод IMFPMediaPlayer::CreateMediaItemFromURL. Метод создает элемент мультимедиа.
- Вызовите МВФPMediaPlayer::SetMediaItem , чтобы очередь элемента мультимедиа для воспроизведения.
- ВызовИТЕ МВФPMediaPlayer::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 значение с элементом мультимедиа. Это значение можно получить позже, вызвав МВФPMediaItem::GetUserData.
- Четвертый параметр получает указатель на интерфейс IMFPMediaItem элемента мультимедиа.
Асинхронный (неблокирующий) метод
Избегайте параметра блокировки при вызове 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.
См. также