Partilhar via


Como reproduzir uma sequência de arquivos

[O recurso associado a esta página, MFPlay, é um recurso herdado. Foi substituído pelo MediaPlayer e IMFMediaEngine. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda enfaticamente que o novo código use o MediaPlayer and IMFMediaEngine em vez de DirectShow quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito, se possível, para usar as novas APIs.

Este tópico descreve como reproduzir uma sequência de arquivos de áudio/vídeo usando o MFPlay.

O tópico Introdução ao MFPlay mostra como reproduzir um único arquivo de mídia. Você também pode usar o MFPlay para reproduzir uma sequência de arquivos.

Método síncrono (bloqueio)

  1. Chame o método IMFPMediaPlayer::CreateMediaItemFromURL. O método cria um item de mídia.
  2. Chame IMFPMediaPlayer::SetMediaItem para incluir o item de mídia na fila para reprodução.
  3. Chame IMFPMediaPlayer::Play para iniciar a reprodução.

Essas etapas são mostradas no código a seguir.

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;
}

O método CreateMediaItemFromURL usa os seguintes parâmetros:

  • O primeiro parâmetro é o URL do arquivo.
  • O segundo parâmetro especifica se o método bloqueia. Especificar o valor TRUE, conforme mostrado aqui, faz com que o método seja bloqueado até que o item de mídia seja criado.
  • O terceiro parâmetro associa um valor de DWORD_PTR arbitrário ao item de mídia. Você pode obter esse valor posteriormente chamando IMFPMediaItem::GetUserData.
  • O quarto parâmetro recebe um ponteiro para a interface IMFPMediaItem do item de mídia.

Método assíncrono (sem bloqueio)

Evite a opção de bloqueio se você chamar CreateMediaItemFromURL do thread da interface do usuário, pois ela pode levar um tempo significativo para ser concluída. O método normalmente abre um arquivo ou conexão de rede e lê dados suficientes para analisar os cabeçalhos do arquivo, o que pode levar tempo. Portanto, geralmente é melhor definir o segundo parâmetro como FALSE. Essa opção faz com que o método seja executado de forma assíncrona. Quando a opção assíncrona é usada, o último parâmetro deve ser NULL:

    hr = pPlayer->CreateMediaItemFromURL(
        sURL, 
        FALSE,  // Non-blocking call.
        0,      // User data.
        NULL    // Must be NULL for the non-blocking call.
        );

Quando o item de mídia é criado, seu aplicativo recebe um evento MFP_EVENT_TYPE_MEDIAITEM_CREATED. A estrutura de dados do evento contém um ponteiro para o item de mídia. Passe esse ponteiro para o método SetMediaItem para colocar o item para reprodução na fila.

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

A MFPlay requer o Windows 7.

Usar a MFPlay para reprodução de áudio/vídeo