Så här utför du rensning
Scrubning utförs för att omedelbart söka efter specifika punkter i en fil genom att interagera med en visuell tidsrepresentation, till exempel en rullningslist. I Media Foundation innebär rensning att söka efter en fil och få en uppdaterad ram.
Information om rensning finns i Om hastighetskontroll.
För att utföra rensning
Anropa MFGetService för att hämta gränssnittet IMFRateControl från Media Session.
Notera
Hämta inte IMFRateControl-gränssnittet från mediekällan. Hämta alltid gränssnittet från mediasessionen.
Anropa IMFRateControl::SetRate för att ange uppspelningshastigheten till noll. Mer information om hur du anropar den här metoden finns i Så här ställer du in uppspelningshastigheten på mediasessionen.
Skapa en sökposition i en PROPVARIANT- genom att ange den presentationstid som ska sökas i en MFTIME- typ.
Anropa IMFMediaSession::Start med sökpositionen för att starta uppspelningen.
När skrubbningen är klar skickar mediasessionen en MESessionScrubSampleComplete-händelse. Vänta på den här händelsen innan du anropar Starta igen för ytterligare en rensningsåtgärd.
Exempel
Följande kodexempel visar hur du utför rensning.
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;
}
En lyckad rensningsåtgärd genererar MESessionScrubSampleComplete-händelsen efter att alla strömsänkor har uppdaterats med den nya ramen och rensningsåtgärden har slutförts. När du skrubbar en videofil visas den bildruta man siktade på, men genererar inga ljudutdata.
Applikationen kan utföra ramstegning genom att ställa in uppspelningshastigheten till noll och sedan skicka en PROPVARIANT som ställs in till VT_EMPTY i anropet till IMFMediaSession::Start.
Relaterade ämnen