Audio-Schnittstelle gesucht. ( gstreamer )

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
wennerer
Beiträge: 609
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: Audio-Schnittstelle gesucht. ( gstreamer )

Beitrag von wennerer »

Guten Morgen Mathias,
kannst du mir erklären wie ich die Datei gst einbinden muss damit ich deine Beispiele probieren kann? Ich hab die zwar in meinem Lazarus unter ....ccr/pas2js-rtl/compiler/packages/gstreamer gefunden. Da ist dann auch eine Makefile. Mir fehlt da einfach das Wissen um weiter zu kommen.

Viele Grüße
Bernd

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

Re: Audio-Schnittstelle gesucht. ( gstreamer )

Beitrag von Mathias »

kannst du mir erklären wie ich die Datei gst einbinden muss damit ich deine Beispiele probieren kann?
Lazarus-Seitig eigentlich nur "uses gst".

Versuche mal dies auszuführen. Läuft (momentan) nur unter Linux.
Läuft dies, oder kommt da ein Fehler ?

Code: Alles auswählen

program project1;

const
  {$ifdef Linux}
  gstreamerlib = 'libgstreamer-1.0';
  {$endif}
  {$ifdef Windows}
  gstreamerlib = 'gstreamer-1.0-0.dll';
  {$endif}

  GST_STATE_PLAYING = 4;

  procedure gst_init(argc: Plongint; argv: PPPAnsiChar); cdecl; external gstreamerlib;
  function gst_parse_launch(pipeline_description: PChar; error: Pointer): Pointer; cdecl; external gstreamerlib;
  function gst_element_set_state(element: Pointer; state: longint): Integer; cdecl; external gstreamerlib;
  procedure gst_object_unref(object_: pointer); cdecl; external gstreamerlib;

var
  pipeline: Pointer;
begin
  gst_init(@argc, @argv);

  pipeline := gst_parse_launch('playbin uri=file:/home/tux/Schreibtisch/sound/test.mp3 ! volume', nil);
  gst_element_set_state(pipeline, GST_STATE_PLAYING);

  ReadLn;

  gst_object_unref(pipeline);
end.
....ccr/pas2js-rtl/compiler/packages/gstreamer
Da hast du gerade etwas interessantes entdeckt. Die ist ein Pfad für Webbroser Apps.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wennerer
Beiträge: 609
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: Audio-Schnittstelle gesucht. ( gstreamer )

Beitrag von wennerer »

Hallo,
wenn ich das teste kommt:
project1.lpr(29,1) Error: Error while linking
Und in den Beispielen von dir findet er bei mir die unit gst nicht. Bin unter Linux Mint.

Viele Grüße
Bernd

PS: Hab eben nochmal geschaut installiert ist es in Mint.

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

Re: Audio-Schnittstelle gesucht. ( gstreamer )

Beitrag von Mathias »

Du musst noch irgend eine libxxx-dev installieren.
Kannst du die ganze Fehlermeldung Posten.
Das steht sicher was von -Lxxx.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wennerer
Beiträge: 609
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: Audio-Schnittstelle gesucht. ( gstreamer )

Beitrag von wennerer »

ja, hab ich übersehen:
Warning: linker: /usr/bin/ld: -lgstreamer-1.0 kann nicht gefunden werden

wennerer
Beiträge: 609
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: Audio-Schnittstelle gesucht. ( gstreamer )

Beitrag von wennerer »

So jetzt hab ich die libgstreamer1.0-dev installiert. Jetzt kompilliert es ohne zu meckern.
Hören tu ich aber noch nix.

Edit: Hab jetzt einen Pfad auf meine Festplatte eingegeben. Musik ist zu hören!

Noch mal Edit: die unit gst wird nicht gefunden.

Viele Grüße
Bernd

wennerer
Beiträge: 609
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: Audio-Schnittstelle gesucht. ( gstreamer )

Beitrag von wennerer »

Hallo,
ich hab es nun in einer Trunk getestet. Da geht es, die Unit gst wird gefunden.

Viele Grüße
Bernd

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

Re: Audio-Schnittstelle gesucht. ( gstreamer )

Beitrag von Mathias »

wennerer hat geschrieben: So 8. Sep 2024, 11:51 Hallo,
ich hab es nun in einer Trunk getestet. Da geht es, die Unit gst wird gefunden.

Viele Grüße
Bernd
Da hast recht, man findet diese Unit nur in der Trunk, wieso auch immer.
So aktuell scheint mir die unit gst nicht zu sein, es fehlen etliche Sachen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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

Re: Audio-Schnittstelle gesucht. ( gstreamer )

Beitrag von Mathias »

Ich habe mein Testprogramm nun für Windows erweitert.
Es wird fehlerfrei kompiliert. Und es läuft ohne Crash durch.
Nur das Problem ist jetzt. das "gst_element_factory_make" und "gst_parse_launch" nil zurück gibt.
Einzig bei "gst_pipeline_new" bekomme ich einen gültigen Zeiger.

Unter Linux funktioniert alle wie erwartet und der Sound kommt.
Einer eine Idee, was da noch schief läuft ?

Die DLLs habe ich von hier https://gstreamer.freedesktop.org/download/#windows oberster Link.

Code: Alles auswählen

program project1;

const
  {$ifdef Linux}
  gstreamerlib = 'libgstreamer-1.0';
  {$endif}
  {$ifdef Windows}
  gstreamerlib = 'gstreamer-1.0-0.dll';
  {$endif}

  GST_STATE_PLAYING = 4;

  procedure gst_init(argc: Plongint; argv: PPPAnsiChar); cdecl; external gstreamerlib;
  function gst_parse_launch(pipeline_description: PChar; error: Pointer): Pointer; cdecl; external gstreamerlib;
  function gst_element_set_state(element: Pointer; state: longint): integer; cdecl; external gstreamerlib;
  procedure gst_object_unref(object_: pointer); cdecl; external gstreamerlib;

  function gst_pipeline_new(pipeline_description: PChar): Pointer; cdecl; external gstreamerlib;
  function gst_element_factory_make(s, n: PChar): Pointer; cdecl; external gstreamerlib;

var
  pipeline, Source, pipeline2: Pointer;
begin
  gst_init(@argc, @argv);

  //  pipeline := gst_parse_launch('playbin uri=https://gstreamer.freedesktop.org/data/media/sintel_trailer-480p.webm', nil);
  pipeline := gst_parse_launch('filesrc location=test.wav ! decodebin ! audioconvert ! autoaudiosink', nil);
  //      pipeline := gst_parse_launch('playbin uri=file:/home/tux/Schreibtisch/sound/test.mp3 ! volume', nil);

  if pipeline = nil then begin
    WriteLn('pipeline error');
  end else begin
    WriteLn('pipeline io.');
  end;

  Source := gst_element_factory_make('videotestsrc', 'source');
  if Source = nil then begin
    WriteLn('source error');
  end else begin
    WriteLn('source io.');
  end;

  pipeline2 := gst_pipeline_new('test');
  if pipeline2 = nil then begin
    WriteLn('pipeline error');
  end else begin
    WriteLn('pipeline io.');
  end;

  gst_element_set_state(pipeline, GST_STATE_PLAYING);
  ReadLn;
  gst_object_unref(pipeline);
end.
Nachtrag: Auch in purem C das gleiche Problem, siehe Anhang . Somit ist Lazarus ausgeschlossen.
Dateianhänge
main.c.zip
(687 Bytes) 89-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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

Re: Audio-Schnittstelle gesucht. ( gstreamer )

Beitrag von Mathias »

Ich bin mir ein Media-Player am coden.
Mit GTK4 arbeitet gstreamer hervorragend. Beides baut auf glib2 auf.
Mit der LCL mit GTK2 lief das ganze sehr instabil.

Mit Windows will das ganze (noch) nicht. Die GUI kommt, aber gstreamer macht mühe.
Dateianhänge
Bildschirmfoto vom 2025-02-26 13-07-11.png
Bildschirmfoto vom 2025-02-26 13-07-11.png (47.86 KiB) 3008 mal betrachtet
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten