I once wrote a little PAL for situations like that. The basic idea is that you have a »backup SAM« ready for operation sitting somewhere in the world that watches your stream and kicks in if the stream stops.
We mainly used that for unplanned interruptions and for the (unmanned) »night shifts«—the late night presenter had the option to continue his show as long as he wanted after midnight, then stop his encoder and the »backup SAM« would continue with some automated program until the »morning guy« came in and took over.
In order for all this to work we also used a little PHP on the station's server that could kick the stream and would be triggered by my PAL script. (This only needed for a multi-DJ setup since we didn't want to give a presenter/DJ the passwords for the stream server.)
If you know a little PAL, the basic idea was to have the backup SAM running at all times (with a good radio automation setup), have a »Statistics Relay« set up for your main stream that it watches permanently and if that goes down, kick the stream (just to be sure, or to also stop sub-streams), start it's own encoder, setup a playlist, start the decks, and voilà! Here we go 24/7.
Here’s part of the »watch code« to give you an idea:
var RelaysToWatch : Array of Integer = ; // Statistic Relay numbers as shown in SAM
PAL.Loop := True; // auto restart script when finished
var i : Integer;
var Failed : Integer = 0;
writeln('*** StreamWatcher active. ***');
// Watch specified Relay(s) for inactivity
while Failed = 0 do
PAL.WaitForTime(T['+00:02:00']); // Wait 2 minutes
if RelaysToWatch.Length > 0 then
for i := RelaysToWatch.Low to RelaysToWatch.High do
if Relays[RelaysToWatch[i]-1].Active = false then
Failed := RelaysToWatch[i];
writeln('Relay #' + IntToStr(RelaysToWatch[i]) + ': ' + Relays[RelaysToWatch[i]-1].Status);
writeln('*** Relay #' + IntToStr(Failed) + ' inactive, trying to go On Air ***');