Delphi-PRAXiS

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 07:47


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

wie der Cpp-Titel schon sagt, spielt mir das DSPack ein Video einmal ab und danach nicht mehr:
Delphi-Quellcode:
frmVideo.Show;
with frmVideo do
begin
  if not FilterGraph.Active then
  begin
    if not FilterGraph.Active then
      FilterGraph.Active := true;
    FilterGraph.Stop;
    FilterGraph.ClearGraph;
    FilterGraph.RenderFile(fFiles[playindex].pfad);
    FilterGraph.play;
    pause := True;
  end;
end;
Das heißt, ich spiele Video1 aus der Playlist ab und klicke doppelt, entweder während Video1 noch abgespielt wird, oder wenn es gestoppt wurde, auf das Video2, womit der oben gezeigte Code aufgerufen wird. Plötzlich sehe ich nur noch ein schwarzes DSVideoWindowEx2 auf der Videoform. Ab dem ersten Abspielen von einem beliebigen Video, kann ich keine anderen mehr abspielen. Eventuell liegt es auch an der Videoform:
Delphi-Quellcode:
procedure TfrmVideo.FormDestroy(Sender: TObject);
begin
  FilterGraph.ClearGraph;
  FilterGraph.Free;
  VideoWindow.Free;
end;

EWeiss 25. Sep 2006 08:02

Re: DSPack::spielt einmal->danach nicht mehr
 
Ich denk mal das du den Filtergraph auch beenden (freigeben)
mußt wenn du einen doppelklick auf die Liste ausführst.

Ich kann aus deine schnipsel nicht entnehmen das dies geschieht.


Delphi-Quellcode:
procedure TfrmVideo.FormDestroy(Sender: TObject);
begin
  FilterGraph.ClearGraph;
  FilterGraph.Free;
  VideoWindow.Free;
end;
muß im klickverhalten von deiner Playliste stehen.
Vergleichen mit if not FilterGraph.Active then : Else Obige zeilen ausführen.

Gruß

Nils_13 25. Sep 2006 08:16

Re: DSPack::spielt einmal->danach nicht mehr
 
1. Das MUSS in OnDestroy trotzdem stehen, da ich sonst eine AV beim Beenden des Programms bekomme.
2. Wo soll dann der Freigabecode in Doppelklick hin ?
Wenn ich noch
Delphi-Quellcode:
with frmVideo do
begin
  if Filtergraph.Active then
  begin
    FilterGraph.ClearGraph;
    FilterGraph.Free;
    VideoWindow.Free;
  end;
end;
vor den Abspielcode setze, wird eine AV bei der markierten Zeile hervorgerufen:
Delphi-Quellcode:
frmVideo.Show;
with frmVideo do
begin
  if not FilterGraph.Active then
  begin
   --> if not FilterGraph.Active then <--
      FilterGraph.Active := true;
    FilterGraph.Stop;
    FilterGraph.ClearGraph;
    FilterGraph.RenderFile(fFiles[playindex].pfad);
    FilterGraph.play;
    pause := True;
  end;
end;

EWeiss 25. Sep 2006 08:58

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

Zitat von Nils_13
1. Das MUSS in OnDestroy trotzdem stehen, da ich sonst eine AV beim Beenden des Programms bekomme.
2. Wo soll dann der Freigabecode in Doppelklick hin ?
Wenn ich noch
Delphi-Quellcode:
with frmVideo do
begin
  if Filtergraph.Active then
  begin
    FilterGraph.ClearGraph;
    FilterGraph.Free;
    VideoWindow.Free;
  end;
end;
vor den Abspielcode setze, wird eine AV bei der markierten Zeile hervorgerufen:
Delphi-Quellcode:
frmVideo.Show;
with frmVideo do
begin
  if not FilterGraph.Active then
  begin
   --> if not FilterGraph.Active then <--
      FilterGraph.Active := true;
    FilterGraph.Stop;
    FilterGraph.ClearGraph;
    FilterGraph.RenderFile(fFiles[playindex].pfad);
    FilterGraph.play;
    pause := True;
  end;
