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.