[Icecast] Custom Hooks

Philipp Schafft phschafft at de.loewenfelsen.net
Fri Nov 9 11:19:43 UTC 2018


Good Afternoon,


On Fri, 2018-11-09 at 23:53 +1300, jake wrote:
> Yeah it is a tad gross but here is my first (and probably only) attempt:

See a few comments inline. :)

> ---------------- 8< ----------------
> #!/bin/bash
> 
> pipe=/tmp/testpipe

There are tools to make tempfiles such as mktemp(1). You can also
consider using $$.

> 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 &

I'm not sure if this is the way to go, reading it's stdout that is. The
use of -slave is already a big step. Please also note the comments on
-playlist's safety.


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

Is there a reason you did not try somthing like this (more classic
pattern)?

while read line
do
        printf "%s" "$line"
        /bin/dothing "$line"
done < "$pipe"


> 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< ----------------

I think the problem here is that mplayer does provide the metadata in
different formats depending on wich part does provide them and how it
provides them. So the format will be different for different streams.


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

Thank you for sharing your concept with the list.

With best regards,


> 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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 490 bytes
Desc: This is a digitally signed message part
URL: <http://lists.xiph.org/pipermail/icecast/attachments/20181109/820b6e65/attachment.sig>


More information about the Icecast mailing list