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)
- Chame o método IMFPMediaPlayer::CreateMediaItemFromURL. O método cria um item de mídia.
- Chame IMFPMediaPlayer::SetMediaItem para incluir o item de mídia na fila para reprodução.
- 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.
Tópicos relacionados