Share via


Cómo reproducir una secuencia de archivos

[MFPlay está disponible para su uso en los sistemas operativos especificados en la sección Requisitos. En versiones posteriores podría modificarse o no estar disponible. ]

En este tema se describe cómo reproducir una secuencia de archivos de audio y vídeo mediante MFPlay.

El tema Introducción con MFPlay muestra cómo reproducir un único archivo multimedia. También puede usar MFPlay para reproducir una secuencia de archivos.

Método sincrónico (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. Llama a IMFPMediaPlayer::P lay 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 la dirección URL del archivo.
  • El segundo parámetro especifica si el método se bloquea. Si se especifica el valor TRUE, como se muestra aquí, el método se bloquea hasta que se crea el elemento multimedia.
  • El tercer parámetro asocia un valor DWORD_PTR arbitrario 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 asincrónico (sin bloqueo)

Evite la opción de bloqueo si llama a CreateMediaItemFromURL desde el subproceso de la interfaz de usuario, ya que puede tardar un tiempo notable en completarse. Normalmente, el método abre un archivo o una conexión de red y lee suficientes datos para analizar los encabezados de archivo, todos los cuales pueden tardar tiempo. Por lo tanto, generalmente es mejor establecer el segundo parámetro en FALSE. Esta opción hace que el método se realice de forma asincrónica. Cuando se usa la opción asincrónica, 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 de 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 su reproducción.

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 la reproducción de audio y vídeo