Événements de la source sequencer

Lorsque la source sequenceur lit une séquence de fichiers, la session multimédia envoie généralement tous les mêmes événements qui sont envoyés pendant la lecture normale et qui sont répertoriés dans Événements de session multimédia. L’application obtient ces événements à l’aide de l’interface IMFMediaEventGenerator de media Session.

En outre, certains événements sont spécifiques aux segments de playlist.

Événement Description
MENewPresentation Indique à l’application de préinscrire la topologie suivante.
Pour assurer une transition transparente entre deux présentations consécutives, la source du séquenceur charge la topologie suivante à l’avance. Pendant que la topologie active est toujours en cours de lecture, la source du séquenceur envoie cet événement pour la topologie suivante, tant qu’une topologie ultérieure est disponible dans la source.
Ces données d’événement pour cet événement sont le descripteur de présentation de la topologie suivante. L’application est chargée de définir la topologie correspondante sur la session multimédia, comme décrit dans Utilisation de la source sequencer.
MEEndOfPresentationSegment La source du séquenceur déclenche cet événement lorsque la session multimédia a terminé de lire le segment actuel, si ce segment est suivi d’un autre segment. (Si le segment actuel est le dernier, la source du séquenceur déclenche l’événement MEEndOfPresentation à la place.)
La session multimédia transfère cet événement à l’application. En règle générale, l’application reçoit MEEndOfPresentationSegment une fois que la session multimédia a commencé à traiter le segment suivant, mais que les récepteurs multimédias fournissent toujours les exemples pour le segment précédent.
MESessionTopologyStatus, avec status MF_TOPOSTATUS_SINK_SWITCHED. La session multimédia déclenche cet événement lorsqu’elle effectue une transition vers la topologie suivante dans la source du séquenceur et que les récepteurs multimédias ont terminé la lecture de la topologie précédente. Cet événement contient un pointeur vers la topologie suivante.

 

Exemple 1 : Lecture sans ignorer

Lorsque la source du séquenceur est impliquée, le nombre d’événements que vous obtenez à partir de la session multimédia peut prêter à confusion, en particulier parce que les événements associés à un segment sont souvent entrelacés avec des événements pour le segment suivant.

Dans le premier exemple, l’application met en file d’attente trois segments, S1, S2 et S3. Le troisième segment a l’indicateur SequencerTopologyFlags_Last , pour signaler qu’il s’agit du dernier segment de la séquence. Le segment auquel correspond chaque événement est donné entre parenthèses. Les appels SetTopology de l’application sont également répertoriés pour rendre l’ordre des opérations plus clair.

Cette liste n’inclut pas tous les événements que vous pouvez recevoir. (Par exemple, il omet l’événement MESessionCapabilitiesChanged , qui est envoyé chaque fois que les fonctionnalités de session changent. Une application reçoit généralement plusieurs événements MESessionCapabilitiesChanged dans une présentation.) Les événements répertoriés ici sont ceux qui montrent la transition d’un segment à l’autre. Les événements les plus importants sont MENewPresentation, qui indique à l’application de préinscrire la topologie suivante, et MEEndOfPresentationSegment, qui signale la fin d’un segment (à l’exception du dernier segment).

Étant donné que les événements dans Media Foundation sont asynchrones et ne sont pas sérialisés avec des appels de méthode, l’ordre exact peut varier. Par exemple, vous pouvez recevoir MF_TOPOSTATUS_STARTED_SOURCE pour S1 avant que l’application appelle SetTopology pour S2.

En outre, il se peut que vous ne obteniez pas tous les événements répertoriés ici. Les événements MEEndOfPresentation et MESessionEnded , par exemple, ne sont pas envoyés, sauf si le dernier segment a l’indicateur SequencerTopologyFlags_Last .

Enfin, cette liste n’indique pas le passage du temps. La durée comprise entre « début de S1 » et « fin de S1 » correspond à la durée totale de S1, qui peut être de quelques secondes ou plusieurs heures, selon la source.

Exemple 2 : Lecture avec saut de segment

Dans cet exemple, l’application met en file d’attente les mêmes segments, mais passe au segment 3 pendant la lecture du segment 1. Dans ce cas, les événements suivants sont envoyés :

Lorsque l’application appelle Start pour passer au segment 3, la source du séquenceur annule le segment 1, qui est toujours en cours de lecture. L’événement MEEndOfPresentationSegment pour ce segment contient l’attribut MF_EVENT_SOURCE_TOPOLOGY_CANCELED, indiquant que le segment s’est terminé parce qu’il a été annulé. Ensuite, étant donné que le segment 2 est déjà pré-roulé, ce segment est démarré, puis immédiatement annulé. L’événement MEEndOfPresentationSegment pour le segment 2 contient également l’attribut MF_EVENT_SOURCE_TOPOLOGY_CANCELED . La session peut ensuite basculer vers le segment 3 et le lire normalement.

À propos de la source sequencer

Sequencer Source