Cómo reproducir una secuencia de archivos
[La característica asociada con esta página, MFPlay, es una característica heredada. Se ha reemplazado por MediaPlayer y IMFMediaEngine. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda que el nuevo código use MediaPlayer y IMFMediaEngine en vez de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible].
En este tema se explica cómo reproducir una secuencia de archivos de audio y vídeo mediante MFPlay.
En el tema Introducción a MFPlay se describe cómo reproducir un único archivo multimedia. También puede usar MFPlay para reproducir una secuencia de archivos.
Método síncrono (bloqueo)
- Llame al método IMFPMediaPlayer::CreateMediaItemFromURL. El método crea un elemento multimedia.
- Llame a IMFPMediaPlayer::SetMediaItem para poner en cola el elemento multimedia para su reproducción.
- Llame a IMFPMediaPlayer::Play para iniciar la reproducción.
Estos pasos se muestran en el código siguiente.
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;
}
El método CreateMediaItemFromURL toma los parámetros siguientes:
- El primer parámetro es el URL del archivo.
- El segundo parámetro indica si el método se bloquea. Al especificar el valor TRUE, tal como se muestra aquí, el método se bloquea hasta que se crea el elemento multimedia.
- El tercer parámetro asocia un valor arbitrario DWORD_PTR con el elemento multimedia. Puede obtener este valor más adelante llamando a IMFPMediaItem::GetUserData.
- El cuarto parámetro recibe un puntero a la interfaz IMFPMediaItem del elemento multimedia.
Método asíncrono (sin bloqueo)
Evite la opción de bloqueo si llama a CreateMediaItemFromURL a través del subproceso de la interfaz de usuario, ya que puede tardar bastante tiempo en completarse. Por lo general, el método abre un archivo o una conexión de red y lee suficientes datos para analizar los encabezados de archivo, lo que puede tardar tiempo. Por tanto, generalmente es mejor pasar el segundo parámetro a FALSE. Esta opción hace que el método se aplique de forma asíncrona. Cuando se usa la opción asíncrona, el último parámetro debe ser NULL:
hr = pPlayer->CreateMediaItemFromURL(
sURL,
FALSE, // Non-blocking call.
0, // User data.
NULL // Must be NULL for the non-blocking call.
);
Cuando se crea el elemento multimedia, la aplicación recibe un evento MFP_EVENT_TYPE_MEDIAITEM_CREATED. La estructura de datos de este evento contiene un puntero al elemento multimedia. Pase este puntero al método SetMediaItem para poner en cola el elemento para reproducirlo.
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);
}
}
Requisitos
MFPlay requiere Windows 7.
Temas relacionados