Como reproduzir um clipe de arquivo
[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 um segmento de um arquivo de mídia no MFPlay definindo os horários de início e término da reprodução.
Para reproduzir um clipe de arquivo
- Call IMFPMediaPlayer::CreateMediaItemFromURL ou IMFPMediaPlayer::CreateMediaItemFromObject para criar um item de mídia para o arquivo.
- Opcionalmente, obtenha a duração total do arquivo conforme descrito em Como obter a duração da reprodução.
- Chame IMFPMediaItem::SetStartStopPosition para definir os horários de início e término. O horário de término não deve exceder a duração do arquivo.
- Chame IMFPMediaPlayer::SetMediaItem para iniciar a reprodução.
O exemplo a seguir usa a versão de bloqueio de CreateMediaItemFromURL. Se a versão sem bloqueio for usada, o código exibido após CreateMediaItemFromURL deverá ser colocado no identificador do evento MFP_EVENT_TYPE_MEDIAITEM_CREATED. Para obter mais informações sobre eventos no MFPlay, confira Receber eventos do player.
Para obter a duração do arquivo, este exemplo chama a função GetPlaybackDuration
mostrada no tópico Como obter a duração da reprodução.
HRESULT PlayMediaClip(
IMFPMediaPlayer *pPlayer,
PCWSTR pszURL,
LONGLONG hnsStart,
LONGLONG hnsEnd
)
{
IMFPMediaItem *pItem = NULL;
PROPVARIANT varStart, varEnd;
ULONGLONG hnsDuration = 0;
HRESULT hr = pPlayer->CreateMediaItemFromURL(pszURL, TRUE, 0, &pItem);
if (FAILED(hr))
{
goto done;
}
hr = GetPlaybackDuration(pItem, &hnsDuration);
if (FAILED(hr))
{
goto done;
}
if ((ULONGLONG)hnsEnd > hnsDuration)
{
hnsEnd = hnsDuration;
}
hr = InitPropVariantFromInt64(hnsStart, &varStart);
if (FAILED(hr))
{
goto done;
}
hr = InitPropVariantFromInt64(hnsEnd, &varEnd);
if (FAILED(hr))
{
goto done;
}
hr = pItem->SetStartStopPosition(
&MFP_POSITIONTYPE_100NS,
&varStart,
&MFP_POSITIONTYPE_100NS,
&varEnd
);
if (FAILED(hr))
{
goto done;
}
hr = pPlayer->SetMediaItem(pItem);
done:
SafeRelease(&pItem);
return hr;
}
Requisitos
A MFPlay requer o Windows 7.
Tópicos relacionados