Nooelec – NESDR SMART

Référence: Ubuntu 20.04.3

J’utilise le module radio Nooelec – NESDR SMART afin de démoduler une station de radio locale FM et la diffuser en streaming vers le Logitech Media Server pour finalement en faire l’écoute via mes lecteurs déjà en place dans la maison.

Afficher la liste des modules dvb déjà dans le noyau linux

lsmod | grep dvb

dvb_usb_rtl28xxu 40960 1
dvb_usb_v2 49152 1 dvb_usb_rtl28xxu
dvb_core 139264 2 dvb_usb_v2,rtl2832
rc_core 53248 3 dvb_usb_v2,dvb_usb_rtl28xxu
mc 53248 7 videodev,snd_usb_audio,dvb_usb_v2,videobuf2_v4l2,uvcvideo,dvb_core,videobuf2_common

Éviter le chargement d’un module en conflit pour notre installation
sudo nano /etc/modprobe.d/blacklist-dvb.conf

Ajouter ceci au fichier:

 blacklist dvb_usb_rtl28xxu

Sauvegarder et quitter.

sudo apt-get install rtl-sdr

Obtenir les identifiants du périphérique
lsusb

Bus 003 Device 010: ID 0bda:2832 Realtek Semiconductor Corp. RTL2832U DVB-T

sudo nano /etc/udev/rules.d/20.rtlsdr.rules

SUBSYSTEM=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="2832", GROUP="adm", MODE="0666", SYMLINK+="rtl_sdr"

sudo service udev restart

rtl_test

Found 1 device(s):
0: Generic, RTL2832U, SN: 77771111153705700

Using device 0: Generic RTL2832U
Detached kernel driver
Found Rafael Micro R820T tuner
Supported gain values (29): 0.0 0.9 1.4 2.7 3.7 7.7 8.7 12.5 14.4 15.7 16.6 19.7 20.7 22.9 25.4 28.0 29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1 43.4 43.9 44.5 48.0 49.6
[R82XX] PLL not locked!
Sampling at 2048000 S/s.

Info: This tool will continuously read from the device, and report if
samples get lost. If you observe no further output, everything is fine.

Reading samples in async mode...
Allocating 15 zero-copy buffers
lost at least 44 bytes

Si vous testez ceci sur un ordinateur avec X alors vous pouvez installer le programme suivant pour faire plusieurs expérimentations sinon sauter cette étape.

sudo apt install gqrx-sdr

Documentation:
https://gqrx.dk/doc/practical-tricks-and-tips
https://github.com/rafaelferrari0/rtl_fm_player
http://kmkeen.com/rtl-demod-guide/

Commande pour lancer la réception et entendre si cela fonctionne:

rtl_fm -M wbfm -f 89.1M | play -r 32k -t raw -e s -b 16 -c 1 -V1 -
rtl_fm -M wbfm -f 98.5M | aplay -r 32000 -f S16_LE -c 1 -

Ligne de commande complète implicite avec l’utilisation de l’option « wbfm »
rtl_fm -M fm -s 200k -o 4 -A fast -r 48k -l 0 -E deemp -f 96.9M | aplay -r 48000 -f S16_LE -c 1 -

Documentation injection VLC:
https://www.diyaudio.com/forums/pc-based/341527-playing-rtl-sdr-radio-vlc.html

Ligne de commande qui lance la réception et l’injecte dans VLC pour en faire la diffusion vers l’URL http://192.168.0.11:8078/fm.mp3

rtl_fm -M wbfm -f 98.5M | cvlc -vvv --demux=rawaud --rawaud-channels=1 --rawaud-samplerate=32000 --rawaud-fourcc=s16l --sout "#transcode{vcodec=none,acodec=mp3,ab=192,channels=2,samplerate=44100}:http{dst=:8078/fm.mp3}" :sout-keep -

 

J’ai obtenu mes meilleurs résultats avec celle-ci.
Ligne de commande qui lance la réception et l’injecte dans VLC pour en faire la diffusion vers l’URL http://192.168.0.11:8078/fm.mp3

rtl_fm -M fm -s 200k -o 4 -A fast -r 48k -l 0 -E deemp -f 96.9M | cvlc -vvv --demux=rawaud --rawaud-channels=1 --rawaud-samplerate=48000 --rawaud-fourcc=s16l --sout "#transcode{vcodec=none,acodec=mp3,ab=192,channels=2,samplerate=44100}:http{dst=:8078/fm.mp3}" :sout-keep -

 

Il est aussi possible de le faire en passant par deux processus, on enregistre un fichier avec le premier et on diffuse le fichier avec le second.
rtl_fm -M wbfm -f 98.5M /media/nas1/Download/fm.raw &

cvlc /media/nas1/Download/fm.raw -vvv --demux=rawaud --rawaud-channels=1 --rawaud-samplerate=32000 --rawaud-fourcc=s16l --sout "#transcode{vcodec=none,acodec=mp3,ab=192,channels=2,samplerate=44100}:http{dst=:8078/fm.mp3}" :sout-keep -

Pour mettre fin aux processus

Terminer VLC
killall -15 vlc

Terminer rtl_fm
killall -15 rtl_fm

Terminer les deux processus simultanément
killall -15 vlc rtl_fm

Script pour gérer cela plus simplement:

nano ~/scripts/rtl_fm_98-5_vlc_stream.sh

#/bin/bash
pid0=$(pidof rtl_fm)
pid1=$(pidof vlc)
echo "rtl_fm $pid0 et vlc $pid1"
kill -15 $pid0
kill -15 $pid1
sleep 5
#wait $pid0
#wait $pid1
echo "Les processus des PID $pid0 et $pid1 sont maintenant terminés avec le code de sortie $?"
rtl_fm -M fm -s 200k -o 4 -A fast -r 48k -l 0 -E deemp -f 98.5M | cvlc -vv --demux=rawaud --rawaud-channels=1 --rawaud-samplerate=48000 --rawaud-fourcc=s16l --sout "#transcode{vcodec=none,acodec=mp3,ab=192,channels=2,samplerate=44100}:http{dst=:8078/fm.mp3}" :sout-keep - &

 

Pour entendre la diffusion, simplement établir une connexion radio avec l’url http://192.168.0.11:8078/fm.mp3 dans Logitech Media Server.