![]() |
libvlc_media_player_set_position startet Datei neu
Moin Zusammen,
da der TMediaPlayer mit langen Dateipfaden nicht umgehen kann, habe ich nach einer anderen Lösung gesucht. (das Setzen von LongPathsEnabled in der Registry hat auch nicht geholfen). Hier im Forum bin ich dann auf ![]() gestossen, bekomme es aber nicht zum Laufen. Da mir die Nutzung von VLC aber als sinnvoll erschien, habe ich noch nach weiteren Möglichkeiten gesucht und habe das hier gefunden: ![]() Nachdem ich herausbekommen hatte, dass man nicht nur den Pfad auf die beiden DLLs benötigt, sondern auf eine volle Installation, hat das bei mir soweit auch funktioniert, nur eines bekomme ich nicht hin. Die Funktion libvlc_media_player_set_position startet die laufende Datei von Vorne. Importiert habe ich sie wie folgt
Delphi-Quellcode:
und der Aufruf sieht so aus:
libvlc_media_player_set_position : function(p_media_player : Plibvlc_media_player_t;f_pos : double;b_fast : integer) : integer; cdecl;
Delphi-Quellcode:
Mit boolean für den letzten Parameter und wechselnden Werten für diesen Parameter ändert sich nichts. iError ergibt immer 0 (kein Fehler), aber die Datei wird immer neu abgespielt.
iError := libvlc_media_player_set_position(vlcMediaPlayer,0.5,1);
Es spielt auch keine Rolle, welcher Dateityp es ist (mp3,wav,mpg,flv,wmv) Wenn ich danach suche, finde ich nichts passendes. Ausprobiert habe ich VLC (32-Bit) 2.2.5.1 / 3.0.2 / 3.0.20 Kennt jemand dieses Problem? |
AW: libvlc_media_player_set_position startet Datei neu
Zitat:
Im Manifest vom Delphi fehlt es aber.
XML-Code:
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings"> <ws2:longPathAware>true</ws2:longPathAware> </windowsSettings> </application> ![]() Es wäre auch grob fahrlässig, wenn das einfach so bei Programmen aktiviert würde, welche mit statischen Buffern (MAX_PATH) arbeiten und die Länge der Pfade nicht prüfen. (Buffer-Overflow) UNC-Pfade helfen auch nicht? |
AW: libvlc_media_player_set_position startet Datei neu
Moin himitsu,
danke für den Tip. Den Abschnitt mit der Manifestdatei hatte ich übersehen :oops: Leider hat das auch nicht geholfen. Der Abschnitt hier: ![]() den Du auch gepostet hast führt bei mir zu einer ungültigen Manifest-Datei. Hiermit ![]() konnte die Anwendung dann auch starten.
Code:
Allerdings hat das auch nicht geholfen.
<asmv3:application>
<asmv3:windowsSettings xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings"> <ws2:longPathAware>true</ws2:longPathAware> </asmv3:windowsSettings> </asmv3:application> Ich vermute mal, dass die Basis des TMediaPlayers (MCI) einfach langen Pfaden gegenüber resistent ist :-D MCI ist ja auch nicht wirklich aktuell. Die Lösung ist allerdings viel einfacher, wie ich inzwischen rausfinden konnte: Man muss nur den Pfad mit GetShortPathName in einen kurzen Pfad umwandeln. Dann tut es auch der TMediaPlayer. Dennoch wäre ich daran interessiert warum libvlc_media_player_set_position nicht das tut, was es soll, bzw. ob auch andere das Problem haben. |
AW: libvlc_media_player_set_position startet Datei neu
Moin Zusammen,
wieso libvlc_media_player_set_position nicht das tut, was man gemäss Doku erwarten könnte habe ich zwar nicht ermitteln können, aber um in der Datei zu navigieren kann man libvlc_media_player_get_length libvlc_media_player_get_time libvlc_media_player_set_time benutzen, falls noch andere an dieser Funktionalität interessiert sind. Eine funktionierende Beispielanwendung kommt noch. |
AW: libvlc_media_player_set_position startet Datei neu
Liste der Anhänge anzeigen (Anzahl: 1)
Moin Zusammen,
anbei die Beispielanwendung, allerdings erstellt mit Lazarus, da es, für meinen Geschmack, einfacher ist das Ganze dann auch auf einen Mac zu übertragen. Das Programm besteht aber auch nur aus wenigen Bestandteilen. Zwei TPanel (pnlControl Alignment Bottom, pnlDisplay Alignment Client) Drei TButton (btnStart, btnPause, btnStop) Eine TTrackBar (tbMain Anchors Top/Left/Right) Button und Trackbar kommen auf das pnlControl. Die Basis für die uncslibvlc.pas stammt von ![]() Die Informationen für weitere Funktionen usw. stammen aus ![]() Wichtig: Bei einigen Punkten wird als als Voraussetzung Version 4.0.0 angegeben. Da VLC derzeit aber nur bis 3.0.20 als Release zur Verfügung steht können die noch nicht verwendet werden. Man könnte nur ein Nightly Build von 4.0 ausprobieren. |
AW: libvlc_media_player_set_position startet Datei neu
Moin - da ich mich gerade selber mit API-Imports rumschlage, fiel mir das ins Auge:
Zitat:
![]() Das wird ziemlich sicher die Ursache sein, weil die Argumente bei cdecl in umgekehrter Reihenfolge auf dem Stack liegen und damit dein b_fast zu groß ist und beim Aufruf damit zT an der Stelle steht, wo f_pos erwartet wird. |
AW: libvlc_media_player_set_position startet Datei neu
Moin msohn,
danke für den Tip. Ich hatte es inzwischen schon auf boolean geändert gehabt. Mit ByteBool und auch Byte (um ganz sicher zu gehen) bleibt das Verhalten aber leider bestehen. Wenn der Parameter durch seine Länge die anderen Parameter in Mitleidenschaft gezogen hätte, hätte allerdings auch der Aufruf fehlschlagen müssen, da dann ja der erste Parameter ungültig gewesen wäre, mit dem ja auf die Mediaplayerinstanz referenziert wird. Ich bekomme aber auch immer nur 0 zurück, also "Aufruf erfolgreich". Leider kann ich es auf dem Mac nicht testen, da hier schon libvlc_new fehlschlägt, also nur nil zurückliefert und das mit den empfohlenen Parameter 0 und nil. Ich muss mal schauen, was libvlc_errmsg zurückliefert. |
AW: libvlc_media_player_set_position startet Datei neu
Moin Zusammen,
das Rätsel um das Verhalten von libvlc_media_player_set_position konnte ich lösen. Nachdem ich mir mühsam eine C++ Variante für das Testprogramm erstellt hatte, musste ich feststellen, dass die Funktion da lief wie dokumentiert. Ursache war der zweite Parameter der im Original als float deklariert ist, was ich, fälschlicher Weise, als double definiert hatte. Wenn man den auf single ändert funktioniert es :oops: Die aktuelle Variante hat übrigens nur zwei Parameter, der dritte ist erst für Version 4.0.0 des VLC vorgesehen und auch die hat erst einen Rückgabewert. Aktuell ist es eine Prozedur. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:53 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