RadioReference on Facebook   RadioReference on Twitter   RadioReference Blog
 
Wiki Home
Page
View source
History


Personal Tools

Search the Wiki





 

Raspberry Pi RTL-SDR Broadcastify


Raspberry Pi Broadcastify RTL-SDR Feed Appliance

These instructions show you how to purchase and setup a completely self contained Raspberry Pi with an RTL-SDR stick(s) to broadcast a live audio feed to Broadcastify.com

These instructions have been verified and tested as working on a Raspberry Pi 2 Model B Project Board - 1GB RAM - 900 MHz Quad-Core CPU. Two separate feeds running rtl_fm broadcasting both AM aviation and FM business frequencies simultaneously have been verified as working just fine.

Contents

Purchase Equipment

Raspberry Pi 2 Model B Project Board - 1GB RAM - 900 MHz Quad-Core CPU

RTL-SDR - RTL2832U & R820T2 USB Stick

Male MCX Connector to...

Power Supply for Raspberry Pi

Memory Card for Raspberry Pi

Case for Raspberry Pi

Install Raspbian OS

All testing and configuration was done using Raspbian

You can also download and install a completely preconfigured image that includes all the software and configuration files necessary

Install pre-reqs and update raspberry pi to latest version

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install git cmake libusb-1.0-0.dev build-essential lame 
sudo apt-get install libmp3lame-dev libvorbis-dev libshout-dev
sudo reboot

Install the latest rtl-sdr code

This latest git release is needed for padding zeros when squelch is enabled (-E pad option)

git clone https://github.com/keenerd/rtl-sdr
cd rtl-sdr/
mkdir build
cd build
cmake ../
make
sudo make install
sudo ldconfig
sudo mv $HOME/rtl-sdr/rtl-sdr.rules /etc/udev/rules.d/rtl-sdr.rules

Blacklist the kernel's bundled RTL drivers

We do this before connecting the USB dongle so we don't conflict with the RTL drivers we're about to install.

sudo su -
echo "blacklist r820t" >> /etc/modprobe.d/dvb-blacklist.conf
echo "blacklist rtl2832" >> /etc/modprobe.d/dvb-blacklist.conf
echo "blacklist rtl2830" >> /etc/modprobe.d/dvb-blacklist.conf
echo "blacklist dvb_usb_rtl28xxu" >> /etc/modprobe.d/dvb-blacklist.conf
exit

Install rtl_airband customized for Broadcastify

This tutorial's rtl_airband implements a pre-compiled binary that is customized to read a specific configuration file named /etc/rtlairband2_config.txt and use an AM filter bandwidth of 16khz. It was compiled for the Raspberry Pi2.

sudo su -
cd /usr/local/bin
wget http://s.broadcastify.com/rtl_airband/rtl_airband_bcfy_v02 -O rtl_airband_bcfy
chmod +x rtl_airband_bcfy

If you want to use the original working source for rtl_airband for any other distribution, please follow the instructions on the rtl_airband git source page:

https://github.com/blantonl/RTLSDR-Airband

Install and configure ezstream

sudo apt-get install ezstream

Create the following configuration file at /etc/ezstream_bcfy.xml and replace with your mount, password, and stream name. If you plan on having multiple streams make sure and create a separate named configuration file (i.e.'/etc/ezstream_bcfy2.xml) for each stream and reference accordingly in your command script below.

<ezstream>
    <url>http://audio#.broadcastify.com:80/your_mount</url>
    <sourcepassword>your_source_password</sourcepassword>
    <format>MP3</format>
    <filename>stdin</filename>
    <svrinfoname>Stream Name</svrinfoname>
    <svrinfourl>http://www.broadcastify.com</svrinfourl>
    <svrinfogenre>Scanner</svrinfogenre>
    <svrinfodescription></svrinfodescription>
    <svrinfobitrate>16</svrinfobitrate>
    <svrinfochannels>1</svrinfochannels>
    <svrinfosamplerate>22050</svrinfosamplerate>
    <svrinfopublic>0</svrinfopublic>
</ezstream>

Use rtl_airband to Stream AM Aviation

rtl_airband is the recommend method for feeding an AM Aviation feed to Broadcastify using the Raspberry Pi and an RTL stick.

Create this configuration file below and save to /etc/rtlairband2_config.txt - configure it appropriate to your setup.

The example config below monitors 119.8 MHz AM, with a gain of -35.0db and broadcasts to mount point /999888777 on Broadcastify using the feed's assigned master server audio3.broadcastify.com and a source password of "coolpassword" - -15000 is the frequency correction which works well with most rtl devices. Adjust between -5000 and -20000 to fix any frequency offset issues (a whine on the feed etc). You can also adjust the gain between 200 and 496 (-20.0db and -49.6db) based on your local setup.

1
0       1       350     119800000       -15000
audio3.broadcastify.com 80      999888777       119800000       source  coolpassword

For a more advanced configuration, including multiple feeds and frequencies using the same dongle and multiple dongles, please see the documentation for rtl_airband at https://github.com/szpajder/RTLSDR-Airband

After creating the configuration file, start rtl_airband_bcfy

sudo su -
mknod char_dev c 100 0
/usr/local/bin/rtl_airband_bcfy &

You should now be streaming the configured AM aviation frequency to broadcastify

Use rtl_fm for AM Aviation Scanning and Streaming

/usr/local/bin/rtl_fm -M am -f 124.55M -f 133.4M -f 121.6M -l 65 -p 69 -g 40 -t 0 -E pad -s 8k |
lame -r -s 8 -m m -b 16 --cbr --lowpass 4 --scale 16 - - |
ezstream -c /etc/ezstream_bcfy.xml > /var/log/bcfy.log 2>&1 &

rtl_fm - command line tuner for rt stick

rtl_fm
-d 0           	device 0 (first rtl stick, second rtl stick would be -d 1)
-M am           tune to AM Mode
-f 124.55M      tune to 124.55 MHz (use multiple -f entries to scan through frequencies)
-l 65           set scanning squelch to 65 (adjust as needed)
-p 69           ppm offset (adjust as needed for your dongle)
-g 40.2         gain (0-49.6) - adjust as needed
-t 0            scanning delay (I set to 0, default is 10)
-E pad          when squelch is enabled pad output with zeros (required when broadcasting)
-s 8k           sample at 8k

which is then piped to the mp3 lame encoder...

lame - MP3 encoder
-r           accept raw data input
-s 8          sample in at 8k
-m m          encode mono
-b 16          encode at 16kbs bitrate
--cbr         use Broadcastify’s mp3 cbr standard
--lowpass 4  use a low pass filter of 4
--scale 16   turn up the volume for AM Mode

which is then piped to ezstream

ezstream -c /etc/ezstream_bcfy.xml

Use rtl_fm for FM Scanning and Streaming

/usr/local/bin/rtl_fm -d 0 -M fm -f 461.4M -p 69 -l 65 -g 50 -t 2 -E pad -s 12k |
/usr/bin/lame -r -s 12 --resample 22.05 -m m -b 16 --cbr --lowpass 4 - - |
/usr/bin/ezstream -c /etc/ezstream_bcfy.xml > /var/log/bcfy2.log 2>&1 &

rtl_fm - command line tuner for rt stick

rtl_fm
-d 0           	device 0 (first rtl stick, second rtl stick would be -d 1)
-M fm           tune to FM Mode
-f 461.4M      tune to 461.4 MHz (use multiple -f entries to scan through frequencies)
-l 65           set scanning squelch to 65 (adjust as needed)
-p 69           ppm offset (adjust as needed for your dongle)
-g 40.2         gain (0-49.6) - adjust as needed
-t 2            scanning delay (I set to 2, default is 10)
-E pad          when squelch is enabled pad output with zeros (required when broadcasting)
-s 12k           sample NFM at 12k

which is then piped to the mp3 lame encoder...

lame - MP3 encoder
-r           accept raw data input
-s 12          input at 12k
--resample 22.05   resample at 22.05Khz
-m m          encode mono
-b 16          encode at 16kbs bitrate
--cbr         use Broadcastify’s mp3 cbr standard
--lowpass 4  use a low pass filter of 4

which is then piped to ezstream

ezstream -c /etc/ezstream_bcfy.xml

Stream directly from a USB sound card

If you already have a scanner ready to go and just want to use the Raspberry Pi to broadcast your radio to broadcastify, simply purchase an inexpensive USB sound card dongle, plug it in to the Raspberry Pi, and follow these steps:

  • Purchase USB Soundcard Dongle: http://amzn.to/1hekylB ($1.70)
  • Install and configure ezstream with your feed's details
  • Start alsamixer
pi@raspberrypi:~# alsamixer
  • press F6, choose the "USB Headphone Set" entry
  • press your tab key to select the "Capture" device volume control
  • use your "up arrow" key to adjust the level to it's lowest level possible above 0 - (6)
  • press escape to exist alsamixer
  • run the following command to save the volume settings
sudo alsactl store
  • Run this command to start the sound card broadcast
arecord -f dat -c 1 -D hw:1,0 | \
/usr/bin/lame -r -s 48 --resample 22.05 -m m -b 16 --cbr --lowpass 4 - - | \
/usr/bin/ezstream -c /etc/ezstream_bcfy1.xml > /var/log/bcfy1.log 2>&1 &

Note: very little volume will be needed from your scanner - adjust the levels as appropriate for a good sounding feed.

Start stream on boot

Easiest way is to add your full command(s) to /etc/rc.local just before the exit 0 entry

TODO: formal startup scripts.

Verify System is running and connected

I've found that occasionally lame will crash/stop and take the feed offline (at least with my setup).

I've made a script to reboot the Pi if it happens. The script will check if the user pi is logged in - if so it won't reboot because maybe you are working on it.

Copy the script below, and create a file in /etc called checkstuff.sh

sudo nano /etc/checkstuff.sh
#!/bin/sh

PROCESS="$1"
PROCANDARGS=$*

RESULT=`who | grep pi`

if [ "${RESULT:-null}" = null ]; then
echo "Nobody logged in.  We'll check for  other stuff"
logger "checkstuff: Nobody logged in.  Continueing checks."
else
logger "checkstuff: Pi is logged in.  Bypass all other checks."
exit 0
fi

RESULT=`netstat -an | grep :80`

if [ "${RESULT:-null}" = null ]; then
logger "checkstuff: No connection to RadioReference.  Rebooting."
sudo reboot
else
logger "checkstuff: Connection established to RadioReference."
fi

RESULT=`pgrep rtl_fm`

if [ "${RESULT:-null}" = null ]; then
logger "checkstuff: rtl_fm not running.  Rebooting."
sudo reboot
else
logger "checkstuff: rtl_fm running."
fi

RESULT=`pgrep lame`

if [ "${RESULT:-null}" = null ]; then
logger "checkstuff: Lame not running.  Rebooting."
sudo reboot
else
echo "lame running"
logger "checkstuff: Lame running."
fi

RESULT=`pgrep ezstream`

if [ "${RESULT:-null}" = null ]; then
logger "checkstuff: EZStream not running.  Rebooting."
sudo reboot
else
logger "checkstuff: EZStream running."
fi

logger "checkstuff: Feed should be online."

Save the file and exit nano.

Now the file needs to be made executable:

sudo chmod 755 /etc/checkstuff.sh

You now need to set up a schedule to run the script. I've set mine to run automatically every 10 minutes. This can be done by updating the cron jobs:

sudo crontab -e

Paste the following lines at the bottom.

*/10 * * * * /etc/checkstuff.sh

Save & exit the file. The script will now run every 10 minutes (at x:00, x:10, x:20, x:30, x:40 and x:50). It will log to the /var/log/messages logfile every time it runs.


Copyright 2018 by RadioReference.com LLC Privacy Policy  |  Terms and Conditions