![]() |
LibVLC - VLC in Delphi nutzen
![]() Im Repository gibts ein Beispiel für einen ganz einfachen Video-Player auf VLC-Basis. Um das Beispiel (und eigene Programme) zum Laufen zu bringen, muss man sich nur doch die Datei libvlc.dll, libvlccore.dll sowie die Ordner plugins und locale von einer VLC-Installation oder aus dem VLC-Zip neben die .exe kopieren. Für weitergehende Studien empfiehlt es sich, sich die Sourcen des VLC herunter zu laden und sich die Kommentare in den Header-Dateien unter "include/vlc/*.h" an zu sehen. Viel Spass. :) //edit: Falls jemand Probleme mit der Unit hat, packe er einfach eine Demo in den Anhang seiner Antwort in diesem Thread. (Was für ein Satz :)) @mkinzler: Bitte ... gern geschehen. |
Re: LibVLC - VLC in Delphi nutzen
Danke Benjamin :thumb:
|
Re: LibVLC - VLC in Delphi nutzen
Grandios. Ich habe mich gerade 5 Minuten lang beim Anblick des Titels gefragt, warum zum Henker man für die VCL eine eigene Lib benötigt... :roll:
|
Re: LibVLC - VLC in Delphi nutzen
Eine schöne Sache!
Aber: Wie funktioniert die Positionsanzeige? Die Ausgabe bleibt bei Null stehen.
Delphi-Quellcode:
procedure TForm5.Timer1Timer(Sender: TObject);
begin if FLib.libvlc_media_player_is_playing(FPlayer, @FException) <> 0 then BEGIN tb_pos.position:= Round(FLib.libvlc_media_player_get_position(FPlayer, @FException)); lb_pos1.caption:=IntToStr(Round(FLib.libvlc_media_player_get_position(FPlayer, @FException))); END; end; |
Re: LibVLC - VLC in Delphi nutzen
Ohne, dass ich mir das Teil angeschaut habe: kann man darüber auch eigene Streams abspielen?
|
Re: LibVLC - VLC in Delphi nutzen
@hathor: Keine Ahnung warum die Position null bleibt. Über die Zeit (get_length, get_time, set_time) gehts. Ich hab das Beispiel im Repository mal angepasst.
@Dominik: Was meinst du mit Streams? TMemoryStream ... nein, das geht imho nicht. Aber alles was ein VLC-Player kann(Audio-/Videostreams aus dem Inet abspielen oder auch selbst erzeugen), kann man auch mit der LibVLC machen. |
Re: LibVLC - VLC in Delphi nutzen
Internetstreams sollten aber gehen
|
Re: LibVLC - VLC in Delphi nutzen
Die Lib geht auch unter Lazarus, nach einigen kleineren Anpassungen. Nur ich kann im Moment noch nicht das Video zu einem Panel zuordnen:
Delphi-Quellcode:
Bei XINE ging das so wie es in der ersten Zeile steht. Verwende ich nun @ oder Pointer(w) geht es nicht.
w:=GDK_WINDOW_XWINDOW(PGtkWidget(PtrUInt(Form1.Handle))^.window);;
FLib.libvlc_media_player_set_hwnd(FPlayer, @w, @FException); Dann kommt folgende Meldung: Zitat:
Edit01: VLC ist anscheint so schlau es dann in einem Externen Fenster da zustellen, was jedoch nicht beendet werden kann. Edit02: Auch wenn ich libvlc_media_player_set_xwindow verwende gibt es den Fehler. |
Re: LibVLC - VLC in Delphi nutzen
An die FreePascaler hab ich wieder nicht gedacht. Hab jetzt ein $Mode Delphi vorn angestellt. Und es funktioniert sogar. :)
Was deine anderen Probleme angeht: keine Ahnung was da schief läuft. Ich hab gerade mal schnell eine One-Panel-Test-App unter Lazarus zusammengeklickt .... es funktioniert. |
Re: LibVLC - VLC in Delphi nutzen
Verwendest du das unter Windows ? Unter Linux kann ich es keinem Panel zuordnen. Nur in einem Externen Fenster. Das VLC-Control(oder wie das hieß) lief, nach einigen Anpassungen. Ich habe auch noch eine ältere Version. Weil ich Debian verwende.
Das Problem ist: Die XID ist immer 0. In einem anderen Projekt kann ich sie so erzeugen. Wenn ich die HWND Methode verwende geht es auch nicht unter Linux. Ach ja: Für Linux muss die Unit angepasst werden. Z.B. die Unit Windows muss rauß. |
Re: LibVLC - VLC in Delphi nutzen
Ja, ich habs nur unter Windows probiert. Unter Linux sollte libvlc_media_player_set_xwindow das Mittel der Wahl sein ... eigentlich ;)
|
AW: LibVLC - VLC in Delphi nutzen
Liste der Anhänge anzeigen (Anzahl: 1)
hi,
das sieht alles sehr nett aus... nur leider krieg ich dein bsp-programm nochnichmal zum laufen... habe mir dann die neuste vlc versien geholt und alles so kopiert, wie beschrieben hast du einen rat?? ps: fehlermeldung siehe anhang |
AW: LibVLC - VLC in Delphi nutzen
|
AW: LibVLC - VLC in Delphi nutzen
danke für die schnelle antwort!
ach, und is das normal, dass es beim abspielen ruckelt...hmmm hat jemand noch einen tipp, wie ich eine url abspielen kann, ohne dass die datei vorher vollständig geladen wird?? also der vlc player kann den stream auch gleich wiedergeben... wie kann ich das einbinden ...immer dankbar für jede hilfe |
AW: LibVLC - VLC in Delphi nutzen
Zitat:
Zur direkten Streamwiedergabe kann ich nichts sagen.:? |
AW: LibVLC - VLC in Delphi nutzen
Danke für die Rückmeldung. Ich habs jetzt angepasst, so das es mit der Version 1.1.0 läuft (und leider nur mit dieser, da sich die interne Struktur der libvlc.dll sehr geändert hat ... arrrgh)
|
AW: LibVLC - VLC in Delphi nutzen
Zitat:
ich weiß nicht was die Lib kann. Aber eventuell als Netzwerkadresse öffnen? MfG Fabian |
AW: LibVLC - VLC in Delphi nutzen
hallo Chaosben und andere,
ich wird gern sowas wie einen videofilter schreiben, weiß aber nicht, wie ich an die daten aus dem buffer komme... vmem ist da wohl das stichwort. hab ![]() kann jemand helfen? - das wäre echt nett. danke, kaka |
AW: LibVLC - VLC in Delphi nutzen
Ganz ehrlich? Ich hab keine Ahnung.
Was soll den vmem sein? |
AW: LibVLC - VLC in Delphi nutzen
Video Memory vielleicht? :gruebel:
|
AW: LibVLC - VLC in Delphi nutzen
ja, ich denke auch sowas inn der art.
hab das hier noch gefunden: ![]() das in delphi übersetzt würde mir "schon" reichen :wink:... kaka |
AW: LibVLC - VLC in Delphi nutzen
@kaka77
Hallo, hast du inzwischen eine Lösung gefunden? Wollte auch Datan aus einem TStream, über Pipes geht es zwar, finde es jedoch bissl eigenartig einen Pipe von meinem Prog zu meinem Prog zusenden. Der Player kann dann die Daten über die Adresse stream://\\.\pipe\pipename aufrufen und abspielen. Eine andere Lösung wäre mir jedoch lieber, wobei vmem bzw imem bei vlc wohl nicht so ausgereift sich und sich von Version zu Version ändern. Edit: nutze jedoch eine ![]() |
AW: LibVLC - VLC in Delphi nutzen
Herzlichen Dank!
Könnte mir jmd von euch sagen, wie ich ein Mouseover-Event triggere? Würde die Trackbar gern verstecken und nur bei Mausbewegungen und Tastaturanschlägen wieder anzeigen, Events des Panels funktionieren aber (wohl dank ActiveX) nicht und FLib scheint keine Events vorzusehen... Danke euch!!! |
AW: LibVLC - VLC in Delphi nutzen
Hallo , der Beitrag ist zwar schon etwas älter, aber ich suche hierfür immer noch eine Lösung.
Ich habe Delphi 7.0 und würde gerne folgendes machen : * Ansicht eines Videos (wmv ). Delphi Media Player tuts leider nicht. * Möglichkeit auf gewisse Position des Videos zu springen. Weshalb. Ich brauche eine Kontrollmöglichkeit für einen Video-Abschnitt. Ich habe die Zeit vom Start und würde das video von dort anschauen. Also im Prinip habe ich eine Reihe von Mess-zeiten und genau nur dort will ich jeweils die Sequenz sehen. Hierzu hätte ich gerne VLC genommen ( aus Delphi heraus ) aber das Beispiel tut bei mir leider nicht. Ich habe momentan VLC version 2.0.4 -- aber ob dies das Problem ist ? Auf jeden FAll wird nichts angezeigt ! Eventuell wäre eine Gesamt lauffähiges ZIP Paket hilfreich um dann zu testen ob es überhaupt sinnvoll ist diesen Weg zu verfolgen. |
AW: LibVLC - VLC in Delphi nutzen
Liste der Anhänge anzeigen (Anzahl: 3)
Neue Version 2.2.0 vom 2015-02-28
![]() Natürlich braucht man auch die aktuellen DLLs von hier: ![]() Im Anhang ist eine vereinfachte Demo zum Testen, ob man die richtigen DLLs hat - Source und EXE. |
AW: LibVLC - VLC in Delphi nutzen
Mit folgendem Code kann man feststellen, ob man die richtige Version von VLC installiert hat:
Delphi-Quellcode:
function VLC_GetLibPath: String;
var Handle:HKEY; RegType:integer; DataSize :integer; str1, str2, str3 : String; begin Result := ''; if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,'Software\Wow6432Node\VideoLAN\VLC',0,KEY_READ,Handle)= ERROR_SUCCESS) then begin if RegQueryValueEx(Handle,'InstallDir',nil,@RegType,nil,@DataSize)=ERROR_SUCCESS then begin SetLength(Result,Datasize div 2); RegQueryValueEx(Handle,'InstallDir',nil,@RegType,PByte(@Result[1]),@DataSize); Result[DataSize div 2]:='\'; str1:= Result; end; if RegQueryValueEx(Handle,'Version',nil,@RegType,nil,@DataSize)=ERROR_SUCCESS then begin SetLength(Result,Datasize div 2); RegQueryValueEx(Handle,'Version',nil,@RegType,PByte(@Result[1]),@DataSize); Result[DataSize div 2]:=' '; // :='SPACE'; str2:= Result; end; str3:= 'InstallDir: '+ str1 + ' - Version: '+ str2; Result:= str3; RegCloseKey(Handle); end; end; |
AW: LibVLC - VLC in Delphi nutzen
Liste der Anhänge anzeigen (Anzahl: 1)
WIN8.1, XE7 32Bit.
Zur 64Bit-Version von VLC kann ich z.Zt. nichts schreiben - habe nur 32Bit-Version installiert. Fehler in der 32Bit-Version von VLC 2.2.0: Bei der Lautstärke-Änderung der DELPHI-Demo tritt ein Fehler mit Programmabbruch auf: System.EInvalidOp = Ungültige Gleitkomma-Operation Ursache: libdirectsound_plugin.dll im Verzeichnis: C:\Program Files (x86)\VideoLAN\VLC\plugins\audio_output Ersatz: im Anhang. TAG: libvlc_audio_set_volume crashes libvlccore 2.2.0 ERROR 207 Ungültige Gleitkommaoperation System.EInvalidOp |
AW: LibVLC - VLC in Delphi nutzen
Für die float error message beim Aufruf des libvlc_audio_set_volume Befehls kann man auch ohne Änderung am VLC umgehen.
Einfach folgenen Code einfügen.
Code:
Muß nur einmalig aufgerufen werden.
//float crash when change Volume during playback since Version 2.1.x, crash ist only in direct audio
//Set workaound for this SetExceptionMask([exInvalidOp, exDenormalized, exZeroDivide, exOverflow, exUnderflow, exPrecision]); //<= default c runtime fpu exception handling Danach läßt sich die Volume mittels libvlc_audio_set_volume auch bei VLC-Versionen ab 2.1.0 wieder problemlos ändern. Man braucht keine dll mehr zu tauschen. mfg Wonderdoc |
AW: LibVLC - VLC in Delphi nutzen
Danke für diesen Tipp!
Auch die Version 2.2.1 Terry Pratchett (Weatherwax) vom 13.04.2015 von hier: ![]() hat diesen Fehler, deshalb ist die Lösung "zukunftsfähig".:-D Man braucht die Unit Math.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin SetExceptionMask(exAllArithmeticExceptions); ... |
AW: LibVLC - VLC in Delphi nutzen
Zitat:
Uli:thumb: |
AW: LibVLC - VLC in Delphi nutzen
Hallo Benjamin,
ich benutze Tokyo 10.2.Starter und habe ein Projekt zu entwickeln, bei dem mehrere Videos gleichzeitig gezeigt werden müssen. Ich habe eine Lösung mit dem TMediaPlayer, sie ist aber unbefriedigend , weil die Codecs so knapp sind, dass die meisten neueren Formate nicht gezeigt werden. Vom VLC Player weiß ich, dass er die verlangten Formate abspielt. Leider ist der Link auf Dein Beispiel nicht mehr gültig, genau das hätte ich aber gerne im Quelltext der Unit. Darum meine Bitte, dass Du mir diesen zugänglich machst. danke im Voraus GbDelphi |
AW: LibVLC - VLC in Delphi nutzen
Diese Unit funktioniert tadellos:
![]() (ein wenig hinunterscrollen, um den Download-Link zu finden.) |
AW: LibVLC - VLC in Delphi nutzen
Hallo zusammen,
Ist mir ein wenig peinlich aber: In XE2 habe ich dies am laufen. Nun habe ich mir die neueste Version von PasLibVlc ![]() - compiler.inc - PasLibVlcClassUnit.pas - PasLibVlcUnit.pas Was muss ich tun? Ein neues Package anlegen? Und dann? Irgendwie gibt es gefühlt 1000 Wege um in Delphi Komponenten zu installieren. Danke Euch |
AW: LibVLC - VLC in Delphi nutzen
Ich gebe die Antwort gleich selber: Einfach Komponente installieren - die Units angeben - in vorhandenes oder neues Package -fertig. Sorry.
Andere Frage falls jemand die Lib benutzt: Wenn ich die Library (BPL) mit 64 Bit compilieren möchte kommt die Fehlermeldung wegen fehlender Designide. Vermutlich kann ich auch mit dem 64Bit Delphi Programm den 32Bit VLC benutzen? Aber wenn ich mit dem 64Bit Delphi den 64Bit VLC benutzen möchte? Vielleicht hat da schon jemand Erfahrung? Ansonsten probiere ich irgendwann einfach alle Varianten aus. |
AW: LibVLC - VLC in Delphi nutzen
Einfach in der Projektstruktur der Packagedatei mit rechter Maustaste
Project\Build (das ist optionnal) und danach ein Project\Install In den Units ist ein Register, welches die Komponenten entsprechend installiert
Delphi-Quellcode:
procedure Register;
begin RegisterComponents('PasLibVlc', [TPasLibVlcPlayer, TPasLibVlcMediaList]); end; Was noch feht ist unter Options\Tools\Sprache\Delphi Optionen\Library}Library Pfad die entsprechenden Pfade in dem "Library" Pfad bekanntmachen. (Ich habe hier RadStudio auf English eingestellt, die deutschen Bezeichnungen könnten abweichen) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:16 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