Mit Asterisk den Audio-Stream von Web-Radio-Stationen empfangen

3.11.2022

Mit der Telefonsoftware Asterisk gelingt es den MP3-Audiostream von Webradio-Stationen zu empfangen. Ein Telefon mit Freisprecheinrichtung wird dann zu einem Webradio. Jede Station bekommt eine Telefonnummer zugeteilt. Der Frequenzumfang ist eingeschränkt. Für den Empfang von Sprache reicht es aber.

Damit Asterisk das MP3-Protokoll verstehen kann, muss unter Linux bzw. unter Raspbian der entsprechende Dekoder mpg123 installiert sein. Dies geschieht wie üblich in der Konsole auf der Kommandozeilenebene von Linux (auf einem Raspberry Pi also unter Raspbian) mit dem Befehl

sudo apt-get install mpg123

Unter Raspbian des Raspberry Pi ist das schon alles. Getestet mit der Asterisk-Version 16.xx und Raspbian vom Februar 2020.

Um zum Beispiel den Deutschlandfunk zu hören, tragen wir in der extensions.conf das Folgende ein:

; Wer die 337 wählt, hört den Deutschlandfunk.
; mpg123 ist mit "sudo apt-get install mpg123" vorher unter Raspbian zu installieren.
exten => 337,1,Answer()
exten => 337,n,MP3Player(http://st01.dlf.de/dlf/01/64/mp3/stream.mp3)

Wählt jemand die 337, dann hört er den Deutschlandfunk. Die Klangqualität ist nicht berauschend, aber für das Abhören der Nachrichten oder als Hintergrundgedudel über die Freisprecheinrichtung reicht es. Testweise habe ich den Raspberry Pi 3 B+ mit 10 Streams gleichzeitig belastet. Die CPU-Auslastung lag etwas über 10%.

Telefone mit Freisprecheinrichtung lassen sich als Webradio nutzen. IP-Telefone sind besonders gut geeignet. Wegen der kleinen Lautsprecher ist die Klangqualität allerdings bescheiden. Für die Hintergrundmusik oder die Nachrichten reicht sie aber. Rechts oben im Display zeigt das Symbol “HD” an, dass der Audio-Codec G.722 zum Einsatz kommt, der einen Frequenzumfang von 50 – 8000 Hz bietet. Dies ist für den Frequenzumfang älterer Menschen meistens völlig ausreichend. Immerhin klingt das besser als Hörfunk auf  Lang- bis Kurzwelle.
Ein IP-Telefon bietet eine bequeme Auswahl der gewünschten Web-Radio-Stationen.

Wer den vollen Musikgenuss erlangen möchte, greift lieber zum VLC-Player und erstellt M3U-Dateien. Anleitungen dazu gibt in Hülle und Fülle.

Da dieser zusätzliche Service wider Erwarten bei meinen Teilnehmern gut ankommt, habe ich diesen Service mit verschiedenen Musik- und Geschmacksrichtungen erweitert:

; RADIOSENDER MP3-STREAMING

; Stand 12 September 2021
; mpg123 ist mit "sudo apt-get install mpg123" vorher unter Raspbian zu installieren.

; Deutschlandfunk
exten => 401,1,Set(SIP_CODEC=g722) ; erzwingt den Audio-Codec G722, falls unterstützt. Klingt dann besser.
exten => 401,n,Answer()
exten => 401,n,MP3Player(http://st01.dlf.de/dlf/01/64/mp3/stream.mp3)
exten => 401,n,Hangup() ; Auflegen reagiert damit schneller.
exten => 512,1,Goto(telefone,401,1) ; wegen der abweichenden Beschriftung schwedischer Wählscheiben.
;
; Deutschlandfunk Kultur
exten => 402,1,Set(SIP_CODEC=g722)
exten => 402,n,Answer()
exten => 402,n,MP3Player(http://st02.dlf.de/dlf/02/64/mp3/stream.mp3)
exten => 402,n,Hangup()
exten => 513,1,Goto(telefone,402,1)
;
; SWR1 BW
exten => 403,1,Set(SIP_CODEC=g722)
exten => 403,n,Answer()
exten => 403,n,MP3Player(http://liveradio.swr.de/sw282p3/swr1bw/play.mp3)
exten => 403,n,Hangup()
exten => 514,1,Goto(telefone,403,1)
;
; SR P1 
exten => 404,1,Set(SIP_CODEC=g722)
exten => 404,n,Answer()
exten => 404,n,MP3Player(http://http-live.sr.se/p1-mp3-64)
exten => 404,n,Hangup()
exten => 515,1,Goto(telefone,404,1)
;
; BBC World Service 
exten => 405,1,Set(SIP_CODEC=g722)
exten => 405,n,Answer()
exten => 405,n,MP3Player(http://stream.live.vc.bbcmedia.co.uk/bbc_world_service)
exten => 405,n,Hangup()
exten => 516,1,Goto(telefone,405,1)
;
; Smooth Jazz CD101.9 New York 
exten => 406,1,Set(SIP_CODEC=g722)
exten => 406,n,Answer()
exten => 406,n,MP3Player(http://hestia2.cdnstream.com/1277_192)
exten => 406,n,Hangup()
exten => 517,1,Goto(telefone,407,1)
;
; Cinemix 
exten => 407,1,Set(SIP_CODEC=g722)
exten => 407,n,Answer()
exten => 407,n,MP3Player(http://listenwmp.cinemix.fr)
exten => 407,n,Hangup()
exten => 518,1,Goto(telefone,408,1)
;
; KCEA 
exten => 408,1,Set(SIP_CODEC=g722)
exten => 408,n,Answer()
exten => 408,n,MP3Player(http://streaming.rubinbroadcasting.com/kcea)
exten => 408,n,Hangup()
exten => 519,1,Goto(telefone,409,1)
;
; Euro Smooth Jazz
exten => 409,1,Set(SIP_CODEC=g722)
exten => 409,n,Answer()
exten => 409,n,MP3Player(http://stream.laut.fm/eurosmoothjazz)
exten => 409,n,Hangup()
exten => 510,1,Goto(telefone,409,1)
;
; Big Band
exten => 410,1,Set(SIP_CODEC=g722)
exten => 410,n,Answer()
exten => 410,n,MP3Player(http://streams.calmradio.com/api/177/128/stream)
exten => 410,n,Hangup()
exten => 521,1,Goto(telefone,410,1)

; Wie finde ich die Streaming-Adressen?
; Zum Beispiel auf 
; https://vtuner.com/setupapp/guide/asp/BrowseStations/startpage.asp
; Dort Station aussuchen und reinhören.
; Im Browser Mozilla auf den Startbutton des Vtuner-Players
; mit der rechten Maustaste klicken.
; "Seitenquelltext anzeigen" im Popup-Fenster auswählen.
; Mit Strg+F nach mp3 im Quelltext suchen.
; Die entsprechende Streaming-Adresse herauskopieren.

Macros verwenden: Mit Macros lassen sich unter Asterisk solche Programmabschnitte, die nach dem gleichen Muster aufgebaut sind, vereinfachter und kompakter darstellen. Bleiben wir bei dem obigen Web-Streaming-Beispiel. Zur Wiederholung sind als Beispiel nachfolgend drei Webradiosender aufgeführt:

exten => 401,1,NoOp("Deutschlandfunk")
exten => 401,n,Set(SIP_CODEC=g722)
exten => 401,n,Answer()
exten => 401,n,MP3Player(http://st01.dlf.de/dlf/01/64/mp3/stream.mp3)
exten => 401,n,Hangup()
;
exten => 402,1,NoOp("Deutschlandfunk Kultur")
exten => 402,1,Set(SIP_CODEC=g722)
exten => 402,n,Answer()
exten => 402,n,MP3Player(http://st02.dlf.de/dlf/02/64/mp3/stream.mp3)
exten => 402,n,Hangup()
;
exten => 403,1,NoOp("SWR1 BW")
exten => 403,n,Set(SIP_CODEC=g722)
exten => 403,n,Answer()
exten => 403,n,MP3Player(http://liveradio.swr.de/sw282p3/swr1bw/play.mp3)
exten => 403,n,Hangup()



Wie oben zu sehen ist, läuft der Aufruf der drei Webradiostationen immer nach dem gleichen Muster ab. Für jeden Stationsaufruf sind 4 Zeilen vorgesehen. Bei wenigen Stationen ist das noch kein Problem. Bei 20 Stationen wäre die Tipperei schon lästig. Wir schreiben deshalb ein kleines Macro:

; Wir sind in der extensions.conf
; MACRO ZUM ABSPIELEN VON MP3-STREAMS (mpg123 mit "sudo apt-get install mpg123" vorher installieren)
[macro-webradio]               ; ARG1 = Stationsname - ARG2 = Audio-Streaming-Adresse
exten => s,1,NoOP(${ARG1})     ; NoOP hat keine Funktion, erscheint nur in der Assterisk-Konsole
 same => n,Set(SIP_CODEC=g722) ; schaltet auf G.722-Audio-Codec um, falls Endgerät unterstützt.
 same => n,Answer()            ; Baut die Verbindung auf, hebt den Hörer ab
 same => n,Set(VOLUME(TX)=4)   ; macht den MP3-Stream im Telefon lauter
 same => n,MP3Player(${ARG2})  ; Abspielen der Streaming-Adresse
 same => n,Hangup()            ; nicht notwendig, Auflegen klappt besser.

Dieses kleine Macro trägt den Namen webradio und besitzt 2 Platzhalter: ARG1 und ARG2. In ARG1 steht der Stationsname und in ARG2 die Streaming-Adresse. Mit Hilfe dieses Macros lassen sich die drei Stationen viel eleganter aufrufen:

[telefone] ; Bei mir stehen die Extensions historisch bedingt im Abschnitt telefone

; Macro-Aufruf getestet mit Asterisk 16.2.1, 
; ältere Versionen verlangen eventuell eine andere Syntax

exten => 401,1,Macro(webradio,"Deutschlandfunk",http://st01.dlf.de/dlf/01/64/mp3/stream.mp3)
exten => 402,1,Macro(webradio,"Deutschlandfunk Kultur",http://st02.dlf.de/dlf/02/64/mp3/stream.mp3)
exten => 403,1,Macro(webradio,"SWR1 BW",http://liveradio.swr.de/sw282p3/swr1bw/play.mp3)

Für jede Station wird nur noch eine Programmzeile benötigt. Der Deutschlandfunk wird mit der Nummer 401 angewählt, Deutschlandradio Kultur mit 402 und so weiter.

Man beachte, dass die die Kommata zwischen den Argumenten ohne Leerzeichen zu setzen sind. Diese Schreibweise habe ich mit  Asterisk Version 16 getestet. Ältere Asterisk-Versionen verlangen eine andere Schreibweise. Die Platzhalter müssen ARG1, ARG2, ARG3 und so weiter lauten Sie müssen im Macro mit in geschweiften Klammern stehen und mit einem Dollarzeichen eingeleitet werden, z.B. ${ARG1}.

Wie finde ich die Streaming-Adressen der Webradio-Stationen? Zum Beispiel auf https://vtuner.com/setupapp/guide/asp/BrowseStations/startpage.asp. Dort die gewünschte Station aussuchen und reinhören. Im Browser Mozilla auf den Startbutton des Vtuner-Players mit der rechten Maustaste klicken. “Seitenquelltext anzeigen” im Popup-Fenster auswählen.  Mit Strg+F nach mp3 im Quelltext suchen. Die entsprechende Streaming-Adresse herauskopieren.

Auf einem Raspberry Pi lässt sich ein kompletter Telefonserver betreiben, der seinen Teilnehmern über Landesgrenzen hinweg kostenloses Telefonieren von unterwegs oder daheim ermöglicht.
Asterisk-Telefonserver auf einem Raspberry Pi – Installation, Konfiguration, Programmierung, SIP, IAX2, AGI-Skripte, Sicherheit und Tipps zum praktischen Betrieb – 2.11.2022: Diese Seite richtet sich an jene, welche einen Asterisk-Telefon-Server auf einem Raspberry Pi betreiben möchten und später ein kleines Netzwerk aus Asterisk-Servern planen, um ein eigenständiges Telefonnetz aufzubauen. Los geht es mit der Installation von Raspbian und Asterisk auf einem Raspberry Pi und dann nach Lust und Laune immer tiefer in die Programmierung von Asterisk. Die Themen werden laufend erweitert.

Selbstverständlich muss es nicht unbedingt ein Raspberry Pi sein. Andere Linux-Rechner gehen auch. – weiter