Freigeben über


Sequenzpräsentationszeiten

In diesem Thema wird beschrieben, wie die Sequencer-Quelle die Präsentationszeiten während der Wiedergabe verarbeitet.

Übersicht

Die Sequenzerquelle unterstützt zwei verschiedene Modi: Wiedergabesequenzen und Bearbeitungssequenzen.

In einer Bearbeitungssequenz gibt die Anwendung die Dauer jedes Segments im Voraus an, bevor die Wiedergabe beginnt. In einer Wiedergabeliste gibt die Anwendung die Dauer nicht im Voraus an. (Tatsächlich ist die Dauer möglicherweise nicht bekannt.)

In beiden Fällen können Sie die Medienstart- und Medienstoppzeit eines Segments angeben. Diese Zeiten geben die Position in der Quelldatei an, an der das Segment beginnt und endet. Angenommen, die Quelldatei ist 90 Sekunden lang. Wenn Sie die ersten 10 Sekunden und die letzten 10 Sekunden kürzen möchten, geben Sie die folgenden Werte an:

  • Medienstart: 10 Sekunden
  • Medienstopp: 80 Sekunden

Um die Medienstartzeit anzugeben, legen Sie das Attribut MF_TOPONODE_MEDIASTART auf dem Quellknoten fest. Um die Medienstoppzeit anzugeben, legen Sie das attribut MF_TOPONODE_MEDIASTOP auf dem Quellknoten fest.

Um eine Bearbeitungssequenz zu erstellen, legen Sie das attribut MF_SESSION_GLOBAL_TIME fest, wenn Sie die Mediensitzung erstellen. Andernfalls erwartet die Mediensitzung Wiedergabelistensequenzen. In einer Bearbeitungssequenz muss jede Segmenttopologie über das attribut MF_TOPOLOGY_PROJECTSTART und das Attribut MF_TOPOLOGY_PROJECTSTOP verfügen.

Wiedergabelistensequenzen

In einer Wiedergabeliste beginnt die Präsentationsuhr bei null und wird über Segmentgrenzen hinweg fortgesetzt. Die nativen Quellen liefern Beispiele mit Zeitstempeln, die der Medienzeit entsprechen. Die Pipeline konvertiert die Zeitstempel wie folgt in die richtige Präsentationszeit:

  • Neuer Zeitstempel = Medienzeit + Offset − Medienstart

Der Wert des Offsets ist die Präsentationszeit, zu der das vorherige Segment beendet wurde. Für das erste Segment ist der Offset 0. Im Folgenden finden Sie zwei Beispiele für die Berechnung dieser Zeitstempelkonvertierungen:

  • Beispiel 1: Angenommen, das erste Segment (S1) ist 10 Sekunden lang, und das zweite Segment (S2) hat eine Medienstartzeit von 0. Die native Quelle verwendet die Medienzeit für ihre Zeitstempel, sodass das erste Beispiel aus S2 einen Zeitstempel von 0 aufweist. Der Offset beträgt 10 Sekunden (die Dauer von S1), sodass der angepasste Zeitstempel:0 + 10 − 0 = 10 Sekunden ist.
  • Beispiel 2: Angenommen, Segment S1 ist 10 Sekunden lang, und S2 hat eine Medienstartzeit von 5 Sekunden. Das erste Beispiel aus S2 weist einen Zeitstempel von 5 Sekunden (Medienzeit) auf. Der Offset beträgt 10 Sekunden, sodass der angepasste Zeitstempel:5 + 10 − 5 = 10 Sekunden ist.

Alle Pipelinekomponenten, die von den Quellknoten nachgelagert sind, erhalten Beispiele mit den angepassten Zeitstempeln. Die Quellknoten in einer Topologie können unterschiedliche Medienstartzeiten aufweisen, sodass die Anpassungen für jeden Branch der Topologie separat berechnet werden.

Wenn die Präsentation zum nächsten Segment wechselt, wird die Präsentationsuhr nicht beendet oder zurückgesetzt, und die Präsentationszeit erhöht sich monoton. Bevor ein neues Segment beginnt, sendet die Mediensitzung der Anwendung ein MESessionNotifyPresentationTime-Ereignis . Das -Ereignis gibt die Startzeit des Segments relativ zur Präsentationsuhr und den Wert des Offsets an. Wenn ein neues Segment gestartet wird, ruft die Pipeline Start für die Sequencerquelle mit dem Wert VT_EMPTY auf. Die Sequencerquelle sendet ein MESourceStarted-Ereignis ohne Startzeit.

Zum Suchen gibt die Anwendung einen Segmentbezeichner und einen Zeitoffset innerhalb des Segments an. Nach der Suche beginnt die Präsentationsuhr am Segmentoffset . Hier sehen Sie ein Beispiel für die Funktionsweise dieses Prozesses:

  • Beispiel 3: Die Anwendung versucht, S3 mit einem Segmentoffset von 10 Sekunden zu segmentieren. Die Präsentationsuhr beginnt bei 10 Sekunden (segment offset). Der Offset enthält nicht die Dauer der Segmente S1 und S2. Die Sequencerquelle sendet ein MESourceStarted-Ereignis mit einer Startzeit von 10 Sekunden, die dem Segmentoffset entspricht.

Wenn nach einer Suche die Wiedergabe zum nächsten Segment fortgesetzt wird, funktioniert der Übergang wie in den vorherigen Beispielen, mit dem Unterschied, dass der Offset nicht die übersprungenen Segmente enthält.

Im Folgenden finden Sie einige weitere Details, die sich auf den Zeitstempel der Beispiele auswirken:

  • Decoder benötigen möglicherweise Daten, die über die Medienstoppzeit hinausgehen. Die Pipeline ruft so viele Daten aus der Quelle ab, wie der Decoder benötigt, und schneidet dann die Ausgabebeispiele des Decoders ab.
  • Transformationen können Daten puffern. Dies kann z. B. durch einen Audioeffekt erfolgen. Wenn ein Segment endet, ist der Zeitstempel für das letzte Beispiel der Transformation früher als das Ende des Segments, da die Transformation einige Daten zurückhält. Wenn das nächste Segment beginnt, ist der Zeitstempel für das erste Beispiel etwas früher als der Anfang des Segments. Es gibt keine Lücke in den Zeitstempeln, sodass die Daten, die die Mediensenke erreichen, kontinuierlich sind. Wenn das letzte Segment endet, entwässert die Pipeline die Transformation, sodass keine Daten verloren gehen.
  • Die Quelle muss möglicherweise etwas früher als die Medienstartzeit beginnen, um den vorherigen Keyframe zu verwenden. Daher kann die erste Stichprobe nach der Anpassung eine negative Präsentationszeit aufweisen.

Sequenzen bearbeiten

In einer Bearbeitungssequenz gibt die Anwendung die Segmentgrenzen im Voraus an, indem die Attribute MF_TOPOLOGY_PROJECTSTART und MF_TOPOLOGY_PROJECTSTOP festgelegt werden. Die Pipeline berechnet Anpassungen für die Zeitstempel nahezu auf die gleiche Weise wie für eine Wiedergabelistensequenz:

  • Für den Offset wird der Wert von MF_TOPOLOGY_PROJECTSTART anstelle des beobachteten Endes des Segments verwendet.

  • Für die Suche verwendet der Offset einen Wert, der dem MF_TOPOLOGY_PROJECTSTART Wert des Segments plus dem Segmentoffset entspricht.

Daher ist die Präsentationszeit in einer Bearbeitungssequenz immer relativ zum Beginn der Präsentation, auch wenn die Anwendung ein anderes Segment anstrebt.

Mediensitzung

Sequencerquelle