Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi DirectShow vs VFW (https://www.delphipraxis.net/69283-directshow-vs-vfw.html)

Aya 12. Mai 2006 21:59


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~

skyobserver 19. Mai 2006 12:15

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: Download-Link zu Microsoft GraphEdit

-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...

Aya 19. Mai 2006 16:44

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~

skyobserver 19. Mai 2006 23:02

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.

Weblink zu Microsoft MSDN: Grabbing a Poster Frame

Diese Funktion liefert Bitmaps ausschließlich im 24-Bit Format.

Aya 20. Mai 2006 15:05

Re: DirectShow vs VFW
 
Hi,

ok danke :)
Werd mir das ganze dann mal die tage genauer anschauen.

Aya~

Aya 22. Mai 2006 18:45

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:
Weblink zu Microsoft MSDN: Grabbing a Poster Frame

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~

skyobserver 27. Mai 2006 19:36

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.

Aya 27. Mai 2006 19:39

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~

skyobserver 27. Mai 2006 19:54

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?

Aya 27. Mai 2006 20:02

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 09:03 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz