Entwickler-Ecke
Multimedia / Grafik - Wechseln zwischen MP4s dauert >25sec
Tendl - Mo 09.11.15 12:20
Titel: Wechseln zwischen MP4s dauert >25sec
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.
Tendl - Mo 09.11.15 14:54
Hallo SMO,
vielen Dank für den Tip. Ich werde das demnächst ausprobieren.
Gruß Thomas
Tendl - 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!
Delete - Mo 09.11.15 17:42
Tendl hat folgendes geschrieben : |
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 - Mo 09.11.15 18:37
Die meiste Zeit vergeht beim Schließen der MP4-Datei
Der Code ist unverändert aus der DEMO:
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 public 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. |
Delete - Mo 09.11.15 19:49
Also da seh ich schonmal einen Fehler bzw. unnötige Klammern in
MenuFileOpenClick:
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 [
http://docwiki.embarcadero.com/Libraries/XE5/de/System.SysUtils.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.
Tendl hat folgendes geschrieben : |
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 - 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 Narses: Beiträge zusammengefasstWie 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
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.
Martok - 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.
Tendl - Di 10.11.15 12:37
Dadurch das ich diese Verzögerung auch beim Verlassen des Programms bei laufenden MP4 sehe.
Martok - Di 10.11.15 12:47
Hm, das passt dann eher nicht. Bekommt man nicht die Logausgabe irgendwie?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!