Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi DSPack::spielt einmal->danach nicht mehr (https://www.delphipraxis.net/77799-dspack-spielt-einmal-danach-nicht-mehr.html)

Nils_13 25. Sep 2006 10:42

Re: DSPack::spielt einmal->danach nicht mehr
 
Delphi-Quellcode:
procedure TfrmMain.CheckState;
begin
  if FGC then
  begin
    with frmVideo do
    begin
      FilterGraph.Stop;
      FilterGraph.ClearGraph;
      FilterGraph.Free;
      FGC := False;
    end;
  end else
  begin
    with frmVideo do
    begin
      FilterGraph.RenderFile(fFiles[playindex].pfad);
      FilterGraph.play;
      FGC  := True;
      pause := True;
    end;
  end;
  frmVideo.Show;
end;
Delphi-Quellcode:
if LowerCase(ExtractFileExt(fFiles[playindex].Dateiname)) = '.mpeg' then
begin
  CheckState;
end;
Wie und wo würdest du dann in frmVideo FGC zuweisen, denn so bringt mir das nichts ?

EWeiss 25. Sep 2006 10:53

Re: DSPack::spielt einmal->danach nicht mehr
 
Delphi-Quellcode:
Wie und wo würdest du dann in frmVideo FGC zuweisen, denn so bringt mir das nichts ?
Verstehe ich nun nicht.

Geht das nicht als Public Variable?
übergreifend aus einer Unit? welche du unter used in der frmVideo zugewiesen hast?

FGC : Boolean?
Kannst mal den Source schicken? (Muss aber nicht unbedingt sein).
dann schau ich es mir mal an.

Innerhalb der frmVideo wird das wohl nichts werden
den beim schließen dieser ist die Variable(das ergebnis) davon nicht mehr vorhanden
mußt du also in deiner Hauptform einbinden.

gruß

Nils_13 25. Sep 2006 11:08

Re: DSPack::spielt einmal->danach nicht mehr
 
Hast mich falsch verstanden. Ich habe die Variable in der frmMain. Ich möcht wissen, wie ich die Variable von der frmVideo aus zuweisen muss, dass das funktioniert, bisher stand in der letzten Zeile von frmVideo.Destroy FGC := True, aber das bringt anscheinend nichts, denn bei dem Code bleibt das Videofenster schwarz.
Delphi-Quellcode:
procedure TfrmMain.CheckState;
begin
  if FGC then
  begin
    with frmVideo do
    begin
      FilterGraph.Stop;
      FilterGraph.ClearGraph;
      FilterGraph.Free;
      FGC := False;
    end;
  end else
  begin
    with frmVideo do
    begin
      FilterGraph.RenderFile(fFiles[playindex].pfad);
      FilterGraph.play;
      FGC  := True;
      pause := True;
    end;
  end;
  frmVideo.Show;
end;

EWeiss 25. Sep 2006 11:52

Re: DSPack::spielt einmal->danach nicht mehr
 
Zitat:

Zitat von Nils_13
Hast mich falsch verstanden. Ich habe die Variable in der frmMain. Ich möcht wissen, wie ich die Variable von der frmVideo aus zuweisen muss, dass das funktioniert, bisher stand in der letzten Zeile von frmVideo.Destroy FGC := True, aber das bringt anscheinend nichts, denn bei dem Code bleibt das Videofenster schwarz.
Delphi-Quellcode:
procedure TfrmMain.CheckState;
begin
  if FGC then
  begin
    with frmVideo do
    begin
      FilterGraph.Stop;
      FilterGraph.ClearGraph;
      FilterGraph.Free;
      FGC := False;
    end;
  end else
  begin
    with frmVideo do
    begin
      FilterGraph.RenderFile(fFiles[playindex].pfad);
      FilterGraph.play;
      FGC  := True;
      pause := True;
    end;
  end;
  frmVideo.Show;
end;

Nein funktioniert nicht in Delphi.(Glaub ich zumindest)
Weil du den Thread frmVideo beendest und damit FGC := True keine bedeutung mehr hat.
(Müßte aber beim beenden wenn schon auf False gesetzt werden) denn dein Video läuft ja nicht mehr.

Wenn es True ist und der wert doch noch selbst nach dem beenden der frmVideo
existenz ist dann ist es auf jedenfall falsch.
Er muss auf FALSE gesetzt werde.

gruß


gruß

EWeiss 25. Sep 2006 12:40

Re: DSPack::spielt einmal->danach nicht mehr
 
Habe deine 2 Pas dateien mal gescannt nach Graph
Kann nirgends erkennen wo du den FilterGraph initialisierst.

Gibt es da kein FilterGraph.Create oder ähnlich
Auch denke ich das du nach jeden FilterGraph.Free das FilterGraph.Window neu
initialisieren mußt von all den sachen kann ich in den Dateien nix finden.

Bei directX gibts zumindest den Befehl IVIDEO.VIdeoWindow := xxx.hdc


Hier mal ein ausschnitt von meinen Player (VB)

Delphi-Quellcode:
Private Sub sndPlayWmv(ByVal filename As String)

    On Error GoTo sndPlayWmvErr

    Set MediaControl = New FilgraphManager
    If MediaControl Is Nothing Then
        MsgBox "Kann die Ojektlib Mediacontrol nicht erstellen"
        Exit Sub
    End If

    Set VideoWindow = MediaControl
    MediaControl.RenderFile (filename)

    With VideoWindow
        .WindowStyle = CLng(&H6000000)  ' WS_DLGFRAME | WS_VSCROLL
        .SetWindowPosition mLeft, mTop, uWidth, uHeight
        .Owner = UserControl.hwnd       ' set the form as the parent
    End With 'VideoWindow

    MediaControl.Run

Exit Sub
Kann ich bei dir alles nicht finden :(

gruß

Nils_13 25. Sep 2006 13:17

Re: DSPack::spielt einmal->danach nicht mehr
 
Ich habe es anders gelöst :)
Delphi-Quellcode:
procedure TfrmVideo.Play;
begin
  frmVideo.Show;
  if not FilterGraph.Active then
    FilterGraph.Active := true;
  FilterGraph.ClearGraph;
  FilterGraph.RenderFile(frmMain.spath);
  FilterGraph.Play;
end;
Delphi-Quellcode:
if LowerCase(ExtractFileExt(fFiles[playindex].Dateiname)) = '.mpeg' then
begin
  spath := fFiles[playindex].Dateiname;
  frmVideo.Play;
  pause := True;
end;

EWeiss 25. Sep 2006 13:21

Re: DSPack::spielt einmal->danach nicht mehr
 
Zitat:

Zitat von Nils_13
Ich habe es anders gelöst :)
Delphi-Quellcode:
procedure TfrmVideo.Play;
begin
  frmVideo.Show;
  if not FilterGraph.Active then
    FilterGraph.Active := true;
  FilterGraph.ClearGraph;
  FilterGraph.RenderFile(frmMain.spath);
  FilterGraph.Play;
end;
Delphi-Quellcode:
if LowerCase(ExtractFileExt(fFiles[playindex].Dateiname)) = '.mpeg' then
begin
  spath := fFiles[playindex].Dateiname;
  frmVideo.Play;
  pause := True;
end;

Na fein wenn es jetzt läuft :-D

gruß

Cylence 28. Aug 2007 09:16

Re: DSPack::spielt einmal->danach nicht mehr
 
Hi,

ich hab auch manchmal ein Problem mit DSPack, und zwar wenn mehrere DIVX Videos hintereinander gespielt werden, kommt manchmal ein renderfile error...dies ist meine Play Prozedur:

Delphi-Quellcode:
procedure TForm7.PlayTHIS(Sender: TObject; This : String);
begin
         if FGVideo.Active then begin
           Form7.FGVideo.Stop;
           Form7.FGVideo.Active := False;
           Form7.FGVideo.ClearGraph;
           Form7.DCVISPluginRenderer1.Plugins.SetAudiofilter(nil);
           Form7.FgVideo.DisconnectFilters;
         end;
          if not Form7.FGVideo.Active then Form7.FGVideo.Active := True;
          Form7.FGVideo.ClearGraph;
      Sleep(100);
      try
          Errorcode := Form7.FGVideo.RenderFile(this);

   
