![]() |
DirectShow vs VFW
Hi,
ich benutze z.Z. VFW (Video for Windows) um AVI Dateien abzuspielen... bin aber am überlegen auf DirectShow umzusteigen. Nur, ich hab KA ob das was ich vorhabe damit geht und ob es wirklich sinnvoll ist. Also: a) Ich möchte das Video nicht einfach auf einem Panel o.Ä. ausgeben sondern brauche jedes Frame einzeln als z.B. TBitmap.. mit vfw geht das wunderbar.. geht das mit DS auch?? b) Kann DS auch wmv etc abspielen?? Denn vfw kann leider nur AVIs... :( Kann DirectShow die beiden dinge?? Aya~ |
Re: DirectShow vs VFW
Hallo Aya,
da ich mich gerade selber durch die MSDN-Doku zu DirectShow quäle, kann ich Dir sagen, daß Du damit jede Audio- bzw. Video-Datei abspielen kannst für die es die entsprechenden Codecs auf Deinem Rechner gibt. DS ist beim Einsteigen ziemlich verwirrend (zumindest wenn man keine Ahnung von COM hat). Einen Vorgeschmack bekommt man am besten wenn man sich mit dem Tool GraphEdit von Microsoft beschäftigt. Laut Microsoft soll es im DirectX-SDK enthalten sein, was aber nicht der Fall ist. Man findet es auch bei Microsoft im Web nicht. Guggst Du hier: ![]() -Erstmal entpacken... -GraphEdit.exe starten -File -> Render Media File... aus dem Menü auswählen -Beliebige Mulimedia-Datei auswählen (DivX, MP3,...) -Start-Button drücken Das ganze Tool ist nichts weiter als eine grafische Oberfläche zu den DirectShow-Funktionen! Das sollte für den Anfang reichen... |
Re: DirectShow vs VFW
Hi,
mhh.. ja ist schonmal hilfreich :) Aber bevor ich mich da jetzt reinknie... geht es denn das ich einzelne Frames von Videos in irgendeinem format bekomme?? Bzw kenne ich DShow nur so bisher das man nen FensterHandle angibt in dem das Video dargestellt wird, aber das will ich ja nicht... ich will es einfach als RGB-Array oder TBitmap oder sonstwas.. geht das?? Aya~ |
Re: DirectShow vs VFW
JA!
Um ein AVI-File in einzelnen Frames zu laden ist es am einfachsten den Media Detector von DirectShow zu verwenden. Der erledigt viele lästige Vorarbeiten um die man sich sonst kümmern müßte intern von selbst. ![]() Diese Funktion liefert Bitmaps ausschließlich im 24-Bit Format. |
Re: DirectShow vs VFW
Hi,
ok danke :) Werd mir das ganze dann mal die tage genauer anschauen. Aya~ |
Re: DirectShow vs VFW
Hi,
hab mir das ganze jetzt angeschaut und funktioniert auch soweit sehr gut, nur... das ganze ist bei mir viel langsamer als vfw.. Ich Öffne das ganze wie hier beschrieben: ![]() und benutze dann dashier: pDet->GetBitmapBits(cFrame, nil, pBuffer, width, height); um das aktuelle Frame in den Buffer zu bekommen... aber er schafft es nicht das video flüssig abzuspielen.. ne idee wieso? :( Aya~ |
Re: DirectShow vs VFW
Die Funktion "Grabbing a Poster Frame" ist wohl eher dafür
gedacht gezielt einzelne Bilder aus einer Videodatei zu laden. Warscheinlich wird dabei jedesmal die Position in der Datei neu ermittelt, anstatt einfach nur die Folgeposition zu laden. Wenn es Dir nicht um die (aufwendige) Bearbeitung der einzelnen Bilder geht wobei die Ladezeit zu vernachlässigen wäre, sonder mehr um das flüssige abspielen, ist es natürlich schneller die Bilder es aus einem laufendem Stream abzugreifen. Dafür würde ich dann den SampleGrabber benutzen. Der ist zwar nicht so einfach zu verwenden, aber man kann die Einzelbilder im VideoStream abgreifen oder verändern bevor sie weiter durch die Filterkette laufen. Hinter den SampleGrabber schaltet man einen Standard Render-Filter zur Ausgabe der geänderten Bilder oder einen NullRenderer-Filter wenn man die Bilder nicht anzeigen lassen möchte. |
Re: DirectShow vs VFW
Hi,
ich hab das mit dem SampleGrabber schon probiert.. klappt auch soweit, aber... ich hab bei dem ding nur die möglichkeit gefunden Play zu drücken und dann die daten abzufangen... Ich bräuchte mehr sowas wie getNextFrame().. also das der Stream pausiert ist und ich immer dann wann ich will das nächste frame bekomme :) Geht das irgendwie?? Habe ich bisher keine möglichkeit für gefunden leider :( Aya~ |
Re: DirectShow vs VFW
Wenn Du ein Video flüssig abspielen möchtest muß die Bearbeitung eines
Bildes bei z.B. 25fps natürlich in weniger als einer 1/25 abgeschlossen sein - sonst ist es halt nicht mehr flüssig. Wozu brauchst Du unbedingt eine GetNextFrame Funktion? |
Re: DirectShow vs VFW
Hi,
brauche das weil ich z.B. die Framerate selber bestimmen möchte.. also z.B. meinetwegen auch nur 10fps o.Ä. Und ich brauche es um selber zu bestimmen wann welches frame kommt, um synchonität zwischen zwei videos hinzubekommen :) Aya~ |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz