Themabewertung:
  • 1 Bewertung(en) - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Neue Erfahrungen mit FL2K und AM Stereo/Mono
#1
Hallo liebe Radiofreunde,

Inspiriert durch Otto Bergers Input im FL2K Thread und die Diskussion über virtuelle Audioquellen die ich bisher benutzt hatte, habe ich nun auch einige Experimente mit FFMPEG gemacht. Ich bin nun nicht so der begnadete Programmierer, außerdem bin ich faul... und deshalb war die kleine Codezeile und beispielhafte .grc von Otto wie FFMPEG in Verbindung mit der Linux Netcat Funktion eine Internet Radiostation per UDP mit Hilfe von Netcat an ein GNU Radio Projekt Daten liefern kann sehr hilfreich. Es sind manchmal diese kleinen Hilfestellungen die einen weiter bringen,,,Danke Otto!

Nun, die Experimente waren erfolgreich und im Moment schmettert Madonna "Borderline" aus einem Internet Radiosender in bestem AM CQUAM Stereo über meinen Sony SRF-42 Walkman...Für Interessierte: Das klingt wie UKW...

Dieser Post soll nur ein "Teaser" sein. Ich habe meine AM Stereo GNU Radio Projekte nun mit dem neuen Wissen angepasst und füttere sie über UDP mit Signalen die FFMPEG empfängt und aufbereitet.

Ich habe mich im Zuge dieser Erweiterungen auch mit "Zenity" beschäftigt, einer grafischen Ausgabe für Scripte, und ein paar simple Scripte geschrieben die folgendes machen:

- Ein Fenster öffnen wo man entweder eine URL für eine oder zwei Internet Radiostationen eintragen kann
 oder
- Aus einer Auswahl von Lieblingssendern einen oder zwei direkt auswählen kann. Diese werden dann auf ein oder zwei Frequenzen ausgegeben. Ich nutze 630kHz und 720 kHz aus einer Auswahl von 540, 630, 720, 810 und 900kHz für jeden Kanal.
- Den Treiber für FL2K startet
- Das passende GNU Radio Python Programm  (Datei.py) startet
- FFMPEG die Parameter übergibt um den/die gewählten Sender zu empfangen und als UDP Stream auf einem Port - ich nutze 6601/6602 an das GNU Radio Python Programm per Netcat schickt.

So kann ich nun mit wenigen Handgriffen eine oder zwei Internet Radiostationen in AM Stereo ausgeben. Die Encoder hatte ich ja schon vor einigen Jahren in GNU Radio "gebaut", aber immer mit virtuellen Soundkarten genutzt die einige Probleme bereitet haben wenn mehr als eine im System aktiv war... Nun ergeben sich weitere interessante Möglichkeiten.

Für Adressen von Internet Radiostationen habe ich diese schöne Site gefunden:

https://streamurl.link/

Auch werde ich das alles - was auch noch "Work in Progress" ist mit mehr Details hier präsentieren, in der Hoffnung, dass es Anderen hilft hier auch etwas mit GNU Radio und dessen tollen Möglichkeiten zu machen.

Fortsetzung folgt... Big Grin
Viele Grüße
Semir
---------------------------------
"Alle sagten: Das geht nicht. Dann kam einer der wußte das nicht, und hat es gemacht."
(Prof. Hilbert Meyer, Uni Oldenburg)
Zitieren
#2
Hallo zusammen,

so nun wie versprochen einige Erläuterungen zu meinen veränderten AM Stereo Projekten. Etwas gleich zu Anfang, Das hier funktioniert auch mit kleinen Änderungen in Mono. Ich werde das auch in meinen GNU Radio "Sendern" mit mehreren Mono Kanälen umsetzen...

Bisher hatte ich die GNU Radio Projekte mit den virtuellen Soundkarten mit Audiodaten versorgt. Mit FFMPEG hatte ich mich nie eingehend befasst und unter cvlc habe ich es nie hinbekommen einen Internetstream zu empfangen. Vor kurzem bin ich dann über diese Codezeile von Otto gestolpert:

fmpeg -i http://listen.181fm.com/181-classical_128k.mp3 -ar 32000 -ac 1  -f f32le -filter:a "volume=0.5" - | nc -u 127.0.0.1 1234

Das fand ich interessant und habe schnell die kleine "Testumgebung" von Otto:


.png   Ottos Testumgebung.png (Größe: 118,04 KB / Downloads: 123)

zusammen-geklickt. Es funktionierte auf Anhieb und nun wollte ich weiter machen...

Da ich für meine AM Stereo Projekte das Stereosignal brauchte habe ich den Teil "ac 1" entfernt um die Ausgabe wieder in Stereo zu erhalten. Nun sieht die Codezeile so aus:

/usr/bin/ffmpeg -i $streamsite1 -ar 32000 -f f32le -filter:a "volume=0.5" - | nc -u 127.0.0.1 6601

Das Programm ffmpeg befindet sich im Pfad /usr/bin wie man hier sieht.

Ich benutze Port 6601 aber das ist Geschmackssache. Die eigentliche Streaming URL habe ich hier durch die Variable "streamsite1" ersetzt. Das $ am Anfang besagt, dass es sich um eine Variable handelt. Warum ich das gemacht habe, dazu komme ich später.

Doch wie bekomme ich nun das Signal in rechts und links in GNU Radio getrennt? Die Antwort lag im Block "Deinterleave"


.png   deinterleave-rechts-links.png (Größe: 15,04 KB / Downloads: 122)

Hier findet Ihr das komplette .grc file und das daraus generierte Python Programm:

.zip   Motorola-CQUAM-GNURadio-Dateien.zip (Größe: 4,45 KB / Downloads: 3)

Nun wollte ich das Ganze noch automatisieren und komfortabel URLs von Radiostationen auswählen und eingeben können. Auch sollten die Dialoge nicht über die Konsole laufen. Hier bin ich auf "Zenity" gestoßen. Das ist eine von mehreren Möglichkeiten um in einem Script eine graphische Ausgabe und Abfragen zu generieren.

Hierzu habe ich nun ein Script geschrieben das folgendes macht:

1) Eine Liste mit Favoriten präsentieren aus der eine Station ausgewählt werden kann
2) Wenn nichts gewählt wird erscheint ein Eingabefenster in das man manuell die URL eines Radiostreams eintragen kann
3) Wenn auch unter 2 nichts eingegeben wurde erscheint eine Fehlermeldung und das Script beendet sich
4) Wurde etwas eingegeben oder gewählt ist dies in der Variablen "streamsite1" hinterlegt.
5) Nun wird zunächst das Python Programm gestartet
6) Nach einer kurzen Wartezeit wird der FL2K Treiber gestartet.
7) Zum Schluss wird dann FFMPEG aufgerufen und der in der Variablen "streamsite1" hinterlegte Stream abgespielt.

Das Script...

.zip   Script_1_Kanal_AM-Stereo_FFMPEG_UDP.zip (Größe: 1,19 KB / Downloads: 3)

Ich habe mir -auch im Eigeninteresse Smile  - Mühe gegeben alles zu kommentieren. An die Code Cracks hier...ich bin Anfänger und sicher gibt es besseren Code aber es funktioniert und das ist was für mich wichtig ist und, dass andere die auch nicht viel Erfahrung haben die Schritte verstehen. Das Script ist in Englisch kommentiert, da AM-Stereo hauptsächlich im Englischsprachigen Raum interessant ist...

Das Ganze funktionierte sehr gut bis ich eine Station von Klassik Radio mit 192kbit/s aufrief. Nun gab es Aussetzer und "Buffer underflows". Wenn ich die Übergabe der Daten mit netcat auf TCP umstellte funktionierte es. Die Lösung möchte ich hier kundtun, da unter Umständen auf manchen Systemen -ich nutze Linux Mint- das gleiche Problem auftreten kann. 

Ich habe hier einen Core i7 Laptop mit 16GB und trotzdem diese Probleme was tun? Wenn man im Block "UDP Source" den Reiter "Documentation" öffnet findet sich folgender Hinweis:

NOTE:

For best performance and to ensure UDP packets are not dropped, add the following lines to your /etc/sysctl.conf and reboot (the reboot is required).

net.core.rmem_default=26214400
net.core.rmem_max=104857600
net.core.wmem_default=65536
net.core.wmem_max=104857600

Das habe ich dann in der Datei syscontrol.conf eingetragen, den Rechner neu gestartet und nun funktionierte es ohne Aussetzer.

Als nächstes werde ich das noch für zwei Kanäle erweitern und auch eine Version des Scripts für mehrere Mono-Frequenzen machen.
Viele Grüße
Semir
---------------------------------
"Alle sagten: Das geht nicht. Dann kam einer der wußte das nicht, und hat es gemacht."
(Prof. Hilbert Meyer, Uni Oldenburg)
Zitieren
#3
Hallo zusammen,

hier wieder ein Update. Gestern habe ich diese neue Variante mit dem Script und ffmpeg auf einem kleinen Rechner getestet. Es ist ein "Nuc" mit Intel Celeron Prozessor hier die Systemdaten:


.png   System NUC.png (Größe: 34,21 KB / Downloads: 65)

Auf diesem Rechner habe ich bisher die gleiche Konfiguration, also einen Kanal AM Stereo mit 32k Abtastrate und CQuAM und mit einer virtuellen Soundkarte "VSC1" am Laufen. 

Zum Vergleich installierte ich die Variante mit ffmpeg in der Erwartung, dass die CPU Last etwas geringer ausfällt, da ja nun keine virtuellen Soundkarten und kein VLC mehr laufen mussten.

Das Ergebnis ist ernüchternd. Beide Systeme mit dem gleichen Internetradio Stream haben vergleichbare CPU Last. Es scheint sogar, dass die Variante mit VLC und der VSC etwas besser läuft und die Last hier stetiger ist. Bei der ffmpeg Variante ist die CPU Last mehr unregelmäßig. In beiden Fällen aber bei ca. 60% auf diesem System. Hier die beiden Screenshots des Systemmonitors:

Mit VSC und VLC


.png   vlc-aamst.png (Größe: 60,87 KB / Downloads: 65)

und hier mit ffmpeg und nc


.png   ffmpeg-nc.png (Größe: 72,14 KB / Downloads: 65)

Ich sehe hier allenfalls einen Vorteil für die VLC Variante. Ich denke, dass die GUI nicht so viel Leistung erfordert wie das angenommen wird. Ein noch besserer Vergleich wäre natürlich das ganze nochmal mit cvlc und nc zu testen...
Viele Grüße
Semir
---------------------------------
"Alle sagten: Das geht nicht. Dann kam einer der wußte das nicht, und hat es gemacht."
(Prof. Hilbert Meyer, Uni Oldenburg)
Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  fl2k, GNU Radio und Raspberry Pi Raphael_S 6 369 25.03.2024, 15:28
Letzter Beitrag: Raphael_S
  Ein minimales Internetradio für alte und neue Raspberrys Bernhard45 189 107.276 12.04.2022, 16:00
Letzter Beitrag: navi
  Ein minimales Internetradio für alte und neue (Android) Smartphones Bernhard45 15 10.672 24.05.2021, 19:58
Letzter Beitrag: reinersbg
  DRM - Sender mit Fl2K-Grafikkarte Bernhard45 0 2.066 21.04.2020, 09:47
Letzter Beitrag: Bernhard45
  Neue Kontrollstation radio-volker 0 1.563 10.04.2020, 17:52
Letzter Beitrag: radio-volker

Gehe zu: