Gilze-Rijen Airbase on LiveATC

Over the last year LiveATC.net has been provided with several live audio feeds that can be streamed here.

There are now several feeds on LiveATC.net covering the military base Gilze-Rijen and the Gilze-Rijen CTR. The airbase is approximately 2km from my location and more of less in the approach one of the runways.

The airbase is home to a fleet of Apache, Chinook and Cougar helicopters and home to a museum of World War 2 aircraft such as the Mitchel B25 and Spitfire. There are also a number of light aircraft and gliders that use the runway from a clubhouse located nearby and civilian aircraft entering the CTR are required to contact the tower during operational hours, so it can get quite active at times.

The language spoken on frequency is usually English, with the exception of some civilian CTR interlopers. The military aircraft frequently practice manoeuvres in coordination with NATO.

Up until recently every 4 years the airbase would host an international air show often attracting in excess of 250,000 visitors per day. Unfortunately due to the pandemic this has been cancelled for obvious reasons.

Hardware & Software

The setup consists of two RTL-SDR dongles redundantly chained together to a single vertical antenna, each dongle working independently on two different Raspberry Pi systems. This gives continuous operation if one of the SDRs locks up.

rtl_airband is used to manage, tune the SDRs, mix (if needed) and encode the streams. rtl_airband makes use of the Raspberry Pi’s GPU to offload some of the processing form the CPU, which is quite neat.

The rtl_airband encoders connect directly to a local icecast server. LiveATC then pulls the streams from the icecast server at roughly 8kb/s per mono feed.

My setup has an additional feed- a mix of the Ground and Tower frequencies, each separated into either the Left or Right stereo channel.

rtl_airband configuration

devices:
({
# mode = "scan";
type = "rtlsdr";
serial = "ehgr_71ppm";
gain = 35;
centerfreq = 125.500;
correction = 71;
mode = "multichannel";
sample_rate = 0.96;
channels:
(
{
freq = 125.330;
squelch = 24;
outputs: (
{
type = "icecast";
server = "192.168.1.xx";
port = 9000;
mountpoint = "ehgr-fallback";
name = "EHGR Tower Backup (rtl_airband, UHF)";
genre = "ATC";
username = "source";
password = "password";
},
{
disable = true;
type = "mixer";
name = "mixer1";
balance = -0.75;
ampfactor = 1.0;
}
);
},
{
freq = 278.125;
disable = true;
squelch = 24;
outputs: (
{
type = "icecast";
server = "192.168.1.xx";
port = 9000;
mountpoint = "ehgr-ground";
name = "EHGR Ground UHF";
genre = "ATC";
username = "source";
password = "password";
},
{
type = "mixer";
name = "mixer1";
balance = 0.75;
ampfactor = 1.0;
}
);
}
);
}
);

mixers: {
mixer1: {
outputs: (
{
type = "icecast";
server = "192.168.1.xx";
port = 9090;
mountpoint = "ehgr-twrgnd";
name = "EHGR Tower & Ground Mix"
genre = "ATC";
username = "source";
password = "password";
}
);
},
mixer2: {
outputs: (
{
type = "icecast";
server = "icecast.server.example.org";
port = 8080;
mountpoint = "mixer2.mp3";
name = "Ground + Delivery (not used just an example)"
genre = "ATC";
username = "source";
password = "mypassword";
}
);
}
};

Redundancy

The above setup is duplicated on another Raspberry Pi that feeds into a different icecast mount point.

If icecast loses the feed from the SDR illustrated above, it will automatically drop the fallback feed. In the unlikely event of both feeds going down, then the icecast server selects the fallback’s fallback.

This consists of a looped MP3 fed by a continuously running instance of ezstream with a nice digitally synthesised voice apologising for the inconvenience! Beep beep beep…

When the feeds recover, icecast automatically reconnects the listeners (LiveATC) back to the main feeds.