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