end;

Nee hast mich falsch verstanden!
Ein AV bekommst du deshalb weil du den FilterGraph neu initialisierst und er noch nicht freigegeben ist
Bei jeden Film wird eine neue Instanz von FilterGraph gebildet was bedeutet
wird diese nicht vorher beendet bekommst du einen AV.

Du kannst if not FilterGraph.Active nicht aufrufen wenn du einen doppelklick auf die Liste machst
FilterGraph dürfte dann schon nicht mehr existieren.
Mache doch eine Public oder Globale Variable welche dir ermöglicht
den status unabhängig von FilterGraph zu überprüfen.

Beispiel:
ISVIdeoPlaying : Boolean;
Das einfügen nachdem ein Video spielt logischer weise auf True setzen
Wenn du nun auf die Liste klickst dieses Variable abfragen
Wenn True dann FilterGraph beenden, neu initialisieren und fertig.

PS: Am besten nicht im Doppelklick event sondern im Mouseup Event
Die Liste darf nicht mehr den Focus habe wenn du FilterGraph neu initialisierst.
Und noch was FilterGraph.Free; muss immer ausgeführt werden bevor du ein
neues Video abspielst.
VideoWindow.Free; nicht unbedingt .. wenn du es mit einer PIcBox(Canvas) verbunden hast.
Aber auf jedenfall wenn du dein Projekt beendest.

Gruß

Nils_13 25. Sep 2006 09:31

Re: DSPack::spielt einmal->danach nicht mehr
 
Meinst du das so ?
Delphi-Quellcode:
procedure TfrmMain.lbListMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if FGC= True then
  begin
    with frmVideo do
    begin
      if Filtergraph.Active then
      begin
        FilterGraph.Active := False;
        FilterGraph.ClearGraph;
        FilterGraph.Free;
        FGC := False
      end;
    end;
  end else
  begin
    with frmVideo do
    begin
      if not FilterGraph.Active then
        FilterGraph.Active := true;
      FilterGraph.Stop;
      FilterGraph.ClearGraph;
      FilterGraph.RenderFile(fFiles[playindex].pfad);
      FilterGraph.play;
      pause := True;
    end;
  end;
end;

EWeiss 25. Sep 2006 09:39

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

Zitat von Nils_13
Meinst du das so ?
Delphi-Quellcode:
procedure TfrmMain.lbListMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if FGC= True then
  begin
    with frmVideo do
    begin
      if Filtergraph.Active then
      begin
        FilterGraph.Active := False;
        FilterGraph.ClearGraph;
        FilterGraph.Free;
        FGC := False
      end;
    end;
  end else
  begin
    with frmVideo do
    begin
      if not FilterGraph.Active then
        FilterGraph.Active := true;
      FilterGraph.Stop;
      FilterGraph.ClearGraph;
      FilterGraph.RenderFile(fFiles[playindex].pfad);
      FilterGraph.play;
      pause := True;
    end;
  end;
end;

JA !
Nur die abfrage 'if Filtergraph.Active then' benötigst du nicht mehr
das erledigt FGC nun an der stelle
Auch die anderen wie FilterGraph.Active := False; nicht.

All das erledigt nun die neue Variable unabhängig vom FilterGraph
Beim neustart bracuhst du auch die anderen sachen nicht.

Delphi-Quellcode:
      if not FilterGraph.Active then
        FilterGraph.Active := true;
      FilterGraph.Stop;
      FilterGraph.ClearGraph;
      FilterGraph.RenderFile(fFiles[playindex].pfad);
      FilterGraph.play;
      pause := True;
Der FilterGraph.ClearGraph; muß nicht nochmal gelöscht werden!
Das geschieht bereits in der obigen abfrage.
FilterGraph.Stop; brauchst du auch nicht.

