Compartir a través de


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)

  1. Llame al método IMFPMediaPlayer::CreateMediaItemFromURL. El método crea un elemento multimedia.
  2. Llame a IMFPMediaPlayer::SetMediaItem para poner en cola el elemento multimedia para su reproducción.
  3. 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.

Uso de MFPlay para reproducción de audio y vídeo