Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi DVD mit DSPack abspielen (https://www.delphipraxis.net/123433-dvd-mit-dspack-abspielen.html)

Paul0703 1. Nov 2008 20:24


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

lbccaleb 1. Nov 2008 20:44

Re: DVD mit DSPack abspielen
 
hast du auch den passenden codec installiert??

Paul0703 1. Nov 2008 20:50

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?

mkinzler 1. Nov 2008 20:51

Re: DVD mit DSPack abspielen
 
Diese bringen meisstens einen eigenen Codec mit.

Paul0703 1. Nov 2008 20:55

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:

Paul0703 1. Nov 2008 21:20

Re: DVD mit DSPack abspielen
 
Funzt leider nicht :(
Aber vielleicht geht das auch nicht so, wie ich es gemacht habe:
Delphi-Quellcode:
If not FilterGraph1.Active = True then FilterGraph1.Active := True;
    FilterGraph1.ClearGraph;
    FilterGraph1.RenderFile(OpenDialog1.FileName);
    FilterGraph1.Volume := TrackBar1.Position * 1000;
    FilterGraph1.Play;
Mit MPEG,Avi usw. funzt es ja!

lbccaleb 1. Nov 2008 22:24

Re: DVD mit DSPack abspielen
 
du weißt schon, dass du bei dvds anstatt
Delphi-Quellcode:
filtergraph1.renderfile
,
Delphi-Quellcode:
filtergraph.renderdvd
verwenden musst??

Paul0703 2. Nov 2008 10:50

Re: DVD mit DSPack abspielen
 
Zitat:

Zitat von lbccaleb
du weißt schon, dass du bei dvds anstatt
Delphi-Quellcode:
filtergraph1.renderfile
,
Delphi-Quellcode:
filtergraph.renderdvd
verwenden musst??

Danke!
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:
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;
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.
Delphi-Quellcode:
if status.iNumStreamsFailed > 0 then Application.MessageBox('Can''t render one or more stream.', 'Error', mb_OK);
Gruß
Paul

igel457 2. Nov 2008 11:04

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.

lbccaleb 2. Nov 2008 11:11

Re: DVD mit DSPack abspielen
 
denke auch das die dvd verschlüsselt sein wird, am besten ist, du probierst es mal mit einer anderen..

Paul0703 2. Nov 2008 11:14

Re: DVD mit DSPack abspielen
 
Zitat:

Zitat von igel457
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.

Ich hatte vergessen, den Mode vom FilterGraph auf gmDVD umzustellen.
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:

Ansonsten solltest du dir überlegen DirectShow irgendwie libdvdcss vorzuspannen. Du musst dann einen eigenen Access Filter schreiben und registrieren.

Paul0703 2. Nov 2008 11:18

Re: DVD mit DSPack abspielen
 
Ok. Mit einer anderen DVD scheint es zu gehen :)
Aber es wird nur in diesem extra Fenster angezeigt :?:

Paul0703 2. Nov 2008 11:54

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

lbccaleb 2. Nov 2008 13:01

Re: DVD mit DSPack abspielen
 
schau dir doch die demo vom dspack mal richtig an, denn dort wirst du sowas finden:


Delphi-Quellcode:
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;
ich denke das ist es was du gesucht hast, oder??

Paul0703 2. Nov 2008 13:12

Re: DVD mit DSPack abspielen
 
Voll ins Schwarze getroffen! :mrgreen:

Zitat:

schau dir doch die demo vom dspack mal richtig an, denn dort wirst du sowas finden:
Da hast du Recht, wer lesen kann ist schwer im Vorteil :roll:

Danke für eure Hilfe!!


Paul

mkinzler 2. Nov 2008 13:17

Re: DVD mit DSPack abspielen
 
Bei den Beispielen wird immer am Schluss geschaut :gruebel:

Paul0703 3. Nov 2008 13:41

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:
if FilterGraph1.Active then
      with FilterGraph1 as IDvdControl2 do PlayForwards(1.0,DVD_CMD_FLAG_None, DvdCmd);
Den code verwende ich zum Spulen:
Delphi-Quellcode:
if FilterGraph1.Active then
      with FilterGraph1 as IDvdControl2 do PlayForwards(8.0,DVD_CMD_FLAG_None, DvdCmd);
Wie kann ich das machen, dass er wieder aufhört mit Spulen, wenn ich erneut auf den Button klicke?
Ich dachte etwa so:
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;
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
ja einfach wieder mit 1X laufen.
Aber es funzt so nicht:
Delphi-Quellcode:
if FilterGraph1.Active then
      with FilterGraph1 as IDvdControl2 do PlayForwards(+ 2.0,DVD_CMD_FLAG_None, DvdCmd);
Er meckert zwar nicht, aber im programm funktioniert es dann nicht :?

Ich hoffe, ihr könnt mir mit dem Spulen helfen :wink:

Paul

lbccaleb 3. Nov 2008 18:14

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:
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}
Das selbe kannst du dann auch mit rückwärtsspulen machen...

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:
  if FilterGraph.Active then
    FilterGraph.Play;
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!!

PS: Ach ja, das hardcoded, und muss wohl noch angepasst werden...

Paul0703 3. Nov 2008 19:25

Re: DVD mit DSPack abspielen
 
Danke für deine Antwort :)
Ok, naechstes Mal neues Thema.
Ich habe es jetzt so:
Delphi-Quellcode:
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;
Es funktioniert auch, aber ich weiß nicht, wie ich jetzt mit der gleichen Taste das Spulen wieder stoppen kann :wiejetzt:

lbccaleb 3. Nov 2008 19:37

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;

Paul0703 3. Nov 2008 20:01

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