Raspberry Pi RTL-SDR Broadcastify
From The RadioReference Wiki
Revision as of 15:58, 19 August 2015 by Blantonl (talk | contribs) (→Install rtl_airband customized for Broadcastify)
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 Stream directly from a USB sound card
- 12 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 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 chmod +x rtl_airband
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
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
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
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
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 (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.