Como executar a limpeza
A limpeza é executada para procurar instantaneamente pontos específicos em um arquivo interagindo com uma representação visual de tempo, como uma barra de rolagem. No Media Foundation, esfregar significa procurar em um arquivo e obter um quadro atualizado.
Para obter informações sobre a limpeza, consulte Sobre o controle de taxa.
Para executar a limpeza
Chame MFGetService para obter a interface IMFRateControl da Sessão de Mídia.
Observação
Não obtenha a interface IMFRateControl da fonte de mídia. Sempre obtenha a interface da Sessão de Mídia.
Chame IMFRateControl::SetRate para definir a taxa de reprodução como zero. Para obter mais informações sobre como chamar esse método, consulte Como definir a taxa de reprodução na sessão de mídia.
Crie uma posição de busca em um PROPVARIANT especificando o tempo de apresentação a ser buscado em um tipo MFTIME .
Chame IMFMediaSession::Start com a posição de busca para iniciar a reprodução.
Quando a operação de limpeza for concluída, a Sessão de Mídia enviará um evento MESessionScrubSampleComplete . Aguarde esse evento antes de chamar Iniciar novamente para outra operação de limpeza.
Exemplo
O exemplo de código a seguir mostra como executar a limpeza.
HRESULT SkipToPosition (MFTIME SeekTime, IMFMediaSession *pMediaSession)
{
PROPVARIANT var;
PropVariantInit(&var);
IMFRateControl *pRateControl = NULL;
// Get the rate control service.
HRESULT hr = MFGetService(pMediaSession, MF_RATE_CONTROL_SERVICE, IID_PPV_ARGS(&pRateControl));
// Set the playback rate to zero without thinning.
if(SUCCEEDED(hr))
{
hr = pRateControl ->SetRate( FALSE, 0.0F);
}
// Create the Media Session start position.
if( SeekTime == PRESENTATION_CURRENT_POSITION )
{
var.vt = VT_EMPTY;
}
else
{
var.vt = VT_I8;
var.hVal.QuadPart = SeekTime;
}
// Start the Media Session.
if(SUCCEEDED(hr))
{
hr = pMediaSession->Start( NULL, &var);
}
// Clean up.
SafeRelease(&pRateControl);
PropVariantClear(&var)
return hr;
}
Uma operação de limpeza bem-sucedida gera o evento MESessionScrubSampleComplete depois que todos os coletores de fluxo são atualizados com o novo quadro e a operação de limpeza é concluída com êxito. A limpeza de um arquivo de vídeo exibe o quadro que foi buscado, mas não gera uma saída de áudio.
O aplicativo pode executar a etapa de quadro definindo a taxa de reprodução como zero e, em seguida, passando um PROPVARIANT definido como VT_EMPTY na chamada para IMFMediaSession::Start.
Tópicos relacionados