Partager via


Durées de présentation de séquence

Cette rubrique décrit comment la source Sequencer gère les heures de présentation pendant la lecture.

Aperçu

La source sequencer prend en charge deux modes différents : les séquences de sélection et les séquences de modification.

Dans une séquence d’édition, l’application spécifie la durée de chaque segment à l’avance, avant de commencer la lecture. Dans une séquence de playlists, l’application ne spécifie pas la durée à l’avance. (En fait, la durée peut ne pas être connue.)

Dans les deux cas, vous pouvez spécifier le démarrage multimédia d’un segment et l’heure d’arrêt du média. Ces heures spécifient la position dans le fichier source où le segment commence et se termine. Par exemple, supposons que le fichier source soit de 90 secondes. Si vous souhaitez découper les 10 premières secondes et les 10 dernières secondes, vous devez spécifier les valeurs suivantes :

  • Démarrage du média : 10 secondes
  • Arrêt du média : 80 secondes

Pour spécifier l’heure de début du média, définissez l’attribut MF_TOPONODE_MEDIASTART sur le nœud source. Pour spécifier l’heure d’arrêt du média, définissez l’attribut MF_TOPONODE_MEDIASTOP sur le nœud source.

Pour créer une séquence d’édition, définissez l’attribut MF_SESSION_GLOBAL_TIME lorsque vous créez la session multimédia. Sinon, la session multimédia attend des séquences de playlist. Dans une séquence d’édition, chaque topologie de segment doit avoir l’attribut MF_TOPOLOGY_PROJECTSTART et l’attribut MF_TOPOLOGY_PROJECTSTOP.

Séquences de playlist

Dans une séquence de playlists, l’horloge de présentation commence à zéro et se poursuit au-delà des limites de segment. Les sources natives fournissent des exemples avec des horodatages égaux à l’heure multimédia. Le pipeline convertit les horodatages en heure de présentation correcte comme suit :

  • Nouvel horodatage = heure du média + décalage − début du média

La valeur de décalage correspond à l’heure de présentation à laquelle le segment précédent s’est terminé. Pour le premier segment, le décalage est égal à zéro. Voici deux exemples de la façon dont ces conversions d’horodatage sont calculées :

  • Exemple 1 : Supposons que le premier segment (S1) soit long de 10 secondes, et que le deuxième segment (S2) a une heure de début de média de zéro. La source native utilise l’heure du média pour ses horodatages, de sorte que le premier échantillon de S2 a un horodatage de zéro. Le décalage est de 10 secondes (durée de S1), de sorte que l’horodatage ajusté est :0 + 10 − 0 = 10 secondes.
  • Exemple 2 : Supposons que le segment S1 soit de 10 secondes et que S2 dispose d’une durée de début multimédia de 5 secondes. Le premier échantillon de S2 a un horodatage de 5 secondes (temps multimédia). Le décalage est de 10 secondes, de sorte que l’horodatage ajusté est :5 + 10 − 5 = 10 secondes.

Tous les composants de pipeline en aval des nœuds sources reçoivent des exemples avec les horodatages ajustés. Les nœuds sources d’une topologie peuvent avoir des heures de début de média différentes, de sorte que les ajustements sont calculés séparément pour chaque branche de la topologie.

Lorsque la présentation passe au segment suivant, l’horloge de la présentation ne s’arrête pas ou ne réinitialise pas, et le temps de présentation augmente monotoniquement. Avant le démarrage d’un nouveau segment, la session multimédia envoie à l’application un événement MESessionNotifyPresentationTime. L’événement spécifie l’heure de début du segment, par rapport à l’horloge de présentation et la valeur du décalage. Lorsqu’un nouveau segment démarre, le pipeline appelle Démarrer sur la source du séquenceur avec la valeur VT_EMPTY. La source sequencer envoie un événement MESourceStarted sans heure de début.

Pour rechercher, l’application spécifie un identificateur de segment plus un décalage de temps dans le segment. Une fois la recherche terminée, l’horloge de présentation commence au segment décalage. Voici un exemple de fonctionnement de ce processus :

  • Exemple 3 : L’application cherche à segmenter S3, avec un décalage de segment de 10 secondes. L’horloge de présentation commence à 10 secondes (décalage de segment). Le décalage n’inclut pas la durée des segments S1 et S2. La source sequencer envoie un événement MESourceStarted avec une heure de début égale au décalage de segment, 10 secondes.

Après une recherche, si la lecture continue vers le segment suivant, la transition fonctionne comme les exemples précédents, sauf que le décalage n’inclut pas les segments ignorés.

Voici quelques détails supplémentaires qui affectent la façon dont les échantillons sont horodatés :

  • Les décodeurs peuvent avoir besoin de données au-delà du temps d’arrêt du média. Le pipeline extrait autant de données de la source que le décodeur, puis supprime les exemples de sortie du décodeur.
  • Les transformations peuvent tamponner les données. Par exemple, un effet audio peut avoir besoin d’effectuer cette opération. Lorsqu’un segment se termine, l’horodatage sur le dernier échantillon de la transformation est antérieur à la fin du segment, car la transformation retenait certaines données. Lorsque le segment suivant démarre, l’horodatage sur le premier échantillon est légèrement antérieur au début du segment. Il n’y a pas d’écart dans les horodatages, de sorte que les données qui atteignent le récepteur multimédia sont continues. Lorsque le segment final se termine, le pipeline vide la transformation, de sorte qu’aucune donnée n’est perdue.
  • La source peut avoir besoin de démarrer un peu plus tôt que l’heure de début du média pour récupérer l’image clé précédente. Par conséquent, après l’ajustement, le premier échantillon peut avoir un temps de présentation négatif.

Modification de séquences

Dans une séquence d’édition, l’application spécifie les limites de segment à l’avance, en définissant les attributs MF_TOPOLOGY_PROJECTSTART et MF_TOPOLOGY_PROJECTSTOP. Le pipeline calcule les ajustements des horodatages de la même façon que pour une séquence de playlists :

  • Pour le décalage, il utilise la valeur de MF_TOPOLOGY_PROJECTSTART, au lieu d’utiliser la fin observée du segment.

  • Pour la recherche, le décalage utilise une valeur égale à la valeur MF_TOPOLOGY_PROJECTSTART du segment et au décalage de segment.

Par conséquent, l’heure de présentation dans une séquence d’édition est toujours relative au début de la présentation, même si l’application cherche à un autre segment.

de session multimédia

source Sequencer