GStreamer Video auf Image oder Panel von Lazarus

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6972
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: GStreamer Video auf Image oder Panel von Lazarus

Beitrag von af0815 »

Mathias hat geschrieben: Di 7. Okt 2025, 15:29 Ist dies etwa Windows vorbehalten ?
Ja, weil das ist die Verbindung zu Direct Show und das ist nur für Windows. So wie V4L2src nur für Linux ist.

So wie es aussieht findet er die zusätzlichen Module unter Windows nicht. Bin beim Eingrenzen und suchen.

In der gnome_lib_const.inc habe ich folgendes geändert:

Code: Alles auswählen

  {$IFDEF Windows}
  libglib2 = 'glib-2.0-0.dll';
  libgobject2_0 = 'gobject-2.0-0.dll';
  libgio2 = 'gio-2.0-0.dll';
  libgmodule = 'gmodule-2.0-0.dll';
  {$ENDIF}
 
in der fp_gst folgendes:

Code: Alles auswählen

{$ifdef Windows}
libgstreamer =           'gstreamer-1.0-0.dll';
libgstpbutils =          'gstpbutils-1.0-0.dll';
libgstaudio =            'gstaudio-1.0-0.dll';
libgstbadaudio =         'gstbadaudio-1.0-0.dll';
libgstvideo =            'gstvideo-1.0-0.dll';
libgstbase =             'gstbase-1.0-0.dll';
libgstallocators =       'gstallocators-1.0-0.dll';
libgstanalytics =        'gstanalytics-1.0-0.dll';
libgstcheck =            'gstcheck-1.0-0.dll';
libgstphotography =      'gstphotography-1.0-0.dll';
libgstmse =              'gstmse-1.0-0.dll';
libgstinsertbin =        'gstinsertbin-1.0-0.dll';
libgstwebrtc =           'gstwebrtc-1.0-0.dll';
libgstwebrtcnice =       'gstwebrtcnice-1.0-0.dll';
libgstsdp =              'gstsdp-1.0-o.dll';
libgstmpegts =           'gstmpegts-1.0-0.dll';
libgsttag =              'gsttag-1.0-0.dll';
libgstfft =              'gstfft-1.0-0.dll';
libgstcodecparsers =     'gstcodecparsers-1.0-0.dll';
libgstcontroller =       'gstcontroller-1.0-0.dll';
libgstrtp =              'gstrtp-1.0-0.dll';
libgstrtsp =             'gstrtsp-1.0-0.dll';
libgstwayland =          'lstwayland-1.0-0.dll';
libgstva =               'gstva-1.0-0.dll';
libgstplayer =           'gstplayer-1.0-0.dll';
libgstgl =               'gstgl-1.0-.dll';
libgstvulkan =           'gstvulkan-1.0-0.dll';
libgstnet =              'gstnet-1.0-0.dll';
libgstcuda =             'gstcuda-1.0-0.dll';
libgstplay =             'gstplay-1.0-0.dll';
libgstapp =              'gstapp-1.0-0.dll';
libgstriff =             'gstriff-1.0-0.dll';
libgstbasecamerabinsrc = 'gstbasecamerabinsrc-1.0-0.dll';
libgsttranscoder =       'gsttranscoder-1.0-0.dll';
libgsturidownloader =    'gsturidownloader-1.0-0.dll';
libgstsctp =             'gstsctp-1.0-0.dll';
libgstopencv =           'gstopencv-1.0-0.gll';
libgstisoff =            'gstisoff-1.0-0.dll';

libges =                 'ges-1.0-0.dll';
{$endif}
Überall war das lib zuviel, das ist offensichtlich der Hauptunterschied zwischen Windows und Linux.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Mathias
Beiträge: 7056
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: GStreamer Video auf Image oder Panel von Lazarus

Beitrag von Mathias »

Überall war das lib zuviel, das ist offensichtlich der Hauptunterschied zwischen Windows und Linux.
Von dem habe ich leider auch schon gehört, das scheint es keinen standard zu geben. Generell kan man die DLLs auf 2 Varianten bauen.
Dies macht einem das ganze kompliziert. Diese Verhalten ist nicht nur bei GST der Fall.
Bei mir sieht es so aus:

Code: Alles auswählen

~/win64_dll$ ls -l *gst*.dll
-rwxr-xr-x 1 tux tux  120649 Okt  7 13:51 libgstadaptivedemux-1.0-0.dll
-rwxr-xr-x 1 tux tux   30191 Okt  7 13:51 libgstallocators-1.0-0.dll
-rwxr-xr-x 1 tux tux   50557 Okt  7 13:51 libgstanalytics-1.0-0.dll
-rwxr-xr-x 1 tux tux   94960 Okt  7 13:51 libgstapp-1.0-0.dll
-rwxr-xr-x 1 tux tux  632911 Okt  7 13:51 libgstaudio-1.0-0.dll
-rwxr-xr-x 1 tux tux  125857 Okt  7 13:51 libgstbadaudio-1.0-0.dll
-rwxr-xr-x 1 tux tux  568161 Okt  7 13:51 libgstbase-1.0-0.dll
....
Von wo hast du deine DLLs ?
Ich nehme an von der setup.exe von gstramer.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6972
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: GStreamer Video auf Image oder Panel von Lazarus

Beitrag von af0815 »

Mathias hat geschrieben: Di 7. Okt 2025, 17:07 Von wo hast du deine DLLs ?
Ich nehme an von der setup.exe von gstramer.
Ja und das Namensschema (mit prefix lib bei Linux) ist relativ konstant bei verschiedenen Projekten.

Edit:
Das ist auch noch davon abhängig welche Variante man instaliert !!! MSVC und MinGW sind da komplett unterschiedlich !!!!!

MSVC ohne lib prefix
MinGW Version mit lib prefix
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Mathias
Beiträge: 7056
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: GStreamer Video auf Image oder Panel von Lazarus

Beitrag von Mathias »

Es ist noch viel schlimmer, da gibt es. es gibt sogar 3 Varianten.
Ich habe in die sourcen von glib2 von Lazarus reigeguckt.
Es ist nicht nur das lib sondern es hat auch unterschiedliche 0,

Code: Alles auswählen

const
{$ifdef windows}
  {$define gtkwin}
  gliblib    = 'libglib-2.0-0.dll';
  gthreadlib = 'libgthread-2.0-0.dll';
  gmodulelib = 'libgmodule-2.0-0.dll';
  gobjectlib = 'libgobject-2.0-0.dll';
  {$IFDEF FPC}
    {$ifndef NO_SMART_LINK}
      {$smartlink on}
    {$endif}
  {$ENDIF}
{$else}
  {$ifdef UseCustomLibs}
  gliblib    = '';
  gthreadlib = '';
  gmodulelib = '';
  gobjectlib = '';
  {$else}
  gliblib    = 'libglib-2.0.so';
  gthreadlib = 'libgthread-2.0.so';
  gmodulelib = 'libgmodule-2.0.so';
  gobjectlib = 'libgobject-2.0.so';
  {$endif}
{$endif}  
MSVC ohne lib prefix
MinGW Version mit lib prefix
Ich bevorzuge immer MinGW.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6972
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: GStreamer Video auf Image oder Panel von Lazarus

Beitrag von af0815 »

Mit MinGW probiert (nur Runtime)
Es funktioniert mehr - das Full ist der GameChanger

-> Installation FULL (nicht typical)
-> Systemvariablen dort auch den Pluginpath richtig setzen
-> Benutzervariablen dort das bin und lib Verzeichnis mit den DLL aufnehmen

Jetzt werden die dshowvideosrc und playbin gefunden. Nur wird noch nichts angezeigt, aber das dürfte mit Parametern in den Griff zu bringen sein.

Edit: Geil, es geht mit den richtigen Parametern (genaugenommen den wenigsten).
Screenshot 2025-10-07 192941.png
Screenshot 2025-10-07 192941.png (323.44 KiB) 182 mal betrachtet

Code: Alles auswählen

  pipeline := gst_parse_launch('playbin uri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm',@GError);
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Mathias
Beiträge: 7056
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: GStreamer Video auf Image oder Panel von Lazarus

Beitrag von Mathias »

gstreamer ist sehr schwer zu verstehen und braucht sehr viel Einarbeitungszeit. Aber wen man es mal versteht, wird man mit einem sehr mächtigen Tool belohnt.
Meine Erfahrung hat gezeigt mit nativen GTK4 arbeitet es gut zusammen, aber mit der LCL habe ich bis jetzt nichts schlaues hingekriegt.
Nur schon ein einfacher Music-Player mit Trackbar hatte schon recht mit der LCL zu kämpfen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6972
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: GStreamer Video auf Image oder Panel von Lazarus

Beitrag von af0815 »

Mathias hat geschrieben: Di 7. Okt 2025, 19:52 gstreamer ist sehr schwer zu verstehen und braucht sehr viel Einarbeitungszeit. Aber wen man es mal versteht, wird man mit einem sehr mächtigen Tool belohnt.
Meine Erfahrung hat gezeigt mit nativen GTK4 arbeitet es gut zusammen, aber mit der LCL habe ich bis jetzt nichts schlaues hingekriegt.
Nur schon ein einfacher Music-Player mit Trackbar hatte schon recht mit der LCL zu kämpfen.
Ich hatte bereits das Vergnügen mich mit GStreamer herumzuschlagen :D Bin dann auf V4L (Linux) und Direct Show (Windows) ausgewichen. Nur ging es damals um viel komplexere Sachen mit professionellen Kameras. Auch wie man umkodiert etc. ist mir nicht so fremd.

Nachdem ich gesehen habe das im fpc jetzt die Header teilweise drinnen sind, habe ich mir gedacht das ich mich wieder damit beschäftige. Nur war das im fpc genaugenommen zu wenig, da hatte ich selbst fast schon mehr übersetzt. (Allerdings für dynamische Bindung)

Nur mit deinen Headern macht das ganze echt Spaß, weil die komplett zu sein scheinen. Hut ab, das ist nicht ohne. Deswegen auch die Versuche gleich auch mit Windows, weil ich will sowieso Plattformübergreifend sein. Ohne mein Vorwissen, hätte ich nicht so schnell die Ergebnisse gehabt, vor allen habe ich bei V4L und DS bereits sehr viel Lehrgeld gezahlt. GStreamer und Direct Show (DS) sind gar nicht so unterschiedlich. Wenn du DS (großteils) kapiert hast, ist das Konzept von GStreamer nicht fremd. DS ist halt bei Windows End Of Live und wird zwar gepflegt aber nicht mehr so supported. Die UWP Apps haben da einiges unter Windows geändert.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Mathias
Beiträge: 7056
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: GStreamer Video auf Image oder Panel von Lazarus

Beitrag von Mathias »

Nur mit deinen Headern macht das ganze echt Spaß, weil die komplett zu sein scheinen. Hut ab, das ist nicht ohne.
Mein Ziel ist es momentan möglichst viele Header zu übersetzten.
Die Bindungen, welche bei Lazaurs dabei sind, sind die meisten zwischen 10 und 15 Jahre alt. Somit fehlen sehr viele Funkionen, Ganz extrem ist es bei gtk2, da wurde die Bindung um 1997 gemacht, obwohl es das Herzstück von Lazarus ist. Oder Cairo von 2005.
Auch sonst gib es viele neue coole Sachen, die ganz fehlen. ZB. das aktuelle GTK4.
GST wurde erst kürzlich hinzugefügt, da wurde nur das Basispaket übersetzt und sogar bei dem fehlen wichtige Sachen, es fehlen wichtige glib typische Makros wie GST_BIN.
Gut ein Wermutstropfen habe die neuen Sachen, das meiste kann man kaum in die LCL integrieren. Dafür kann man viele C-Beispiele fast 1:1 übernehmen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten