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.
[Das dieser Seite zugeordnete Feature DirectShow-ist ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngineund Audio/Video Capture in Media Foundationersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code MediaPlayer-, IMFMediaEngine und Audio-/Videoaufnahme in Media Foundation anstelle von DirectShow-verwendet, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, um die neuen APIs zu verwenden, falls möglich umgeschrieben werden.]
Der Zeitstempel definiert die Start- und Endzeiten eines Medienbeispiels, gemessen in der Datenstromzeit. Der Zeitstempel wird manchmal als Präsentationszeitbezeichnet. Beim Lesen des restlichen Artikels ist es wichtig zu beachten, dass nicht alle Formate Zeitstempel auf die gleiche Weise verwenden. Beispielsweise sind nicht alle MPEG-Beispiele zeitstempelt. In MPEG-Filterdiagrammen wird der Zeitstempel erst auf jeden Frame angewendet, wenn sie vom Decoder ausgegeben werden.
Wenn ein Rendererfilter ein Beispiel empfängt, plant er das Rendern basierend auf dem Zeitstempel. Wenn das Beispiel verspätet eingeht oder kein Zeitstempel aufweist, wird das Beispiel sofort vom Filter gerendert. Andernfalls wartet der Filter, bis die Startzeit des Beispiels beginnt, bevor es das Beispiel rendert. (Es wartet auf die Startzeit, indem die IReferenceClock::AdviseTime--Methode aufgerufen wird.)
Quellfilter und Parserfilter sind dafür verantwortlich, die richtigen Zeitstempel für die von ihnen verarbeiteten Proben festzulegen. Verwenden Sie die folgenden Richtlinien.
- Dateiwiedergabe: Das erste Beispiel ist zeitstempelt mit einer Startzeit von Null. Nachfolgende Zeitstempel werden durch die Beispiellänge und die Wiedergaberate bestimmt, die selbst durch das Dateiformat bestimmt wird. Der Filter, der die Datei analysiert, ist für die Berechnung der richtigen Zeitstempel verantwortlich (z. B. die AVI Splitter).
- Video- und Audioaufnahme: Jedes Beispiel ist zeitstempelt mit einer Startzeit gleich der Datenstromzeit, zu der sie aufgenommen wurde, mit den folgenden Einschränkungen:
- Videoframes von einer Vorschau-Pin (im Gegensatz zu einem Aufnahmenadel) sind nicht zeitstempelt. Aufgrund der Graphlatenz kommt ein Videoframe, der mit der Aufnahmezeit gestempelt wird, immer spät am Videorenderer ein. Dies kann dazu führen, dass der Renderer Frames in einem Versuch zur Qualitätskontrolle abgibt. Informationen zur Qualitätskontrolle finden Sie unter Quality-Control Management.
- Audioaufnahme: Der Audioaufnahmefilter verwendet einen eigenen Satz von Puffern, die von denen getrennt sind, die vom Audiotreiber verwendet werden. Der Audiotreiber füllt die Puffer des Aufnahmefilters in festen Intervallen aus. Das Intervall hängt vom Treiber ab, ist jedoch im Allgemeinen nicht mehr als 10 Millisekunden. Die Zeitstempel der Audiobeispiele spiegeln die Uhrzeit wider, zu der der Treiber die Puffer des Audioaufnahmefilters ausgefüllt hat. Diese Zeiten können leicht ungenau sein, insbesondere wenn die Anwendung eine sehr kleine Puffergröße verwendet. Die Medienzeiten spiegeln jedoch genau die Anzahl der Audiobeispiele im Puffer wider.
- Mux-Filter: Je nach Ausgabeformat muss ein Mux-Filter möglicherweise Zeitstempel generieren oder nicht. Das AVI-Dateiformat verwendet z. B. eine feste Bildfrequenz ohne Zeitstempel, sodass der AVI Mux- Filter davon ausgeht, dass Proben ungefähr zum richtigen Zeitpunkt eintreffen. Wenn die eingehenden Zeitstempel jedoch einen Abstand aufweisen, der größer als ein Frame ist, schreibt der AVI Mux einen Indexeintrag mit der Größe Null, um einen verworfenen Frame anzugeben. Bei der Dateiwiedergabe werden zur Laufzeit neue Zeitstempel generiert, wie zuvor beschrieben.
Rufen Sie zum Festlegen des Zeitstempels für ein Beispiel die IMediaSample::SetTime-Methode auf.
Media Times
Optional kann der Filter auch eine Medienzeit für das Beispiel angeben. In einem Videostream stellt die Medienzeit die Framenummer dar. In einem Audiodatenstrom stellt die Medienzeit die Beispielnummer im Paket dar. Wenn jedes Paket beispielsweise eine Sekunde von 44,1 Kilohertz (kHz)-Audio enthält, hat das erste Paket eine Medienstartzeit von null und eine Medienstoppzeit von 44100. In einem suchbaren Datenstrom ist die Medienzeit immer relativ zur Startzeit des Datenstroms. Angenommen, Sie suchen nach 2 Sekunden ab dem Anfang eines 15-fps-Videostreams. Das erste Medienbeispiel nach dem Suchen hat einen Zeitstempel null, aber eine Medienzeit von 30.
Renderer- und Muxfilter können die Medienzeit verwenden, um zu bestimmen, ob Frames oder Beispiele verworfen wurden, indem nach Lücken gesucht wird. Filter sind jedoch nicht erforderlich, um die Medienzeit festzulegen. Rufen Sie zum Festlegen der Medienzeit in einem Beispiel die IMediaSample::SetMediaTime-Methode auf.
Verwandte Themen