É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