IMediaSeeking::SetRate-Methode (strmif.h)
[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation abgelöst. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code mediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, so umgeschrieben wird, dass nach Möglichkeit die neuen APIs verwendet werden.]
Die SetRate
-Methode legt die Wiedergaberate fest.
Syntax
HRESULT SetRate(
[in] double dRate
);
Parameter
[in] dRate
Wiedergaberate. Darf nicht null sein.
Rückgabewert
Gibt einen HRESULT-Wert zurück. Die folgenden Werte sind möglich.
Rückgabecode | BESCHREIBUNG |
---|---|
|
Erfolg. |
|
Die angegebene Rate war null oder ein negativer Wert. (Siehe Hinweise.) |
|
Nicht implementiert. |
|
NULL-Zeigerargument. |
|
Audiogeräte oder Filter unterstützen diese Rate nicht. |
Hinweise
Die Wiedergaberate wird als Verhältnis der normalen Geschwindigkeit ausgedrückt. Daher ist 1.0 die normale Wiedergabegeschwindigkeit, 0,5 ist die halbe Geschwindigkeit und 2.0 ist doppelt so schnell. Bei Audiostreams ändert sich durch das Ändern der Rate auch die Tonhöhe.
Negative Werte deuten auf die umgekehrte Wiedergabe hin. Die meisten Filter unterstützen keine negative Wiedergabe, sondern geben stattdessen einen Fehlercode zurück, wenn der dRate-Parameter negativ ist.
Wenn eine Anwendung diese Methode im Filter Graph-Manager aufruft, führt der Filter Graph-Manager folgende Aktionen aus:
- Ruft die IMediaSeeking::GetCurrentPosition-Methode auf. Dieser Aufruf gibt die aktuelle Position zurück, wie vom Filter Graph-Manager berechnet.
- Beendet den Filtergraphen (wenn der Graph angehalten oder ausgeführt wird).
- Ruft die IMediaSeeking::SetPositions-Methode für die Filter mit der aktuellen Position als Startzeit auf. Dies hat den Effekt, dass die Streamzeit auf Null zurückgesetzt wird.
- Ruft die
SetRate
-Methode für die Filter mit der neuen Rate auf. - Setzt das Filterdiagramm fort, wenn es angehalten oder ausgeführt wurde.
Filter sollten auf Ratenänderungen wie folgt reagieren:
Parser- und Quellfilter: Der Filter, der aus den Zeitstempeln stammt, reagiert auf den SetRate
Aufruf. Dies ist in der Regel ein Parserfilter, z. B. der AVI-Splitterfilter, aber es kann sich um einen Quellfilter handelt. Nach jeder Such- oder Ratenänderung sollte der Filter die IPin::NewSegment-Methode mit den neuen Einstellungen aufrufen. Nach einer Kursänderung sollte die Zeitstempel entsprechend angepasst werden. Da einer Ratenänderung ein Suchvorgang vorausgeht, werden Zeitstempel von null neu gestartet, sodass der Filter einfach durch die Rate dividiert werden kann, um die neuen Zeitstempel zu berechnen.
Decoderfilter: Decoder sollten nicht auf SetRate
Aufrufe reagieren, außer sie Upstream zu übergeben. Stattdessen sollten sie auf den NewSegment-Aufruf reagieren, den der Upstream Parser ausgibt. Wenn ein Decoderfilter neue Segmentinformationen empfängt, sollte er die Werte speichern und den NewSegment-Aufruf downstream übergeben. Einige Decoder müssen zusätzliche Zeitstempel generieren, indem sie ihre Eingabe interpolieren. Dabei sollten sie Ratenänderungen berücksichtigen.
Renderer: Videorenderer können in der Regel Ratenänderungen ignorieren, da die eingehenden Frames bereits den richtigen Zeitstempel aufweisen. Audiorenderer müssen ihre Wiedergaberate ändern, da Audiodecoder in der Regel keine Ratenänderungskonvertierungen vornehmen.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows 2000 Professional [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows 2000 Server [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | strmif.h (include Dshow.h) |
Bibliothek | Strmiids.lib |