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, telle qu’une barre de défilement. Dans Media Foundation, le nettoyage signifie la recherche sur un fichier et l’obtention d’une trame mise à jour.

Pour plus d’informations sur le nettoyage, consultez à propos du contrôle du taux.

Pour effectuer un nettoyage

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

    Notes

    N’obtient pas l’interface IMFRateControl à partir de la source du média. Récupérez toujours l’interface à partir de la session multimédia.

  2. Appelez IMFRateControl :: se. pour définir la vitesse de lecture sur zéro. Pour plus d’informations sur l’appel de cette méthode, consultez comment définir la vitesse 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 de la recherche dans un type MFTIME .

  4. Appelez IMFMediaSession :: Start avec la position de recherche pour démarrer la lecture.

  5. Lorsque l’opération de nettoyage est terminée, la session multimédia envoie un événement MESessionScrubSampleComplete . Attendez que cet événement soit redémarré pour une autre opération de nettoyage.

Exemples

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éussi génère l’événement MESessionScrubSampleComplete une fois que tous les récepteurs de flux ont été mis à jour avec le nouveau Frame et que l’opération de nettoyage s’est terminée avec succès. Le nettoyage d’un fichier vidéo affiche le frame auquel il a été fait, mais ne génère pas de sortie audio.

L’application peut effectuer une exécution pas à pas en définissant la vitesse de lecture sur zéro, puis en passant un PROPVARIANT défini sur VT _ vide dans l’appel à IMFMediaSession :: Start.

Session multimédia

Contrôle de la fréquence