Écouter la radio FM via une clé SDR et une interface web

Antenne FM Clé SDR + raspberry pi + rtl_tcp, ip: 192.168.1.73

ordinateur avec navigateur web, sur le même lan.

Serveur RTL-SDR

Raspberry Pi avec clé RTL-SDR, système Raspberry Pi OS à jour (basé sur Debian 12)

créer un fichier /etc/systemd/system/rtlsdr.service

 1[Unit]
 2Description=RTL-SDR Server
 3Wants=network-online.target
 4After=network-online.target
 5
 6[Service]
 7#ExecStartPre=/bin/sleep 15
 8ExecStart=/bin/sh -c '/usr/bin/rtl_tcp -a $(hostname -I) -p 1234'
 9WorkingDirectory=/home/pi
10StandardOutput=inherit
11StandardError=inherit
12Restart=always
13
14[Install]
15WantedBy=multi-user.target

Par défaut le service tournera sur le port tcp/1234, on peut le modifier avec le paramètre -p (ligne ExecStart) et adapter son pare-feu si besoin.

Prendre en compte ce nouveau service

1systemctl daemon-reload

Démarrer le service immédiatement + au boot

1systemctl enable --now rtlsdr

Vérifier que le service tourne

 1$ systemctl status rtlsdr
 2● rtlsdr.service - RTL-SDR Server
 3     Loaded: loaded (/etc/systemd/system/rtlsdr.service; enabled; preset: enabled)
 4     Active: active (running) since Sat 2023-07-15 18:14:49 CEST; 56s ago
 5   Main PID: 697 (sh)
 6      Tasks: 3 (limit: 779)
 7        CPU: 150ms
 8     CGroup: /system.slice/rtlsdr.service
 9             ├─697 /bin/sh -c "/usr/bin/rtl_tcp -a \$(hostname -I)"
10             └─700 /usr/bin/rtl_tcp -a 192.168.1.73
11
12juil. 15 18:14:49 rtlsdr systemd[1]: Started rtlsdr.service - RTL-SDR Server.
13juil. 15 18:14:49 rtlsdr sh[700]: Found 1 device(s):
14juil. 15 18:14:49 rtlsdr sh[700]:   0:  Realtek, RTL2838UHIDIR, SN: DVBT_01
15juil. 15 18:14:49 rtlsdr sh[700]: Using device 0: Generic RTL2832U OEM
16juil. 15 18:14:49 rtlsdr sh[700]: Detached kernel driver
17juil. 15 18:14:50 rtlsdr sh[700]: Found Rafael Micro R820T tuner
18juil. 15 18:14:50 rtlsdr sh[700]: [R82XX] PLL not locked!
19juil. 15 18:14:50 rtlsdr sh[700]: Tuned to 100000000 Hz.

On va positionner sur ce raspberry un serveur web et un système de transcodage à la demande d'un flux audio

icecast ? ffmpeg ?

rtl_fm -f 102300000 -M wbfm -s 200000 -r 48000 - | ffmpeg -nostats -loglevel 0 -f s16le -ac 1 -ar 48000 -i pipe: -c:a -f mp3 output.mp3

-c:a libvorbis -qscale:a 3 -content_type 'audio/ogg' -vn -f ogg icecast://source:PASSWORD@icecast:8001/$name_vorbis -c:a libfdk_aac -profile:a aac_he_v2 -ab 48k -content_type 'audio/aac' -vn -f adts icecast://source:PASSWORD@icecast:8001/$name_aac -c:a libmp3lame -qscale:a 6 -content_type 'audio/mpeg' -vn -f mp3 icecast://source:PASSWORD@icecast:8001/$name_mp3

interface web (juste de tuning de la fréquence):

Fréquence _____ MHz Encodage MP3, OGG, HE-AAC-V2 -> en dur

ou juste une app en cli ...

1#!/usr/bin/env bash

et le service associé

OK

killall rtl_fm lancer rtl_fm | ffmpeg en tâche de fond (service ?)

systemctl stop rtl_fm_to_icecast@XXX.X systemctl start rtl_fm_to_icecast@YYY.Y

flux sur http://192.168.1.73:8000/sdr_fm.mp3

Ressources

comments powered by Disqus