nur diese beiden
FilterGraph.RenderFile(fFiles[playindex].pfad);
FilterGraph.play;

etwa so ! Habe aber jetzt nicht auf die IF abfragen geachtet.
Delphi-Quellcode:
  if FGC= True 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;

gruß

Nils_13 25. Sep 2006 09:46

Re: DSPack::spielt einmal->danach nicht mehr
 
Es funktioniert jetzt zwar allgemein, aber MouseUp kann ich wegen Drag&Drop der ListBox nicht verwenden. Was könnte ich anstelle von MouseUp nehmen ?

EWeiss 25. Sep 2006 09:50

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

Zitat von Nils_13
Es funktioniert jetzt zwar allgemein, aber MouseUp kann ich wegen Drag&Drop der ListBox nicht verwenden. Was könnte ich anstelle von MouseUp nehmen ?

Du kannst eine eigene Funktion erstellen.
Beispiel:

Procedure CeckState();

Hier dein Code
If FC True xxx....

end;

diese im Mouseup Events aufrufen.
Die ganze schleife also da rein.

PS: Du muß im Mouseup event eine abfrage einfügen welche dir mitteilt ob ein
doppelklick event ausgeführt wurde.
Nur dann in Checkstate reinspringen.

gruß

Nils_13 25. Sep 2006 10:06

Re: DSPack::spielt einmal->danach nicht mehr
 
Delphi-Quellcode:
procedure TfrmMain.lbListDblClick(Sender: TObject);
begin
  xiPlayClick(Sender);
end;
In xiPlay.Click werden die Endungen geprüft: Wenn Video dann öffne Videofenster, geb Filtergraph frei, lade das neue Video und spiel es ab.

Mit MouseUp komm ich da nicht weiter.

frmVideo:
Delphi-Quellcode:
procedure TfrmVideo.FormDestroy(Sender: TObject);
begin
  FilterGraph.ClearGraph;
  FilterGraph.Free;
  VideoWindow.Free;
  frmMain.FGC := True;
end;
frmMain:
Delphi-Quellcode:
procedure TfrmMain.xiPlayClick(Sender: TObject);
var s : String;
begin
  if (lbList.ItemIndex >= 0) then
  begin
    playindex := lbList.ItemIndex;
    if LowerCase(ExtractFileExt(fFiles[playindex].Dateiname)) = '.mp3' then
    begin
      PlayFile(playindex);
      with fFiles[playindex] do
      begin
        s := Artist + ' - ' + Titel + ' [' + trim(DurationMinSec(IntToStr(GetSongLength))) + ']';
        lLauftext.Text   := s;
        lLauftext.Active := True;
        lLauftext.Transparent := True;
        Application.Title := s;
      end;
      pindex           := playindex;
      pause            := True;
    end;
    if LowerCase(ExtractFileExt(fFiles[playindex].Dateiname)) = '.wmv' then
    begin
      frmVideo.Show;
      xiStopClick(Sender);
      with frmVideo do
      begin
        if not FilterGraph.Active then
        begin
          if not FilterGraph.Active then
            FilterGraph.Active := True;
          FilterGraph.ClearGraph;
          FilterGraph.RenderFile(fFiles[playindex].pfad);
          FilterGraph.play;
          pause := True;
        end;
      end;
    end;
    if LowerCase(ExtractFileExt(fFiles[playindex].Dateiname)) = '.mpeg' then
    begin
      frmVideo.Show;
      with frmVideo do
      begin
        if not FilterGraph.Active then
        begin
          if not FilterGraph.Active then
            FilterGraph.Active := true;
          FilterGraph.Stop;
          FilterGraph.ClearGraph;
          FilterGraph.RenderFile(fFiles[playindex].pfad);
          FilterGraph.play;
          pause := True;
        end;
      end;
    end;
    usw.
