Autor Beitrag
Tendl
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 117



BeitragVerfasst: Mo 09.11.15 12:20 
Ich verwende PasLibVLC um für Videos aus einer größeren Sammlung z.B Playtime und Auflösung zu ermitteln.

Dabei ist mir aufgefallen das bei einem Wechsel von MP4 zu MP4 eine Verzögerungszeit von 25s auftritt, zwischen anderen Videodateitype, auch von *.wmv zu *mp4 beträgt die Umschaltzeit gerade mal 2 sec.

Ich bin mit DELPHi7 unterwegs, ich glaube aber nicht das hier die Ursache zu suchen ist.

Weiß jemand Rat oder hat einen Tip für mich?

Vielen Dank bereits im Voraus
Thomas


Sorry ich war zunächst im falschen Forum unterwegs.
SMO
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 120
Erhaltene Danke: 18


D2005 Personal
BeitragVerfasst: Mo 09.11.15 13:37 
Ich kenne PasLibVLC nicht. Du könntest als Alternative mal MediaInfo ausprobieren. Im Quelltextpaket gibt es eine Delphi Unit für die DLL (MediaInfoLib\Source\MediaInfoDLL\MediaInfoDLL.pas) sowie ein kleines Beispielprojekt (MediaInfoLib\Project\Delphi\Example\).
Tendl Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 117



BeitragVerfasst: Mo 09.11.15 14:54 
Hallo SMO,

vielen Dank für den Tip. Ich werde das demnächst ausprobieren.

Gruß Thomas
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 09.11.15 15:39 
Vielleicht ist es möglich, die Explorer-Daten zu übernehmen, denn der Explorer ist blitzschnell.

Hier gibt es auch
MediaInfoLib (MediaInfo.dll v0.7.7.6) Interface for Delphi, (c)2008 by Norbert Mereg (Icebob)
MediaArea.net/MediaInfo
mediaarea.net/en/MediaInfo/Download/Source
mediaarea.net/downlo...7.79_AllInclusive.7z

Sorry - steht schon weiter oben...
Einloggen, um Attachments anzusehen!


Zuletzt bearbeitet von hathor am Mo 09.11.15 16:11, insgesamt 2-mal bearbeitet
Tendl Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 117



BeitragVerfasst: Mo 09.11.15 15:58 
Explorer habe ich mir auch schon mal überlegt. Für die Playtime ginge das wahrscheinlich,
für Bild-Höhe und Breite aber nicht mehr, dazu müsste man dann schon auf die Eigenschaften
zugreifen können. Für mich war dann der Ansatz mit der PasLibVLC erstmal einfacher.
Prinzipiell macht die Lib ja auch was sie soll, bei allen Video-Dateien außer mp4 ja
auch in zufriedenstellender Geschindigkeit.

Auffällig ist dabei auch noch das das beiliegende compilierte Beispiel diese Verzögerung nicht
hat, compiliere ich es aber neu habe ich die Pause wieder.

Die Run-Time-Checks habe ich alle disabled.

Ein Kopieren libvlc.dll ins Projekt-Verzeichnis hat auch nichts verbessert.

Extrem merkwüdig!
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 09.11.15 17:42 
user profile iconTendl hat folgendes geschrieben Zum zitierten Posting springen:
Auffällig ist dabei auch noch das das beiliegende compilierte Beispiel diese Verzögerung nicht hat, compiliere ich es aber neu habe ich die Pause wieder.

Dann kann es eigentlich nur an deinem Code liegen, und den kennt außer dir niemand :roll: Was soll man da nun raten? Ach ja, ich weiß: Poste den relevanten Code, das wär doch mal ein Anfang :?:
Tendl Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 117



BeitragVerfasst: Mo 09.11.15 18:37 
Die meiste Zeit vergeht beim Schließen der MP4-Datei
Der Code ist unverändert aus der DEMO:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
unit MainFormUnit;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Menus, ExtCtrls, PasLibVlcPlayerUnit;

type
  TMainForm = class(TForm)
    PasLibVlcPlayer: TPasLibVlcPlayer;
    MainMenu: TMainMenu;
    MenuFile: TMenuItem;
    MenuFileOpen: TMenuItem;
    MenuFileQuit: TMenuItem;
    OpenDialog: TOpenDialog;

    procedure MenuFileQuitClick(Sender: TObject);
    procedure MenuFileOpenClick(Sender: TObject);
    procedure PasLibVlcPlayerMediaPlayerMediaChanged(Sender: TObject;
      mrl: string);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;

implementation

{$R *.DFM}

procedure TMainForm.MenuFileQuitClick(Sender: TObject);
begin
  Close();
end;

procedure TMainForm.MenuFileOpenClick(Sender: TObject);
var
  logo_file_1 : string;
  logo_file_2 : string;
