Hi Romain,
Thank you for the answer.
I'm trying out your suggestion, but as I'm doing it, I came up with another
question.
When live dj connects to one of input.harbor, liquidsoap switches and
everthing, but when dj dissconnects,
the default source, continues playing from the point where it got
overridden.
For example, default source was playing 4 mins track and like dj connect to
input.harbor at 2 min mark.
After 1 min, live dj disconnects. Liquidsoap should fall back to 3 min mark
on the default source, but it plays from 2 min mark.
What should I do so it would play from 3 min mark?
Thank you.
On Fri, Mar 2, 2012 at 10:50 PM, Romain Beauxis <[email protected]>wrote:
> Hi James!
>
> Le 2 mars 2012 18:19, James Moon <[email protected]> a écrit :
> > Here is what we try to achieve with liquidsoap(for now at least).
> > We want to use two input.harbor with default stream source.
> > Below is our code:
> > .
> > .
> > .
> > default = amplify(0.00001, noise())
> > default = rewrite_metadata([("artist","Airtime"), ("title",
> > "offline")],default)
>
> Nice idea to use low-level noise for default fallback! :-)
>
> > set("harbor.bind_addr", "0.0.0.0")
> > .
> > .
> > .
> > master_dj = ref default
> > dj_live = ref default
> >
> > def append_master_dj_input(master_harbor_input_port,
> > master_harbor_input_mount_point, s) =
> > if master_harbor_input_port != 0 and master_harbor_input_mount_point
> !=
> > "" then
> > master_dj := input.harbor(master_harbor_input_mount_point,
> > port=master_harbor_input_port, auth=check_master_dj_client,
> > buffer=7.,max=15.)
> > fallback(track_sensitive=false, [!master_dj, s])
> > else
> > s
> > end
> > end
> >
> > def append_dj_input(dj_harbor_input_port, dj_harbor_input_mount_point,
> s) =
> > if dj_harbor_input_port != 0 and dj_harbor_input_mount_point != ""
> then
> > dj_live := input.harbor(dj_harbor_input_mount_point,
> > port=dj_harbor_input_port, auth=check_dj_client, buffer=7.,max=15.)
> > fallback(track_sensitive=false, [!dj_live, s])
> > else
> > s
> > end
> > end
> >
> > s = fallback(track_sensitive=false, [queue, default])
> > s = on_metadata(notify, s)
> > s = map_metadata(append_title, s)
> > s = append_dj_input(dj_live_stream_port, dj_live_stream_mp, s)
> > s = append_master_dj_input(master_live_stream_port,
> master_live_stream_mp,
> > s)
> > .
> > .
> > .
> > output.dummy(fallible=true, !master_dj)
> > output.dummy(fallible=true, !dj_live)
> >
> >
> > I'm doing master_dj = ref default and dj_live = ref default so I can put
> > them into output.dummy later on.
> > If I knew how to create a reference to 'source' object I would do that,
> but
> > I'm not sure. So I'm just creating dummy ref so I can use it later.
> >
> > Here are my problems:
> >
> > 1. When input stream is connected to one of the input.harbor, I'm get
> about
> > 3~4 secs of silence. This means LS is detecting the connection, but the
> > source is not playing right away.
> > I'm suspecting it's something to with buffer? How do we make it so it
> plays
> > as soon as it switch? or switch whenever it's ready to play.
>
> Yeah, you might want to play with input.harbor's buffer/max
> paramaters. If you set buffer to a low value it should start playing
> right away. However, in this case you might be subject to buffer
> underruns in case of temporary network issues.
>
> > 2. when I restart liquidsoap, when 2 input stream is still connected, it
> > logs crazy amount of "Buffer overrun" message in the log file. How do you
> > solve this?
>
> Using output.dummy to drain input.harbor is a very good idea, however,
> you're doing it wrong here :-)
>
> When those lines are executed:
>
> output.dummy(fallible=true, !master_dj)
> output.dummy(fallible=true, !dj_live)
>
> master_dj and dj_live still reference the default source so you are
> only creating output.dummy(default) twice. This is because
> output.dummy uses the source currenty referenced and is not updated
> when the reference changes..
>
> What you should do instead is wrap output.dummy calls just after the
> input.harbor creation, using a dummy initial output (Note: this could
> be more elegant if there was a option type in liq, i.e. the possiblity
> to do x = ref nul and if !x == nul..)
>
> Here's an example:
>
> master_dj_drain = ref output.dummy(default)
>
> def append_master_dj_input(master_harbor_input_port,
> master_harbor_input_mount_point, s) =
> if master_harbor_input_port != 0 and
> master_harbor_input_mount_point != "" then
> master_dj = input.harbor(master_harbor_input_mount_point,
> port=master_harbor_input_port, auth=check_master_dj_client,
> buffer=7.,max=15.)
>
> # Drain this new source
> source.shutdown(!master_dj_drain)
> master_dj_drain := output.dummy(master_dj, fallible=true)
>
> fallback(track_sensitive=false, [master_dj, s])
> else
> s
> end
> end
>
> That being said, if the append_master_dj_input function is meant to be
> called only once then you do not have to worry about memory leaks and
> you can do:
>
> def append_master_dj_input(master_harbor_input_port,
> master_harbor_input_mount_point, s) =
> if master_harbor_input_port != 0 and
> master_harbor_input_mount_point != "" then
> master_dj = input.harbor(master_harbor_input_mount_point,
> port=master_harbor_input_port, auth=check_master_dj_client,
> buffer=7.,max=15.)
>
> # Drain this new source
> ignore(output.dummy(master_dj, fallible=true))
>
> fallback(track_sensitive=false, [master_dj, s])
> else
> s
> end
> end
>
> I've not tested the code above, but I believe it should be alright :-)
>
> Romain
>
--
James Moon
Software Developer, Sourcefabric
[email protected]
www.sourcefabric.com | *www.sourcefabric.org*
720 Bathurst St. Suite 203
M5S 2R4, Toronto, ON, Canada
------------------------------------------------------------------------------
Try before you buy = See our experts in action!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-dev2
_______________________________________________
Savonet-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/savonet-users