Raspberry Pi RTL-SDR Broadcastify
From The RadioReference Wiki
Revision as of 23:56, 9 August 2015 by Blantonl (talk | contribs) (→Use RTL_Airband to Stream AM Aviation)
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
- 1 Purchase Equipment
- 2 Install Raspbian OS
- 3 Install pre-reqs and update raspberry pi to latest version
- 4 Install the latest rtl-sdr code
- 5 Blacklist the kernel's bundled RTL drivers
- 6 Install rtl_airband customized for Broadcastify
- 7 Install and configure ezstream
- 8 Use RTL_Airband to Stream AM Aviation
- 9 Use rtl_fm for AM Aviation Scanning and Streaming
- 10 Use rtl_fm for FM Scanning and Streaming
- 11 Start stream on boot
Purchase Equipment
Raspberry Pi 2 Model B Project Board - 1GB RAM - 900 MHz Quad-Core CPU
RTL-SDR - RTL2832U & R820T2 USB Stick
- R820T Stick - http://amzn.to/1KFmhd6 (Most common)
- R820T2 Stick - http://amzn.to/1DJA79d (slightly better performance and stability)
Male MCX Connector to...
- F Female - http://amzn.to/1KtVwIt
- PL259 - http://amzn.to/1JLgjV7
- BNC - http://amzn.to/1DJqZ4A
- SMA - http://amzn.to/1JLgAav
- Lots of connectors - http://amzn.to/1Ku4c4s
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
- Follow the instructions here:
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 sudo apt-get install lame libmp3lame-dev libvorbis-dev libshout-dev sudo rpi-update && 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 It was compiled for the Raspberry Pi2. 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/szpajder/RTLSDR-Airband
sudo su - cd /usr/local/bin wget http://s.broadcastify.com/rtl_airband/rtl_airband_bcfy_v01 -O rtl_airband chmod +x rtl_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
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)
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
sudo su - mknod char_dev c 100 0 /usr/local/bin/rtl_airband &
You should now be streaming the configured AM aviation frequency to broadcastify
rtl_airband is the recommend method for feeding an AM Aviation feed to Broadcastify using the Raspberry Pi and an RTL stick.
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 -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 -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
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.