begin
  if OpenDialog.Execute() then
  begin
    PasLibVlcPlayer.Play(OpenDialog.FileName);
    logo_file_1 := ExtractFilePath(Application.ExeName) + '\..\..\logo1.png';
    logo_file_2 := ExtractFilePath(Application.ExeName) + '\..\..\logo2.png';
    if (FileExists(logo_file_1) and FileExists(logo_file_2)) then
    begin
      PasLibVlcPlayer.LogoShowFiles([logo_file_1, logo_file_2]);
    end;
    PasLibVlcPlayer.MarqueeShowText('marquee test %H:%M:%S');
  end;
end;

procedure TMainForm.PasLibVlcPlayerMediaPlayerMediaChanged(Sender: TObject;
  mrl: String);
begin
  Caption := mrl;
end;

end.
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 09.11.15 19:49 
Also da seh ich schonmal einen Fehler bzw. unnötige Klammern in MenuFileOpenClick:

ausblenden Delphi-Quelltext
1:
if (FileExists(logo_file_1) and FileExists(logo_file_2)) then					


Klammern sind nur notwendig, wenn es sich um einen zusammengesetzten Ausdruck handelt. FileExists(FileName) ist jedoch kein zusammengesetzter Ausdruck.

Den nächsten Fehler machst du in derselben Methode mit ExtractFilePath:
Extrahiert die Laufwerks- und Verzeichnisinformationen aus einem Dateinamen. Der resultierende String enthält die Zeichen von FileName bis einschließlich des Doppelpunkts oder des umgekehrten Schrägstrichs, mit dem die Pfadinformationen vom Dateinamen und seiner Erweiterung abgetrennt werden. Sind in FileName keine Laufwerks- und Verzeichnisinformationen vorhanden, wird ein leerer String zurückgegeben.

Wenn du da nochmal einen Backslash anhängst, hast du zwei hintereinanderstehende Backslashes, und das wird wohl kaum im Sinne des Erfinders sein.

user profile iconTendl hat folgendes geschrieben Zum zitierten Posting springen:
Die meiste Zeit vergeht beim Schließen der MP4-Datei

Wo wird denn die MP4-Datei geschlossen? Wie sollte das Schließen der MP4-Datei aussehen?

Ich sehe hier nur ein Schließen der Form in MenuFileQuitClick, wobei ich den Zweck der Klammern nach Close nicht nachvollziehen kann.

Weiß du überhaupt, was du da programmierst, oder kopierst du blind irgendwelchen Fremdcode in deinen Code-Editor?

Zu guter Letzt möchte ich dir empfehlen, auf MemoryLeaks zu testen. Wie das geht, weißt du?
Tendl Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 117



BeitragVerfasst: Di 10.11.15 10:42 
Wie bereits geschrieben habe ich hier eine Demo möglichst unverändert übernommen.
das mit der Klammer werde ich gleich noch mal prüfen.

Moderiert von user profile iconNarses: Beiträge zusammengefasst

Wie gesagt der Code ist das beigelegte Beispiel. Trotzdem möchte ich eine Lanze für den Programmierer brechen.

1. Klammern haben noch nie geschadet. Gerade wenn man zwischen C und Delphi hin- und herspringt empfiehlt es sich geradezu davon eher üppigen Gebrauch zu machen. Ein Fehler ist dies in keinem Fall und den die 2 Byte Mehrverbrauch im Sourcecode spielen heute nun wirklich keine Rolle mehr.

2. 2 Blackshlashes in einer Textausgabe sind bestenfalls unschön aber nie ein Problem, wie gesagt es ist ein kostenloses Demo keine kommerzielle Vollversion

3. Das MP4 wird geschlossen wenn ich ein anderes MP4 öffne oder beim Verlassen des Programms.

Ich bin mit TurboPascal seit Version 2.0 unterwegs und nein der Code ist nicht von mir. Lesen hilft.

Die berechtigte Anmerkung war, wo überhaupt das MP4 geschlossen wird. Dies geschieht implizit in

ausblenden Delphi-Quelltext
1:
PasLibVlcPlayer.Play(OpenDialog.FileName);					


oder beim Verlassen des Programms.

Speicherfresser dürfen bei einem Öffnen des Programms, Laden eines MP4s und Schließen des Programms keine Rolle spielen.


Zuletzt bearbeitet von Tendl am Di 10.11.15 11:23, insgesamt 1-mal bearbeitet
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Di 10.11.15 11:47 
VLC ist prinzipiell immer sehr langsam, deswegen benutzte den ja auch lange keiner...

Jedenfalls, kann das sein dass das was mit dem FontCache zu tun hat? Keine Ahnung wie diese Lib das handhabt, aber der normale Player bleibt da ja gern mal ein paar Minuten stehen (allerdings am Dateianfang - woher weißt du, dass er beim Schließen der ersten hängt, nicht beim starten der zweiten?). Das würde auch irgendwie bei MP4 Sinn machen, denn da könnten prinzipiell Subtitles drin sein, für die er die Textausgabe laden würde.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Tendl Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 117



BeitragVerfasst: Di 10.11.15 12:37 
Dadurch das ich diese Verzögerung auch beim Verlassen des Programms bei laufenden MP4 sehe.
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Di 10.11.15 12:47 
Hm, das passt dann eher nicht. Bekommt man nicht die Logausgabe irgendwie?

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."