Comment effectuer un nettoyage

Le nettoyage est effectué pour rechercher instantanément des points spécifiques dans un fichier en interagissant avec une représentation visuelle du temps, comme une barre de défilement. Dans Media Foundation, le nettoyage signifie rechercher sur un fichier et obtenir un cadre mis à jour.

Pour plus d’informations sur le nettoyage, consultez À propos du contrôle de débit.

Pour effectuer le nettoyage

  1. Appelez MFGetService pour obtenir l’interface IMFRateControl à partir de la session multimédia.

    Notes

    N’obtenez pas l’interface IMFRateControl à partir de la source multimédia. Obtenez toujours l’interface à partir de la session multimédia.

     

  2. Appelez IMFRateControl::SetRate pour définir le taux de lecture sur zéro. Pour plus d’informations sur l’appel de cette méthode, consultez Comment définir le taux de lecture sur la session multimédia.

  3. Créez une position de recherche dans un PROPVARIANT en spécifiant l’heure de présentation à rechercher dans un type MFTIME .

  4. Appelez IMFMediaSession::Commencez par la position de recherche pour démarrer la lecture.

  5. Une fois l’opération de nettoyage terminée, la session multimédia envoie un événement MESessionScrubSampleComplete . Attendez cet événement avant d’appeler Démarrer à nouveau pour une autre opération de nettoyage.

Exemple

L’exemple de code suivant montre comment effectuer un nettoyage.

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

Une opération de nettoyage réussie génère l’événement MESessionScrubSampleComplete une fois que tous les récepteurs de flux sont mis à jour avec le nouveau cadre et que l’opération de nettoyage se termine correctement. Le nettoyage d’un fichier vidéo affiche le cadre recherché, mais ne génère pas de sortie audio.

L’application peut effectuer des étapes d’image en définissant le taux de lecture sur zéro, puis en passant un PROPVARIANT défini sur VT_EMPTY dans l’appel à IMFMediaSession::Start.

Session multimédia

Contrôle de taux