Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   LibVLC - VLC in Delphi nutzen (https://www.delphipraxis.net/150992-libvlc-vlc-delphi-nutzen.html)

chaosben 2. Mai 2010 17:42


LibVLC - VLC in Delphi nutzen
 
Hier (SVN) gibts ein aktuelles (VLC 1.0.5) Delphi-Binding für die VLC-Bibliothek LibVLC.dll. Außer den mediacontrol_* Funktionen, ist alles (hoffentlich zukunftstauglich) implementiert.
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.

mkinzler 2. Mai 2010 17:46

Re: LibVLC - VLC in Delphi nutzen
 
Danke Benjamin :thumb:

SubData 2. Mai 2010 19:23

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:

hathor 4. Mai 2010 12:12

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;

dominikkv 4. Mai 2010 12:24

Re: LibVLC - VLC in Delphi nutzen
 
Ohne, dass ich mir das Teil angeschaut habe: kann man darüber auch eigene Streams abspielen?

chaosben 4. Mai 2010 13:28

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.

mkinzler 4. Mai 2010 13:47

Re: LibVLC - VLC in Delphi nutzen
 
Internetstreams sollten aber gehen

mimi 4. Mai 2010 14:35

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:
w:=GDK_WINDOW_XWINDOW(PGtkWidget(PtrUInt(Form1.Handle))^.window);;
  FLib.libvlc_media_player_set_hwnd(FPlayer, @w, @FException);
Bei XINE ging das so wie es in der ersten Zeile steht. Verwende ich nun @ oder Pointer(w) geht es nicht.
Dann kommt folgende Meldung:
Zitat:

(project1:19077): Gdk-WARNING **: /build/buildd-gtk+2.0_2.12.12-1~lenny2-i386-2RfKoO/gtk+2.0-2.12.12/gdk/x11/gdkdrawable-x11.c:878 drawable is not a pixmap or window
Selbst wenn ich ein Panel nehme, es spielt anscheint keine rolle.

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.

chaosben 4. Mai 2010 19:28

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.

mimi 5. Mai 2010 15:43

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

chaosben 5. Mai 2010 21:03

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 ;)

kaka77 24. Jun 2010 09:27

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

mleyen 24. Jun 2010 09:35

AW: LibVLC - VLC in Delphi nutzen
 
Hi,
versuchs mal mit der alten Version 1.0.5.
Diese hat bei mir funktioniert und auf die schnelle wurde die lib noch nicht auf die neue Version angepasst.

kaka77 24. Jun 2010 09:56

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

mleyen 24. Jun 2010 10:01

AW: LibVLC - VLC in Delphi nutzen
 
Zitat:

Zitat von kaka77 (Beitrag 1031240)
ach, und is das normal, dass es beim abspielen ruckelt...hmmm

Das kommt imho voll und ganz auf den benutzten PC bzw. die Streaminggeschwindigkeit an und hat nix mit der lib zu tun.

Zur direkten Streamwiedergabe kann ich nichts sagen.:?

chaosben 24. Jun 2010 11:26

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)

xZise 26. Jun 2010 10:34

AW: LibVLC - VLC in Delphi nutzen
 
Zitat:

Zitat von kaka77 (Beitrag 1031240)
[...]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[...]

Moin,
ich weiß nicht was die Lib kann. Aber eventuell als Netzwerkadresse öffnen?

MfG
Fabian

kaka77 27. Apr 2011 16:49

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 http://wiki.videolan.org/LibVLC_SampleCode_SDL für c++ gefunden. wie kann ich das mit delphi und der libvlc machen??

kann jemand helfen? - das wäre echt nett.


danke, kaka

chaosben 28. Apr 2011 10:02

AW: LibVLC - VLC in Delphi nutzen
 
Ganz ehrlich? Ich hab keine Ahnung.
Was soll den vmem sein?

DeddyH 28. Apr 2011 10:07

AW: LibVLC - VLC in Delphi nutzen
 
Video Memory vielleicht? :gruebel:

kaka77 28. Apr 2011 10:17

AW: LibVLC - VLC in Delphi nutzen
 
ja, ich denke auch sowas inn der art.


hab das hier noch gefunden:
http://gitorious.org/vmem-example/vm...MainWindow.cpp
das in delphi übersetzt würde mir "schon" reichen :wink:...

kaka

perpe 31. Mai 2011 00:21

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 paslibvlc um libvlc einzubinden und nicht die hier vorgestellte Komponente

daheld 2. Sep 2011 18:04

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

rolwa 25. Mär 2013 14:33

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.

hathor 1. Mär 2015 09:01

AW: LibVLC - VLC in Delphi nutzen
 
Liste der Anhänge anzeigen (Anzahl: 3)
Neue Version 2.2.0 vom 2015-02-28

http://prog.olsztyn.pl/paslibvlc/

Natürlich braucht man auch die aktuellen DLLs von hier:
https://get.videolan.org/vlc/2.2.0/w....2.0-win32.exe

Im Anhang ist eine vereinfachte Demo zum Testen, ob man die richtigen
DLLs hat - Source und EXE.

hathor 1. Mär 2015 20:05

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;

hathor 5. Mär 2015 06:58

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

Wonderdoc 8. Apr 2015 07:18

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:
  //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
Muß nur einmalig aufgerufen werden.
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

hathor 16. Apr 2015 07:14

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: http://www.filehorse.com/download-vlc-32/download/
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);
...

johnmuller 30. Mär 2016 09:07

AW: LibVLC - VLC in Delphi nutzen
 
Zitat:

Zitat von hathor (Beitrag 1291900)
Neue Version 2.2.0 vom 2015-02-28

http://prog.olsztyn.pl/paslibvlc/

Natürlich braucht man auch die aktuellen DLLs von hier:
https://get.videolan.org/vlc/2.2.0/w....2.0-win32.exe

Im Anhang ist eine vereinfachte Demo zum Testen, ob man die richtigen
DLLs hat - Source und EXE.

Vielen Dank, hat mir sehr geholfen.

Uli:thumb:

GbDelphi 19. Apr 2018 14:08

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

Daniel 19. Apr 2018 15:34

AW: LibVLC - VLC in Delphi nutzen
 
Diese Unit funktioniert tadellos:
https://prog.olsztyn.pl/paslibvlc/

(ein wenig hinunterscrollen, um den Download-Link zu finden.)

taveuni 2. Okt 2019 07:36

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 https://prog.olsztyn.pl/paslibvlc/ heruntergeladen. Leider weiss ich nicht (mehr) wie ich den Player als Komponente in Rio 10.3.2 installieren kann? Es sind die Dateien:
- 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

taveuni 2. Okt 2019 09:03

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.

Rollo62 2. Okt 2019 09:07

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 19:20 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