![]() |
DVD mit DSPack abspielen
Hallo,
kann mir jemand verraten, wie ich mit Hilfe des DSPacks eine IFO Datei öffnen kann? Ich habe es zwar mit "normalen" Dateien hinbekommen, aber mit DVD klappt es irgendwie nicht :? Und das Beispiel vom DSPack mit DVD funktioniert nicht. "Can´t render one or more stream". Gruß Paul |
Re: DVD mit DSPack abspielen
hast du auch den passenden codec installiert??
|
Re: DVD mit DSPack abspielen
Ich denke schon, denn ich kann ja mit einem anderen Player eine DVD abspielen.
Oder hat das damit nichts zu tun? |
Re: DVD mit DSPack abspielen
Diese bringen meisstens einen eigenen Codec mit.
|
Re: DVD mit DSPack abspielen
Also könnte es doch an dem fehlenden Codec liegen?!
Dann muss ich ihn wohl installieren und dann nochmal testen :wink: |
Re: DVD mit DSPack abspielen
Funzt leider nicht :(
Aber vielleicht geht das auch nicht so, wie ich es gemacht habe:
Delphi-Quellcode:
Mit MPEG,Avi usw. funzt es ja!
If not FilterGraph1.Active = True then FilterGraph1.Active := True;
FilterGraph1.ClearGraph; FilterGraph1.RenderFile(OpenDialog1.FileName); FilterGraph1.Volume := TrackBar1.Position * 1000; FilterGraph1.Play; |
Re: DVD mit DSPack abspielen
du weißt schon, dass du bei dvds anstatt
Delphi-Quellcode:
,
filtergraph1.renderfile
Delphi-Quellcode:
verwenden musst??
filtergraph.renderdvd
|
Re: DVD mit DSPack abspielen
Zitat:
Es kommt jetzt keine Meldung mehr, dass das Formt nicht unterstuetzt wird, wenn ich eine IFO öffne, aber es wird auch nichts abgespielt :? Hier mein jetziger Code:
Delphi-Quellcode:
Bei dem Beispiel vom DSPack wird dann noch PlayDVD (Funktion) benutzt, aber das Beispiel funzt bei mir nicht! Wenn ich eine IFO öffnen will, kommt die Meldung: Can´t render one ore more stream.
procedure TForm1.DVD1Click(Sender: TObject);
var i: Integer; Status : TAMDVDRenderStatus; begin If OpenDialog1.Execute then begin for I := 0 to OpenDialog1.Files.Count - 1 do begin ListBox1.Items.Add(OpenDialog1.Files[i]); end; If not FilterGraph1.Active = True then FilterGraph1.Active := True; FilterGraph1.ClearGraph; FilterGraph1.RenderDVD(Status, OpenDialog1.FileName); FilterGraph1.Volume := TrackBar1.Position * 1000; FilterGraph1.Play; end; end;
Delphi-Quellcode:
Gruß
if status.iNumStreamsFailed > 0 then Application.MessageBox('Can''t render one or more stream.', 'Error', mb_OK);
Paul |
Re: DVD mit DSPack abspielen
Ist die DVD verschlüsselt? Es kann sein, dass du solche nicht abspielen kannst. Ansonsten solltest du dir überlegen DirectShow irgendwie libdvdcss vorzuspannen. Du musst dann einen eigenen Access Filter schreiben und registrieren.
Es kann auch helfen ffdshow zu installieren. |
Re: DVD mit DSPack abspielen
denke auch das die dvd verschlüsselt sein wird, am besten ist, du probierst es mal mit einer anderen..
|
Re: DVD mit DSPack abspielen
Zitat:
Jetzt öffnet sich immer wenn ich eine ifo öffne, ein anderes Fenster, in dem schonmal das Menu angezeigt wird von der DVD,aber es geht nicht weiter. Und es wird halt nicht in dem VideoWindow angezeigt, sondern in dem fenster, was sich ActiveMovie Window nennt. Ich versuche mal eine andere DVD. Damit kann ich nicht viel anfangen :mrgreen: Zitat:
|
Re: DVD mit DSPack abspielen
Ok. Mit einer anderen DVD scheint es zu gehen :)
Aber es wird nur in diesem extra Fenster angezeigt :?: |
Re: DVD mit DSPack abspielen
Jetzt geht es! :-D
Ich musste Mode vom VideoWindow auf vmnormal stellen bei DVD und bei Dateien auf vmVMR! Aber jetzt habe ich noch ein Problem, bei dem ihr mir hoffentlich helfen könnt! Die DVD geht jetzt, aber im Menü kann ich nichts klicken, also nicht Film starten und so. Was muss ich da noch machen, damit das geht? Gruß Paul |
Re: DVD mit DSPack abspielen
schau dir doch die demo vom dspack mal richtig an, denn dort wirst du sowas finden:
Delphi-Quellcode:
ich denke das ist es was du gesucht hast, oder??
procedure TFormDVDPlayer.VideoWindowMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer); var Point : TPoint; DVDControl2 : IDVDControl2; begin if FilterGraph.Active then If Succeeded(FilterGraph.QueryInterface(IID_IDVDControl2, DVDControl2)) then begin Point.x := x; Point.y := y; DVDControl2.SelectAtPosition(Point); DVDControl2 := Nil; end; end; procedure TFormDVDPlayer.VideoWindowMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var Point : TPoint; DVDControl2 : IDVDControl2; begin if FilterGraph.Active then If Succeeded(FilterGraph.QueryInterface(IID_IDVDControl2, DVDControl2)) then begin Point.x := x; Point.y := y; DVDControl2.ActivateAtPosition(Point); DVDControl2 := Nil; end; end; |
Re: DVD mit DSPack abspielen
Voll ins Schwarze getroffen! :mrgreen:
Zitat:
Danke für eure Hilfe!! Paul |
Re: DVD mit DSPack abspielen
Bei den Beispielen wird immer am Schluss geschaut :gruebel:
|
Re: DVD mit DSPack abspielen
Hallo, hab jetzt noch ein Problem :roll:
Das Spulen geht zwar, aber ich kann nicht mehr aufhören. Doch kann ich, aber nur indem ich auf play druecke und dabei folgenden code verwende:
Delphi-Quellcode:
Den code verwende ich zum Spulen:
if FilterGraph1.Active then
with FilterGraph1 as IDvdControl2 do PlayForwards(1.0,DVD_CMD_FLAG_None, DvdCmd);
Delphi-Quellcode:
Wie kann ich das machen, dass er wieder aufhört mit Spulen, wenn ich erneut auf den Button klicke?
if FilterGraph1.Active then
with FilterGraph1 as IDvdControl2 do PlayForwards(8.0,DVD_CMD_FLAG_None, DvdCmd); Ich dachte etwa so:
Delphi-Quellcode:
Oder dass er jedes mal schneller bzw. langsamer spult. Dann wuerde ich einmal auf vorwaerts spulen klicken, dann wuerde er mit 3X spulen und dann klicke ich auf rueckwaerts spulen und dann muesste
with FilterGraph1 as IDvdControl2 do
begin If PlayForwards(8.0,DVD_CMD_FLAG_None, DvdCmd) then PlayForwards(1.0,DVD_CMD_FLAG_None, DvdCmd); end; ja einfach wieder mit 1X laufen. Aber es funzt so nicht:
Delphi-Quellcode:
Er meckert zwar nicht, aber im programm funktioniert es dann nicht :?
if FilterGraph1.Active then
with FilterGraph1 as IDvdControl2 do PlayForwards(+ 2.0,DVD_CMD_FLAG_None, DvdCmd); Ich hoffe, ihr könnt mir mit dem Spulen helfen :wink: Paul |
Re: DVD mit DSPack abspielen
Also erstmal würde ich dich bitten für jede Frage (es sind ja mittlerweile schon 3 hier)ein neues Thema zu eröffnen, damit andere das, falls Sie auch mal danach suchen, das auch per Suche finden können!
Dann: Was soll das??:
Delphi-Quellcode:
with FilterGraph1 as IDvdControl2 do
begin If PlayForwards(8.0,DVD_CMD_FLAG_None, DvdCmd) then PlayForwards(1.0,DVD_CMD_FLAG_None, DvdCmd); end; Das kann ja nicht gehen, denn wenn du dir mal die Funktion ansiehst in der DirectShow9.pas, wirst du feststellen, das der Rückgabewert vom Typ HResult ist, und keine Rückgabe, ob er gerade Vorwärts spult oder nicht! Um die Funktion zum Spulen zu nutzen, mache es ungefähr so:
Delphi-Quellcode:
Das selbe kannst du dann auch mit rückwärtsspulen machen...
procedure TForm1.ForwaertsClick(Sender: TObject);
var DvdCmd : IDvdCmd; DVDControl2: IDVDControl2; begin if FilterGraph1.Active then If Succeeded(FilterGraph.QueryInterface(IID_IDVDControl2, DVDControl2)) then {if Succeeded() kannst du benutzen, um Abzufragen ob die Funktion erfolgreich ausgeführt wurde} DvdControl2.PlayForwards(8.0, DVD_CMD_FLAG_None, DvdCmd); DVDControl2 := Nil; end; {Damit würde er mit 8 Facher geschwindigkeit vorspulen} Um wieder normal abzuspielen, kannst du die geschwindigkeit vom Forwärtsspulen wieder auf 1 setzen, oder du machst wieder ne einfache abfrage und führst Play aus:
Delphi-Quellcode:
und zu dem Thema, wie man herrausfinden kann ob (und ob vorwärts oder rückwärts) gab es auch ne lösung, da müsste ich aber auch erstmal wieder suchen... kann ich mich nicht mehr genau erinnern!!
if FilterGraph.Active then
FilterGraph.Play; PS: Ach ja, das hardcoded, und muss wohl noch angepasst werden... |
Re: DVD mit DSPack abspielen
Danke für deine Antwort :)
Ok, naechstes Mal neues Thema. Ich habe es jetzt so:
Delphi-Quellcode:
Es funktioniert auch, aber ich weiß nicht, wie ich jetzt mit der gleichen Taste das Spulen wieder stoppen kann :wiejetzt:
if FilterGraph1.Active then
begin If Succeeded(FilterGraph1.QueryInterface(IID_IDVDControl2, DVDControl2)) then begin DvdControl2.PlayForwards(8.0, DVD_CMD_FLAG_None, DvdCmd); DVDControl2 := Nil; end; end; |
Re: DVD mit DSPack abspielen
Du könntest es mit ner Globalen Variable machen, zb:
Delphi-Quellcode:
var
IsSearching: Boolean; begin; if FilterGraph1.Active then begin if not IsSearching then begin; If Succeeded(FilterGraph1.QueryInterface(IID_IDVDControl2, DVDControl2)) then begin DvdControl2.PlayForwards(8.0, DVD_CMD_FLAG_None, DvdCmd); DVDControl2 := Nil; end; end else begin; If Succeeded(FilterGraph1.QueryInterface(IID_IDVDControl2, DVDControl2)) then begin DvdControl2.PlayForwards(1.0, DVD_CMD_FLAG_None, DvdCmd); DVDControl2 := Nil; end; end; end; end; |
Re: DVD mit DSPack abspielen
Mit ein paar kleinen Ergaenzungen funktioniert es! :wink:
Danke!! :-D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:51 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