Hi all,

A possibly simpler solution -- specially if you only stream in your
own home -- could be to let liquidsoap also be the icecast server
using output.harbor. The output has on_connect/on_disconnect callbacks
that would be quite simple to use to count the number of listeners and
make whatever change you see fit in your streams accordingly..

Romain

2015-05-29 15:47 GMT-05:00 Alex LaBranche <[email protected]>:
> there are similar functions that are built into wowza server that behave this 
> way when using a source/edge setup. the edge server will sit idle until a 
> request is made (tune in), then it will pull from the source server. when 
> there are no more listeners connected to that particular stream, it will 
> disconnect.
>
> the problem you might run into here is with icecast (from what i can 
> remember) if there are no sources connected, you cant connect to the stream, 
> thus there is no way your stats will ever read more than 0 until a source 
> stream is provided.
>
> generally if your on a home ISP, the bandwidth used is very low… if this is 
> all over local LAN the network usage is also negligible... and reading a 
> single file for playback wont be thrashing a hard drive (unless the drive is 
> going bad or the file is huge and you have lots of other processes that are 
> heavy on disk i/o). the correct process would be to load the track into 
> memory and serve from there.
>
> since you are sourcing a stream out on the internet, why not simply tune in 
> directly to that stream from the node? when you are not listening, its not 
> using any bandwidth.
>
> if you are concerned about multiple nodes being tuned in at the same time, 
> you can set up a local relay (as it looks like thats what you’ve done with 
> liquidsoap.
>
> basically you would only need to tell liquidsoap ‘i want to start listening 
> now’, in one way or another so it will start pulling from the remote stream.
>
> its easy enough to write a script (or use one of the many out on the 
> internets) to check the listener stats of an icecast server and have 
> liquidsoap disconnect if there are 0 listeners. but off the top of my head 
> the best way to accomplish starting the stream when there are 0 listeners and 
> you want to listen is to manually tell liquidsoap to start or switch to a 
> live stream.  such as a http GET request or a telnet command or whatever…
>
>
> hope this helps a little… let us know what you come up with =]
>
> cheers
>
>
>> On May 29, 2015, at 12:08 PM, Detrick Merz <[email protected]> wrote:
>>
>> Ah yes, it makes sense but is different from what I'm trying to do. I
>> have an input stream or playlist that is (effectively) always
>> available. That gets output out to a different icecast2 server.
>> Ideally I'd like to temporarily stop the input stream or playlist and
>> switch to something generated (maybe using the noise() or say()
>> function) whenever the number of listeners connected to my icecast2
>> server drops to 0. No sense in wasting bandwidth by staying connected
>> to an input.http() stream, or in thrashing a disk playing a local
>> file, when there isn't actually anyone listening to it.
>>
>> Newer versions of icecast2 provide some nice status data in json
>> format. My current thought is to use something like
>> of_json(http.get("http://127.0.0.1:8000/status-json.xsl";)), parse out
>> the "listeners":1, field, then make a decision in liquidsoap based on
>> the value of that field. Of course I've oversimplified the
>> of_json(http.get()) use, it doesn't exactly work like that ...
>> http.get returns headers and such besides the json data, so that
>> result would need to be filtered a bit before being sent to of_json().
>> I haven't quite wrapped my head around parsing the result from the
>> http.get() yet, but it'll come.
>>
>> On Fri, May 29, 2015 at 2:50 PM, Sarah k Alawami <[email protected]> wrote:
>>> Yeah. I modified the code in the cook book, section on harbor mount, to 
>>> suit my needs. So for me I have it branching in to 3, one day 4, streams 
>>> when I go live, then fall back to my playlist which is on a constant loop. 
>>> That playlist also branches out to the 3 streams.
>>>
>>> I hope that makes sence.
>>>> On May 29, 2015, at 11:42 AM, Detrick Merz <[email protected]> wrote:
>>>>
>>>> If I understand right, your example will default to playing the live
>>>> stream, but fallback to the playlist if the live stream stops coming
>>>> in. Does that seem right?
>>>>
>>>> tnx de detrick
>>>>
>>>> On Tue, May 26, 2015 at 6:29 PM, Sarah k Alawami <[email protected]> 
>>>> wrote:
>>>>> Ok, what I did was set up a harbor  stream. here's my code with passwords
>>>>> changed of corse.
>>>>>
>>>>> pasted.co/d63e0c67.
>>>>>
>>>>> On May 26, 2015, at 3:22 PM, Detrick Merz <[email protected]> wrote:
>>>>>
>>>>> In my case, I have a liquidsoap+icecast2 server. Liquidsoap presently
>>>>> uses an Internet stream as an input, and outputs to icecast. Nodes
>>>>> within my house connect to my local icecast server. When no nodes are
>>>>> connected it seems like it would be polite to also have Liquidsoap
>>>>> stop using the Internet stream as an input (since no humans are
>>>>> actually listening to the stream).
>>>>>
>>>>> My thought would be something like switching to noise() or say(), or
>>>>> something else that doesn't access the disk repeatedly, whenever the
>>>>> number of listeners drops to 0. When at least one listener is
>>>>> connected, switch back to re-streaming the Internet stream.
>>>>>
>>>>> On Tue, May 26, 2015 at 6:00 PM, Sarah k Alawami <[email protected]> 
>>>>> wrote:
>>>>>
>>>>> do you mean switch to an automation stream? or what. Can you  maybe give 
>>>>> us
>>>>> an example of  what you want to do? Iv'e never heard of this but that does
>>>>> not mean it's not out there.
>>>>>
>>>>> Take care.
>>>>>
>>>>> On May 26, 2015, at 2:06 PM, Detrick Merz <[email protected]> wrote:
>>>>>
>>>>> Before I go trying to reinvent the wheel, does anyone have a code
>>>>> snippet that will default to noise() or something when the number of
>>>>> active listeners drops to 0? It seems like the json status that newer
>>>>> versions of icecast2 have should make this possible if I'm thinking
>>>>> about it right.
>>>>>
>>>>> Thanks,
>>>>>
>>>>> -detrick
>>>>>
>>>>> ------------------------------------------------------------------------------
>>>>> _______________________________________________
>>>>> Savonet-users mailing list
>>>>> [email protected]
>>>>> https://lists.sourceforge.net/lists/listinfo/savonet-users
>>>>>
>>>>>
>>>>>
>>>>> ------------------------------------------------------------------------------
>>>>> _______________________________________________
>>>>> Savonet-users mailing list
>>>>> [email protected]
>>>>> https://lists.sourceforge.net/lists/listinfo/savonet-users
>>>>>
>>>>>
>>>>> ------------------------------------------------------------------------------
>>>>> _______________________________________________
>>>>> Savonet-users mailing list
>>>>> [email protected]
>>>>> https://lists.sourceforge.net/lists/listinfo/savonet-users
>>>>>
>>>>>
>>>>>
>>>>> ------------------------------------------------------------------------------
>>>>>
>>>>> _______________________________________________
>>>>> Savonet-users mailing list
>>>>> [email protected]
>>>>> https://lists.sourceforge.net/lists/listinfo/savonet-users
>>>>>
>>>>
>>>> ------------------------------------------------------------------------------
>>>> _______________________________________________
>>>> Savonet-users mailing list
>>>> [email protected]
>>>> https://lists.sourceforge.net/lists/listinfo/savonet-users
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> _______________________________________________
>>> Savonet-users mailing list
>>> [email protected]
>>> https://lists.sourceforge.net/lists/listinfo/savonet-users
>>
>> ------------------------------------------------------------------------------
>> _______________________________________________
>> Savonet-users mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/savonet-users
>
>
> ------------------------------------------------------------------------------
> _______________________________________________
> Savonet-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/savonet-users

------------------------------------------------------------------------------
_______________________________________________
Savonet-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/savonet-users

Reply via email to