Durées de présentation des séquences

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

Vue d’ensemble

La source du séquenceur 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ébut du média et l’heure d’arrêt du média d’un segment. Ces heures spécifient la position dans le fichier source où le segment commence et se termine. Par exemple, supposons que le fichier source dure 90 secondes. Si vous souhaitez 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 sélection. 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 playlists

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 échantillons avec des horodatages égaux à l’heure du mé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 offset est 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 calcul de ces conversions d’horodatage :

  • Exemple 1 : Supposons que le premier segment (S1) dure 10 secondes et que le deuxième segment (S2) a une heure de début de média égale à 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 étant de 10 secondes (la durée de S1), l’horodatage ajusté est : 0 + 10 − 0 = 10 secondes.
  • Exemple 2 : Supposons que le segment S1 dure 10 secondes et que S2 a une durée de démarrage du média de 5 secondes. Le premier échantillon de S2 a un horodatage de 5 secondes (temps multimédia). Le décalage étant de 10 secondes, 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émarrage 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 se réinitialise pas, et le temps de présentation augmente de façon monotone. 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 Start sur la source du séquenceur avec la valeur VT_EMPTY. La source du séquenceur 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. Après la recherche, l’horloge de présentation commence au décalage du segment . 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 du segment). Le décalage n’inclut pas la durée des segments S1 et S2. La source du séquenceur envoie un événement MESourceStarted avec une heure de début égale au décalage du segment, 10 secondes.

Après une recherche, si la lecture continue vers le segment suivant, la transition fonctionne comme dans 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à de l’heure d’arrêt du média. Le pipeline extrait autant de données de la source que le décodeur en a besoin, puis supprime les exemples de sortie du décodeur.
  • Les transformations peuvent être mises en mémoire tampon des données. Par exemple, un effet audio peut avoir besoin de le faire. Lorsqu’un segment se termine, l’horodatage du dernier exemple de la transformation est antérieur à la fin du segment, car la transformation retient certaines données. Lorsque le segment suivant démarre, l’horodatage du premier échantillon est légèrement antérieur au début du segment. Il n’y a pas d’intervalle 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 draine 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 une durée de présentation négative.

Modification des séquences

Dans une séquence d’édition, l’application spécifie les limites du segment à l’avance, en définissant les attributs MF_TOPOLOGY_PROJECTSTART et MF_TOPOLOGY_PROJECTSTOP . Le pipeline calcule les ajustements pour les 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 plus le décalage de segment.

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

Session multimédia

Sequencer Source