Das ist der Ursprungscode.

EWeiss 25. Sep 2006 10:34

Re: DSPack::spielt einmal->danach nicht mehr
 
Lieber Nils

Ich sagte es ja schon.
Was mir auffällt ist das du alles doppelt machst.
Ich frage mich warum ?

Delphi-Quellcode:
    if LowerCase(ExtractFileExt(fFiles[playindex].Dateiname)) = '.wmv' then
    begin
      frmVideo.Show;
      xiStopClick(Sender);
      with frmVideo do
      begin
        if not FilterGraph.Active then
        begin
          if not FilterGraph.Active then
            FilterGraph.Active := True;
          FilterGraph.ClearGraph;
          FilterGraph.RenderFile(fFiles[playindex].pfad);
          FilterGraph.play;
          pause := True;
        end;
      end;
    end;
if not FilterGraph.Active then wird zweimal in der gleichen abfrage aufgerufen
das muss nicht sein.

Dann kannst du dir viel ärger ersparen wenn du die abfragen Play/Stop auslagerst in eine
eigens dafür erstellte Function.
Und die aufrufst wenn du ein anderes Video startest.
Ich würde im click verhalten nur das Format abfragen also *-wmv/*-avi oder was auch immer

Delphi-Quellcode:
    if LowerCase(ExtractFileExt(fFiles[playindex].Dateiname)) = '.wmv' then
    begin
      xiStopClick(Sender);
      CheckPlayState
    end;
procedure CheckPlayState()

//hier deine ganze abfrage vom aktuellen Spielstatus einfügen.

end;


Das gleiche bei

Delphi-Quellcode:
    if LowerCase(ExtractFileExt(fFiles[playindex].Dateiname)) = '.mpeg' then
    begin
        xiStopClick(Sender);
        CheckPlayState
      end;
    end;
Du mußt dann die abfrage nur einmal schreiben und nicht bei jeden Dateityp doppelt.
frmVideo.Show; direkt in der ersten zeile des click events

PS: Da fällt mir noch was auf zwei die gleichen abfragen nur wegen verschiedene Formate
das geht besser. Feste Variable anlegen 'VideoTypen' VideoTypen := '.mpeg;.wmv'

Dann kannst du beide Typen mit der Variable VideoTypen abfragen und mußt nicht alles doppelt machen.

gruß

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

Cylence 29. Aug 2007 07:34

Re: DSPack::spielt einmal->danach nicht mehr
 
sieht dabei irgend jemand einen fehler? Mach ich da was falsch?

xaromz 29. Aug 2007 10:10

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

ich kann jetzt keinen Fehler feststellen, aber das heißt nichts. Du rufst irgendwelche Funktionen irgendwelcher Objekte auf. Ich habe keine Ahnung, was die alles machen. Der "DCVISPluginRenderer1" ist so eine Beispiel. Die richtige Vorgehensweise ist es wohl, alles, was nicht zwingend notwendig ist, erst mal auszukommentieren; dann kannst Du nach und nach diese Teile wieder in Betrieb zu nehmen, bis der Fehler auftritt. Dann weißt Du, wo Du suchen musst, und dann können wir uns an die Lösung machen.
Noch eine Frage: Tritt das Problem nur mit bestimmten Dateien auf oder mit ist das Verhalten zufällig? Schau Dir doch mal mit Bei Google suchenGraphEdit den Filtergraph an.

Gruß
xaromz

Cylence 29. Aug 2007 10:34

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

das is die Komponente für die Visual Plugins vom DSPack, bzw die kommt von den DCDSP komponenten von DSP-WORX das ist aber nicht das Problem, ist das wird ja nur benutzt wenns auch aktiviert is, aber der Fehler tritt nicht auf wenn die Visuals an sind, sondern immer mal wieder, es sind auch nich direkt bestimmte dateien, manchmal bei nem MPG manchmal bei ner MP3 manchmal bei ner AVI...meist tritt das auf wenn eben unterschiedliche files hintereinander abgespielt werden also nach nem video MPg z.b. wenn danach ne mp3 kommt geht diese manchmal nicht renderfile error...oder wenn viele divx files hintereinander gespielt werden, kann es evtl sein, das der Codec, also eben z.b. divx manchmal nich ganz hinterher kommt oder so? also das der noch nich ganz aus dem speicher raus is, und ich will schon wieder das nächste starten oder so? Das Problem ist auch das ich ja in delphi keine Videos im Player laufen lassen kann, weil da kommt gleich meldung debugger detected und sense is...leider... aber auch das hätte mich nicht weiter gebracht wahrscheinlich da der fehler eben immer bei Filtergraph.renderfile(Dateiname); auftritt...ich habe schon versucht das renderfile einfach mit try except mehrmals hintereinander zu versuchen...oder ein sleep davor zu machen, aber das hat beides nix gebracht...

xaromz 29. Aug 2007 10:48

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

ich hatte ein ähnliches Problem früher (mit OGM-Dateien). Sobald ich eine abgespielt hatte, ging der Player nicht mehr. Meine Lösung war damals IMHO, nach jedem Abspielen den TFilterGraph zu zerstören und neu zu erstellen. Inzwischen habe ich mir meine eigenen Routinen geschrieben, die ziemlich am DSPack vorbei gehen (aber immer noch das VideoWindow nutzen). Zeig doch mal, was Du beim Stoppen einer Mediendatei anstellst.

Gruß
xaromz

Cylence 29. Aug 2007 10:55

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

auf Stop mach ich das:

Form7.fgvideo.Stop;
Form7.FGVideo.ClearGraph;
Form7.FGVideo.Active := False;
Form7.DCVISPluginRenderer1.Plugins.SetAudiofilter( nil);
Form7.FgVideo.DisconnectFilters;


mehr eigentlich nicht. Ist das richtig so? Genauso mach ich es ja auch in der Play Prozedur... habs auch mal mit disconnectfilters und mal ohne probiert...macht keinen unterschied. Ist die vorgehensweise denn überhaupt richtig so?

xaromz 29. Aug 2007 11:05

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

das sieht soweit gut aus. Aber versuch doch trotzdem mal, den Filtergraph zu zerstören und neu zu erstellen. Das hat mir wie gesagt damals geholfen.

Gruß
xaromz

Cylence 29. Aug 2007 12:09

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

das hab ich mal probiert grad, aber das verhalten is nich viel anders hab n paar xvid files hintereinander abgespielt und 2 gingen nich ...renderfileerror... und ansonsten hats geklappt, genau das selbe...also ich habs eben so probiert:

Delphi-Quellcode:
         
     if FGVideo.Active then begin
           Form7.FGVideo.Stop;
           Form7.FGVideo.ClearGraph;
           Form7.FGVideo.Active := False;
           Form7.DCVISPluginRenderer1.Plugins.SetAudiofilter(nil);
           Form7.FgVideo.DisconnectFilters;
           //Dyn neuer Filtergraph....
           Form7.FgVideo.Free;
           NewFilter := TFilterGraph.Create(Form7);
           NewFilter.Name := 'FGVideo';
           Form7.DSVideoWindowEx21.FilterGraph := FGVideo;
           Form7.FGDSFilter.FilterGraph := FGVideo;
           Form7.DSTrackBar1.FilterGraph := FGVideo;
           Playlistform.DSTrackBar1.FilterGraph := FGVideo;
           DeskDisplay.DSTrackBar1.FilterGraph := FGVideo;  
           //-------------------
     end;
ausserdem war es auch noch so das die 2 weiteren dstrackbars nich mehr gehen obwohl ich sie ja wiedr mit dem filtergraph verknpfe... nur die erste trackbar geht also Form7.dstrackbar1

Cylence 29. Aug 2007 12:24

Re: DSPack::spielt einmal->danach nicht mehr
 
noch eine frage dazu... manchmal kommt der fehler aber manchmal hängt sich der player dadurch total auf, kann ich das total aufhängen irgendwie unterdrücken? ich mach ja alles schon mit try excepts...

EWeiss 29. Aug 2007 14:14

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

Zitat von Cylence
noch eine frage dazu... manchmal kommt der fehler aber manchmal hängt sich der player dadurch total auf, kann ich das total aufhängen irgendwie unterdrücken? ich mach ja alles schon mit try excepts...

renderfileerror
Hat definitiv nichts mit dem DSPack zu tun.
Eher damit das dieses Video nicht kompatibel mit dem aktuell installierten Codec ist.

Vielleicht mal die Videos mit einen im System befindlichen Player abspielen.
Dann kannst du sehen ob es nun an DSPack liegt oder aber einfach an der Datei selbst.
Alternativ kämen auch noch die resourcen zu tragen vielleicht schafft dein Compi die vielen
gleichzeitig spielenden Videos nicht.

gruss Emil

Cylence 29. Aug 2007 14:57

Re: DSPack::spielt einmal->danach nicht mehr
 
also eins der videos die nich in meinem player gehen, geht auch im windows media player nicht, aber der windows media player hängt sich dann nich total auf... das meinte ich. Ich fange ja den Fehler eigentlich mit try except ab, und stoppe dann den player bei einem fehler. Dies geht bei 99 % auch nur manchmal friert alles ein.
ausserdem gehen ja manchmal selbst mp3 nicht...

Unter VISTA vor allem, da wird ja der DMO MP3 Filter verwendet und der kann scheinbar sehr viele MP3s garnicht abspielen, kann ich DSPACK sagen das er den Codec nich verwenden soll? Ist das möglich?

EWeiss 29. Aug 2007 15:33

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

Zitat von Cylence
also eins der videos die nich in meinem player gehen, geht auch im windows media player nicht, aber der windows media player hängt sich dann nich total auf... das meinte ich. Ich fange ja den Fehler eigentlich mit try except ab, und stoppe dann den player bei einem fehler. Dies geht bei 99 % auch nur manchmal friert alles ein.
ausserdem gehen ja manchmal selbst mp3 nicht...

Unter VISTA vor allem, da wird ja der DMO MP3 Filter verwendet und der kann scheinbar sehr viele MP3s garnicht abspielen, kann ich DSPACK sagen das er den Codec nich verwenden soll? Ist das möglich?

Wird nicht gehn ..
Ich habe K-Lite Codecpack installiert.
Keine ahnung was du im system installiert hast.

Bei meinen Player hängt sich da nix auf.

gruss Emil

Cylence 29. Aug 2007 15:46

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

du meinst jetzt unter VISTA? Da hab ich garkeine Codecs installiert is ein leeres blankes System so wie die leute drauf haben nach der installation...und da gehen einige MP3s nicht, wenn magst kann ich Dir eins schicken, zum testen... also unter VISTA unter XP gibts bei MP3s keine Probleme eigentlich nur extremst selten wenn vorher ein video war und irgendwas schief läuft...

EWeiss 29. Aug 2007 22:08

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

Zitat von Cylence
Hi,

du meinst jetzt unter VISTA? Da hab ich garkeine Codecs installiert is ein leeres blankes System so wie die leute drauf haben nach der installation...und da gehen einige MP3s nicht, wenn magst kann ich Dir eins schicken, zum testen... also unter VISTA unter XP gibts bei MP3s keine Probleme eigentlich nur extremst selten wenn vorher ein video war und irgendwas schief läuft...

Nein ich meine unter Xp mit deinen Videos...
Ich benutze das obengenannte Codec Pack und habe keine probleme damit.

Vista hab ich nicht..

gruss Emil


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:31 Uhr.

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