Schreiben von Videobildbeispielen
[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.]
Ein Videobildstream ist ein Video, das eine Reihe von Standbildern enthält. Die Bilder können sich innerhalb des Frames bewegen, und jedes Bild kann sich in das nächste bild einfügen. Videobildstreams werden mithilfe des Codecs Windows Media Video 9 Image v2 codiert. Das Ausgabevideo ähnelt dem, das vom Windows Media Video 9-Codec erstellt wurde.
Um ein Profil zu erstellen, das einen Videobildstream enthält, beginnen Sie mit dem Auflisten der Videocodecs, wie unter Abrufen von Streamkonfigurationsinformationen aus Codecs beschrieben. Suchen Sie nach dem Codec, der den WMMEDIASUBTYPE_WVP2-Untertyp unterstützt.
Nachdem Sie das Profil für das Writer-Objekt festgelegt haben, rufen Sie IWMWriter::GetInputProps auf, um die Medieneigenschaften für den Videobild-Eingabestream abzurufen. Rufen Sie den Medientyp aus dem Medieneigenschaftenobjekt ab, indem Sie IWMMediaProps::GetMediaType aufrufen, und ändern Sie den Untertyp in WMMEDIASUBTYPE_VIDEOIMAGE. Sie sollten die Breite und Höhe des Videos auf die maximalen Dimensionen festlegen, die erforderlich sind, um die Bilder zu umfassen, die Sie dem Stream hinzufügen. Rufen Sie dann IWMMediaProps::SetMediaType mit dem geänderten Eingabetyp auf. Jetzt können Sie mit dem Senden von Beispielen an das Writer-Objekt beginnen.
Jedes Beispiel muss mit einer WMT_VIDEOIMAGE_SAMPLE2 Struktur beginnen. Darüber hinaus können Beispiele Bitmapbilder enthalten. Ein Bild ist nur an ein Beispiel für den ersten Frame angefügt, in dem es angezeigt wird. Alle zusätzlichen Frames, die dieses Bild verwenden, benötigen nur Informationen in der Struktur. Eingabe bitmaps müssen als RGB formatiert sein, 24 Bit pro Pixel.
Bitmapdateien speichern die Bilddaten, sodass die Daten für jede Zeile des Bilds eine Anzahl von durch vier teilbaren Bytes umfassen. (Dies wird als Schritt der Bitmap bezeichnet.) Dadurch wird der Anfang jeder Videozeile zu einer DWORD-Grenze erzwungen, was das Kopieren effizienter macht. Wenn die Bildzeilen nicht gleichmäßig durch vier teilbar sind, wird die Zeile auf das nächsthöchste Vielfache von vier Bytes aufgepolstert. Wenn Sie Bilddaten anfügen, müssen Sie alle Auffüllungen entfernen, die am Ende der Daten für jede Zeile vorhanden sind.
Der Windows Media Video 9 Image v2-Codec verwaltet bis zu zwei Images gleichzeitig im Arbeitsspeicher. Diese Bilder werden als vorheriges Und aktuelles Image bezeichnet. Jedes Bild verfügt über eine Reihe von Elementen in der WMT_VIDEOIMAGE_SAMPLE2-Struktur , die vorgeben, wie das Bild im Frame dargestellt wird. Sie können ein Bild hinzufügen, indem Sie den dwControlFlags-Member von WMT_VIDEOIMAGE_SAMPLE2 auf WMT_VIDEOIMAGE_SAMPLE_INPUT_FRAME festlegen. Wenn Sie einen Eingaberahmen an den Codec übergeben, wird dieses Bild zum aktuellen Bild. Das Bild, das das aktuelle Bild im vorherigen Beispiel war, wird normalerweise zum vorherigen Bild, und das Bild, das das vorherige Bild im vorherigen Beispiel war, wird verworfen. Sie können den Codec so konfigurieren, dass das alte vorherige Bild beibehalten wird, indem Sie das Element bKeepPrevImage auf TRUE festlegen. In diesem Fall wird das Bild verworfen, das das aktuelle Bild im vorherigen Beispiel war.
Die grundlegende Zusammensetzung eines Videobildframes wird durch zwei Faktoren für jedes Bild bestimmt: die gewünschte Region und der Mischungskoeffizienten. Der für ein Bild interessante Bereich wird durch einen Ursprungspunkt, eine Breite und eine Höhe definiert. Der Teil eines Bilds, der von der gewünschten Region beschrieben wird, füllt den Ausgaberahmen aus. Wenn die region von Interesse eine andere Größe als der Ausgabeframe aufweist, ändert der Codec die Größe. Der Mischungskoeffizienten des Bildes bestimmt die Übermischung der beiden Bilder. Die Mischungskoeffizienten für die aktuellen und vorherigen Bilder müssen 1,0 sein. Wenn beispielsweise fCurrBlendCoef auf 0,5 und fPrevBlendCoef auf 0,5 festgelegt ist, besteht der Ausgaberahmen aus einer gleichen Mischung aus den regionen, die für beide Bilder von Interesse sind.
Indem Sie den bereich bearbeiten, der für ein Bild von Interesse ist, können Sie Schwenk- und Zoomeffekte erstellen. Mit den Mischungskoeffizienten können Sie zwischen Bildern kreuzblenden (auflösen) . Zusätzlich zu diesen Effekten können Sie einen der vordefinierten Übergänge verwenden, um komplexere Frames zu erstellen. Die verfügbaren Übergänge werden im Abschnitt Videobildübergänge dieser Dokumentation beschrieben. Wenn Sie einen Übergang verwenden, müssen Sie jeden Frame konfigurieren. Die einfachste Möglichkeit besteht darin, eine Funktion zu erstellen, die Elemente der WMT_VIDEOIMAGE_SAMPLE2 Struktur inkrementell ändert, um einen vollständigen Effekt zu erzielen.
Weitere Informationen zu den Werten, die für Verformungen festgelegt werden sollen, finden Sie unter WMT_VIDEOIMAGE_SAMPLE2.
Hinweis Wenn Sie Audiodaten in eine Datei mit einem Videobildstream einschließen möchten, müssen Sie eine unkomprimierte Audioeingabe verwenden. Um einen Videobildstream mit einem vorhandenen komprimierten Audiostream zu kombinieren, müssen Sie das Audio dekomprimieren und die Beispiele unkomprimiert übergeben. Wenn Sie beim Schreiben eines Videobildstreams komprimierte Beispiele an den Writer übergeben, tritt ein Fehler auf, der dazu führt, dass Beispiele aus dem Video gelöscht werden.
Außerdem können komprimierte Videobilddateien ohne Audiostreams mehrere sehr kleine, stark komprimierte Videoframes in einem einzigen ASF-Paket enthalten, was zu einer schlechten Wiedergabeerfahrung bei früheren Versionen von Windows Medienwiedergabe führen kann. Um dieses Problem zu vermeiden, besteht die beste Lösung darin, einen unbeaufsichtigten Audiodatenstrom in die Datei einzufügen, obwohl dies auch die Dateigröße erhöht.
Zugehörige Themen