So erzwingen Sie Key-Frame Einfügen
[Das dieser Seite zugeordnete Feature Windows Media Format 11 SDK ist ein Legacyfeature. Sie wurde durch den Quellleser und den Senkenschreiber ersetzt. Quellleser und Senkenschreiber wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit den Quellleser und senkenden Writer anstelle des Windows Media Format 11 SDK verwendet. Microsoft schlägt vor, vorhandenen Code, der die Legacy-APIs verwendet, um nach Möglichkeit die neuen APIs zu verwenden.]
Der Windows Media Video 9-Codec unterstützt das erzwungene Einfügen von Keyframes. Wenn Sie ein Beispiel an den Writer übergeben, können Sie angeben, dass es als Keyframe codiert werden muss.
Führen Sie die folgenden Schritte aus, um das Einfügen eines Keyframes für ein Beispiel zu erzwingen.
- Ordnen Sie einen Puffer zu, um das Beispiel zu halten, und rufen Sie einen Zeiger auf die INSSBuffer-Schnittstelle ab, die den Puffer enthält, indem Sie IWMWriter::AllocateSample aufrufen.
- Rufen Sie den Speicherort und die Größe des in Schritt 1 erstellten Puffers ab, indem Sie INSSBuffer::GetBufferAndLength aufrufen.
- Kopieren Sie Ihre Beispieldaten an den Pufferspeicherort, und stellen Sie sicher, dass das übergebene Beispiel in den zugeordneten Puffer passt. Abhängig von der Quelle Ihrer Beispiele können Sie eine Vielzahl von Funktionen verwenden, um die Daten zu kopieren. Wenn Sie beispielsweise einen Stream aus einer AVI-Datei kopieren, können Sie die AVI-Funktion AVIStreamRead verwenden.
- Aktualisieren Sie die im Puffer verwendete Datenmenge, um die tatsächliche Größe des Beispiels widerzuspiegeln, indem Sie INSSBuffer::SetLength aufrufen.
- Rufen Sie einen Zeiger auf die INSSBuffer3-Schnittstelle ab, indem Sie INSSBuffer::QueryInterface aufrufen.
- Legen Sie das Beispiel als erzwungenen Schlüsselrahmen fest, indem Sie die INSSBuffer3::SetProperty-Methode aufrufen, um die WM_SampleExtensionGUID_OutputCleanPoint-Eigenschaft festzulegen. Diese Eigenschaft ist ein boolescher Wert. Legen Sie es auf TRUE fest.
- Übergeben Sie die Pufferschnittstelle zusammen mit der Eingabenummer und der Beispielzeit mithilfe der IWMWriter::WriteSample-Methode an den Writer.