[Icecast] Custom Hooks

jake jake at jakebriggs.com
Fri Nov 9 10:53:48 UTC 2018


Yeah it is a tad gross but here is my first (and probably only) attempt:

---------------- 8< ----------------
#!/bin/bash

pipe=/tmp/testpipe

trap "rm -f $pipe" EXIT

if [[ ! -p $pipe ]]; then
     mkfifo $pipe
fi

mplayer -slave -playlist "http://my.icecast.stream/music" > 
/tmp/testpipe 2> /dev/null &

while true
do
     if read line <$pipe; then
         echo $line
         /bin/dothing "$line"
     fi
done

echo "Reader exiting"
---------------- 8< ----------------

Basically use mplayer to stream, redirecting its output to a named pipe. 
Then, read line on the pipe for ever, once a line comes in echo it and 
call /bin/dothing "$line", then go back to read line.

The script is basic and would need a little work to ignore all lines 
that don't start with "ICY Info: " since the output is something like:

---------------- 8< ----------------
Resolving my.icecast.stream for AF_INET6...
Resolving my.icecast.stream for AF_INET...
Connecting to server my.icecast.stream: 80...

Name : name
Genre : Misc
Website: http://savonet.sf.net
Public : yes
Cache size set to 320 KBytes

ICY Info: StreamTitle='Regurgitator - ! (The Song Formerly Known As)';
ICY Info: StreamTitle='Queens of the Stone Age - Walkin' On The 
Sidewalks';
ICY Info: StreamTitle='foo - bar';
ICY Info: StreamTitle='Another Metadata Change';
...
...
...
...
---------------- 8< ----------------

but yeah something like this might work fine until a better solution 
comes along.

Jake

~


On 2018-11-09 23:09, Philipp Schafft wrote:
> Good morning,
> 
> On Fri, 2018-11-09 at 22:56 +1300, Jake wrote:
>> Couldn't you also just have a client stream locally from icecast that
>> can do things on metadata change? I mean it's a bit icky but it'd
>> work.
> 
> If you know any player that can do things on metadata change and works
> for the given setup: sure. Why not?
> 
> The main downside of this is that it may require a little bit more 
> setup
> and requires more resources as the player will likely decode the actual
> stream as well.
> 
> With best regards,
> 
>> ---- Philipp Schafft wrote ----
>> 
>> >Good morning,
>> >
>> >On Thu, 2018-11-08 at 12:45 -0500, Alex Hackney wrote:
>> >> I actually got this to work this morning finally. The problem was on my
>> >> auth server.
>> >
>> >Perfect. :)
>> >
>> >
>> >> I see the source auth hook being sent a lot, is there anyway to get the
>> >> current metadata in that hook?
>> >
>> >No. The auth happens long before the client is attached to any source.
>> >In fact in Icecast 2.5.x the auth backend can even redirect the client
>> >to other resources.
>> >
>> >
>> >> Ideally, every time the source is updated, I'd like to get a hook so I
>> >> can track the songs that are being played. Alternatively, the only way I
>> >> can see doing it, is to make a get request every X seconds and watch for
>> >> the song to change.
>> >
>> >There currently isn't one. For 2.5.x there already is a ticket[0] for
>> >that.
>> >
>> >What you can do is polling the status XML. You can also use the STATS
>> >interface[1]. Also there is the playlist log. You can watch and follow
>> >that file to see when updates are made.
>> >
>> >With best regards,
>> >
>> >
>> >
>> >[0] https://gitlab.xiph.org/xiph/icecast-server/issues/2189
>> >[1] Try it with: wget -qO - --method=STATS
>> >http://admin:hackme@icecast.example.org:8000/
>> >
>> >
>> >--
>> >Philipp Schafft (CEO/Geschäftsführer)
>> >Telephon: +49.3535 490 17 92
>> >
>> >Löwenfelsen UG (haftungsbeschränkt)     Registration number:
>> >Bickinger Straße 21                     HRB 12308 CB
>> >04916 Herzberg (Elster)                 VATIN/USt-ID:
>> >Germany                                 DE305133015
> 
> 
> _______________________________________________
> Icecast mailing list
> Icecast at xiph.org
> http://lists.xiph.org/mailman/listinfo/icecast



More information about the Icecast mailing list