2009-04-13 5 views
0

Ich frage mich, ob es eine Möglichkeit gab, das erste Bild einer AVI programmgesteuert abzurufen und ein Bitmap-Bild zu erhalten, um dem Benutzer eine Vorschau anzuzeigen. Das MediaControl in Silverlight zeigt eine Vorschau für von Silverlight unterstützte Videodateien, jedoch keine AVI. Da ich mich in einer Silverlight-Umgebung befinde, kann ich dazu keinen unmanaged Code oder Bibliotheken verwenden. Ich habe nur Zugriff auf den Filestream.Bitmap für erstes Bild von AVI in Silverlight

Antwort

1

Die Silverlight-Laufzeit unterstützt nativ keine AVI-Dateien, daher können Sie diese nicht mit dem MediaElement verwenden.

Was Sie tun müssten, ist tatsächlich die AVI-Datei von Hand zu parsen und Frames aus dieser Datei herauszuziehen. Sobald Sie an den Punkt gelangen, an dem Sie Frames analysieren, wird es möglicherweise etwas komplizierter.

Wenn Sie dies mit Silverlight 2 durchführen möchten, muss Ihre AVI-Datei WMV-Frames oder Frames in einem von Silverlight unterstützten Bildformat (JPG oder PNG) enthalten. Wenn Sie mit WMV arbeiten würden, würde ich eine MediaStreamSource einrichten und den gewünschten Videoframe als erstes Beispiel an die MediaStreamSource übergeben. Wenn Sie mit einem der Bildformate arbeiten, sollten Sie Image verwenden und seine Quelle auf einen Stream setzen. Sie können ein Beispiel sehen, wo Joe Stegman dies verwendet hat, um Silverlight 2 bei der Unterstützung von nicht-nativen image formats zu unterstützen.

Wenn Sie dies in Silverlight 3 tun (es ist gerade in Beta) die Techniken sind in der Regel die gleichen, aber die Medienformat-Unterstützung wächst ein bisschen (einschließlich WMV): H264, Raw YV12 oder Raw ARGB Rahmen. Ähnlich haben Sie jetzt auf der Imaging-Vorderseite die WriteableBitmap, mit der Sie Ihren Rahmen zeichnen können.

Wenn Ihr Video etwas wie Theora, DivX, Xvid, VP6 usw. ist, müssen Sie einen Weg finden, diesen Rahmen zu decodieren, damit Sie ihn in Silverlight anzeigen können.

1

Ähnliche Fragen wurden auf der Silverlight forum veröffentlicht. Der Forum-Thread enthält Codebeispiele.

Sie könnten einen Rahmen weiter in das Video aufnehmen, da die ersten Frames möglicherweise eingeblendet werden oder nicht sehr repräsentativ für das Video sind.

Je nach Codierung sind Ihre AVI-Dateien möglicherweise von der MediaPlayer-Klasse nicht lesbar. (Siehe here für kompatible Kodierungen). Möglicherweise müssen Sie das Video transkodieren, um dies mit verwaltetem Code zu tun. Es sei denn, Sie finden/schreiben Ihren eigenen Decoder.