////////////////  HIER IST WOHL DAS PROBLEM IRGENDWIE


        CodecError := GetEventCodeDef(Errorcode);
        if (CodecError = '') OR ( CodecError = ' ') then CodecError := 'No AV File';
        if (Errorcode = 0000) OR (Errorcode = S_OK) OR (Errorcode = VFW_S_PARTIAL_RENDER) OR (Errorcode = VFW_S_AUDIO_NOT_RENDERED) OR (Errorcode = VFW_S_DUPLICATE_NAME) OR (Errorcode = VFW_S_VIDEO_NOT_RENDERED) then begin    //alles ok
          try
            if VisualsMR then Form7.DCVISPluginRenderer1.Plugins.SetAudiofilter(Form7.FGDSFilter as IBaseFilter);
          except
             //Plugins Problem
          end;
          try
            Form7.FGVideo.Play;
            Playing := True;
          except
              //Trying to Play Error
              Working := False;
              StopALL;
              Exit;
          end;
        end
        else begin
        //CodecFehler
        ErrorDesc := 'Unbekannter Fehler';
         Case Errorcode of
              E_ABORT                         : ErrorDesc := 'Operation aborted';
              E_FAIL                          : ErrorDesc := 'Failure';
              E_INVALIDARG                    : ErrorDesc := 'Argument is invalid';
              E_OUTOFMEMORY                   : ErrorDesc := 'Insufficient memory';
              E_POINTER                       : ErrorDesc := 'Null pointer argument';
              VFW_E_CANNOT_CONNECT            : ErrorDesc := 'No combination of intermediate filters could be found to make the connection';
              VFW_E_CANNOT_LOAD_SOURCE_FILTER : ErrorDesc := 'The source filter for this file could not be loaded';
              VFW_E_CANNOT_RENDER             : ErrorDesc := 'No combination of filters could be found to render the stream';
              VFW_E_INVALID_FILE_FORMAT       : ErrorDesc := 'The file format is invalid';
              VFW_E_NOT_FOUND                 : ErrorDesc := 'An object or name was not found';
              VFW_E_UNKNOWN_FILE_TYPE         : ErrorDesc := 'The media type of this file is not recognized';
              VFW_E_UNSUPPORTED_STREAM        : ErrorDesc := 'Cannot play back the file: the format is not supported';
         end;              
         Errorcode := 0001;
         Working := False;
         StopALL;
         Exit;
       end;    
     except
        //Renderfile Error oder System überlastet
        Errorcode := 0001;
        Working := False;
        StopALL;
        Exit;
     end;
   end;
    //ALLES OK Player läuft
   if (Errorcode = 0000) OR (Errorcode = S_OK) OR (Errorcode = VFW_S_PARTIAL_RENDER) OR (Errorcode = VFW_S_AUDIO_NOT_RENDERED) OR (Errorcode = VFW_S_DUPLICATE_NAME) OR (Errorcode = VFW_S_VIDEO_NOT_RENDERED) then begin
      deskdisplay.Label2.Caption := 'Jetzt läuft:';
      TrackCounter := TrackCounter +1;
      Form7.PlayTime.Enabled := True;
      REMOVE := False;
      Playing := True;
   end;
   end
end;
Wär cool wenn mir jemand helfen könnte, is glaub alles etwas wirr und durcheinander...aber es klappt fast immer..nur eben manchmal bei divx filmen oder wenn verschiedene divy xvid ...dann mp3 und wieder divx gespielt werden, kommt manchmal der renderfilerror...

xaromz 28. Aug 2007 09:27

Re: DSPack::spielt einmal->danach nicht mehr
 
Hallo,

wenn Du Deinen Quellcode etwas aufräumst und in [delphi][/delphi] Tags steckst, steigen Deine Chancen auf Hilfe enorm. In den Verhau kann ich mich jedenfall jetzt nicht einarbeiten.
Schmeiss doch mal alles raus, was nichts mit dem Abspielen zu tun hat.

Gruß
xaromz

Cylence 28. Aug 2007 09:51

Re: DSPack::spielt einmal->danach nicht mehr
 
ok danke habs nochmal bisi besser dargestellt denk ich....


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:48 Uhr.
Seite 2 von 4     12 34      

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