Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Thema wird beschrieben, wie die Sequencer Source die Präsentationszeiten während der Wiedergabe behandelt.
Überblick
Die Sequenzerquelle unterstützt zwei verschiedene Modi: Wiedergabelistensequenzen und Bearbeitungssequenzen.
In einer Bearbeitungssequenz gibt die Anwendung die Dauer jedes Abschnitts im Voraus an, bevor die Wiedergabe gestartet wird. In einer Wiedergabeliste-Sequenz gibt die Anwendung nicht die Dauer im Voraus an. (Tatsächlich ist die Dauer möglicherweise nicht bekannt.)
In beiden Fällen können Sie den Medienstart und die 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 Medienanfangszeit anzugeben, legen Sie das attribut MF_TOPONODE_MEDIASTART auf dem Quellknoten fest. Um die Medienstoppzeit anzugeben, legen Sie das attribut MF_TOPONODE_MEDIASTOP für den 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 das attribut MF_TOPOLOGY_PROJECTSTART und das attribut MF_TOPOLOGY_PROJECTSTOP aufweisen.
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 Offset- ist die Präsentationszeit, zu der das vorherige Segment beendet wurde. Für das erste Segment ist der Offset null. Hier sind 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 Null. Die systemeigene Quelle verwendet die Medienzeit für ihre Zeitstempel, sodass das erste Beispiel von S2 einen Zeitstempel von Null 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 von S2 hat einen Zeitstempel von 5 Sekunden (Medienzeit). Der Offset beträgt 10 Sekunden, sodass der angepasste Zeitstempel:5 + 10 − 5 = 10 Sekunden lautet.
Alle Pipelinekomponenten, die von den Quellknoten nachgeschaltet sind, erhalten Proben mit den angepassten Zeitstempeln. Die Quellknoten in einer Topologie können unterschiedliche Startzeiten für Medien aufweisen, sodass die Anpassungen für jede Verzweigung 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 monotonisch. Bevor ein neues Segment gestartet wird, sendet die Mediensitzung die Anwendung an ein MESessionNotifyPresentationTime Ereignis. Das Ereignis gibt die Startzeit des Abschnitts relativ zur Präsentationsuhr und den Wert des Offsets an. Wenn ein neues Segment beginnt, ruft die Pipeline Start für die Sequenzerquelle mit dem Wert VT_EMPTY auf. Die Sequenzerquelle sendet ein MESourceStarted Ereignis ohne Startzeit.
Zur Suche gibt die Anwendung einen Segmentbezeichner sowie einen Zeitversatz innerhalb des Segments an. Nach der Suche beginnt die Präsentationsuhr am Segment Offset. Hier ist ein Beispiel für die Funktionsweise dieses Prozesses:
- Beispiel 3: Die Anwendung versucht, S3 mit einem Segmentversatz von 10 Sekunden zu segmentieren. Die Präsentationsuhr beginnt mit 10 Sekunden (segmentversatz). Der Offset enthält nicht die Dauer der Segmente S1 und S2. Die Sequenzerquelle sendet ein MESourceStarted-Ereignis mit einer Startzeit, die dem Segmentoffset entspricht, 10 Sekunden.
Wenn die Wiedergabe nach einer Suche zum nächsten Segment fortgesetzt wird, funktioniert der Übergang wie in den vorherigen Beispielen, mit der Ausnahme, dass der Offset nicht die übersprungenen Segmente enthält.
Hier sind einige weitere Details, die sich darauf auswirken, wie Beispiele zeitstempelt werden:
- Decoder benötigen möglicherweise Daten über die Medienstoppzeit hinaus. 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. Ein Audioeffekt muss dies z. B. tun. Wenn ein Segment endet, liegt der Zeitstempel des letzten Beispiels aus der Transformation vor dem Ende des Segments, da die Transformation einige Daten zurückhält. Wenn das nächste Segment beginnt, ist der Zeitstempel der ersten Stichprobe etwas früher als der Anfang des Segments. Es gibt keine Lücke in den Zeitstempeln, sodass die Daten, die die Mediensinke 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 aufzunehmen. Daher kann das erste Beispiel nach der Anpassung eine negative Präsentationszeit haben.
Bearbeitungssequenzen
In einer Bearbeitungssequenz gibt die Anwendung die Segmentgrenzen im Voraus an, indem sie die attribute MF_TOPOLOGY_PROJECTSTART und MF_TOPOLOGY_PROJECTSTOP festlegen. 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 MF_TOPOLOGY_PROJECTSTARTverwendet, anstatt das beobachtete Ende des Segments zu verwenden.
Bei der Suche verwendet der Offset einen Wert, der dem MF_TOPOLOGY_PROJECTSTART Wert des Segments und dem Segmentoffset entspricht.
Daher ist die Präsentationszeit in einer Bearbeitungssequenz immer relativ zum Anfang der Präsentation, auch wenn die Anwendung nach einem anderen Segment sucht.
Verwandte Themen