Laden...

[SharpDX.MediaFoundation] SourceReader verwenden, um die Frames aus einem Video zu lesen

Erstellt von Roland_K vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.977 Views
Roland_K Themenstarter:in
37 Beiträge seit 2014
vor 9 Jahren
[SharpDX.MediaFoundation] SourceReader verwenden, um die Frames aus einem Video zu lesen

Hallo zusammen,

seit einigen Tagen versuche ich jetzt, per Media Foundation (über SharpDX) Frames aus einem Video (erst mal wmv-Format) in den Hauptspeicher zu lesen. Das aktuelle Coding dazu könnt ihr euch hier auf GitHub anschauen: MediaFoundationVideoReader. Mein Quellcode basiert dabei großteils auf diesem Beispiel von MS: Using the Source Reader to process media data

Eigentlich würde es ja gut aussehen.. der SourceReader ließt jeden Frame, ich bekomme einen Buffer, Auflösung passt, Anzahl der Frames passt usw.. ABER: In jedem gelesenen Frame ist im Speicherblock (->MediaBuffer) jeder Byte auf 0.

Wer es ausprobieren möchte:
Im Projekt FrozenSky.Tests.Rendering ist ein Test per XUnit kodiert (Methode ReadSimple_WmvVideo), welcher eine Beispiel WMV-Datei lädt und das 10. Frame einfach auf den Desktop schreibt. Später soll das dann mit einem Referenz-Bild verglichen werden, aber zum Testen schreibe ich das erst einmal auf den Desktop.

Was ich schon probiert habe und wo ihr mir evtl. helfen könnt:*Relativ viel mit den Parametern rumgespielt und auch versucht, einige Hinweise aus dem Internet anzuwenden (siehe Kommentare im Code) *Tja, Google suche.. seltsamerweise hätte ich aber genau ein solches Problem nirgends gefunden *Es gäbe eigentlich noch ein Beispiel im Windows SDK (VideoThumbnail), welches genau das macht, was ich möchte. Einen Download oder ähnliches kann ich aber leider nirgends mehr finden. Der Downloadlink unten auf der Seite geht (zumindest heute früh) bei mir auch nicht. Weiß jemand, wohin Microsoft die Beispiele verschoben hat?

Viele Grüße
Roland

Roland_K Themenstarter:in
37 Beiträge seit 2014
vor 9 Jahren

Hallo zusammen,

das Thema hat sich erledigt.*Die Beispiele der MediaFoundation kann man mit dem Windows 7 SDK installieren und laufen auch super auf Windows 8.1

  • Mein Fehler: Die Farbwerte vom Video wurden korrekt ausgelesen, Problem war nur, dass Media Foundation die Alpha-Werte nicht überschreibt und damit so lässt, wie sie vorher waren (=> Bei einem neuen Buffer 0). Beim Debuggen habe ich leider nur auf den ersten Wert geschaut und somit ist mir das nicht aufgefallen. Wenn ich nun den Speicherblock in ein Bitmap konvertiert habe, war jeder einzelne Pixel vollkommen Transparent.

edit: Gerade die aktuelle Version auf Github hochgeladen, mit meinem Beispiel Wmv-File läuft der Test jetzt sauber durch.

Gruß und Danke
Roland