Stream interference
  • I have been using airtime very successfully for about two years and I am very happy with it. Thank you so much for making this program opensource!

    However I have a problem with a new installation.

    We have one live feed coming from a microphone to the icecast server, at mountpoint /kaplica.mp3 using the program butt.

    The other mountpoint on icecast is the airtime stream, at /radio.mp3.

    Normally one can easily listen to either stream using VLC. However now there is a problem.

    From time to time we have a live stream on the scheduled program, thatis to say we simply add to the media library the mountpoint for
    /kaplica.mp3 as a stream and put it into the schedule. When the program starts, it streams this to the /radio.mp3 without any problems, or at least in the beginning.

    Everything seems to work well, but now for some reason /radio.mp3 is always written over by /kaplica.mp3 whenever the live stream is turned on. I have to shut down the source client to /kaplica.mp3 or it simply overwrites the airtime program.

    When I turn on the stream from butt, I see this in the pyro log. It is obvious that it is switching to the stream as it has a TRANSITION to live. However I never set up this transition. How to turn it off?  I don't want to transition especially when a program is already running.

    2015/02/02 13:07:02 [server:3] New client: localhost.  2015/02/02
    13:07:02 [server:3] Client localhost disconnected.  2015/02/02
    13:07:05 [decoder:3] Method "MAD" accepted "audio/mpeg".  2015/02/02
    13:07:05 [http:3] Decoding...  2015/02/02 13:07:05 [http:3] New
    metadata chunk: ? -- .  2015/02/02 13:07:09 [lang:3]
    /usr/lib/airtime/pypo/bin/liquidsoap_scripts/notify.sh -- webstream='{
    "source_url": "http://fsspx.pl:8000/kaplica.mp3" }' --media-id=11040 &
    2015/02/02 13:07:09 [lang:3] URL now http://fsspx.pl:8000/kaplica.mp3
    (change: true) 2015/02/02 13:07:09 [lang:3] New track inside HTTP
    stream 2015/02/02 13:07:09 [lang:3] status: connected
    http://fsspx.pl:8000/kaplica.mp3 2015/02/02 13:07:09 [lang:3] need to
    cross: false 2015/02/02 13:07:09 [lang:3] remaining inf sec before,
    inf sec after 2015/02/02 13:07:09 [switch_5592:3] Switch to cross_5586
    with transition.  2015/02/02 13:07:09 [lang:3] TRANSITION to live
    2015/02/02 13:07:09 [map_metadata_5594:3] Inserting missing metadata.
    2015/02/02 13:07:09 [lang:3] Using stream_format 2 2015/02/02 13:07:09
    [stdout:3] 2015/02/02 13:07:09 [stdout:3]
    ######################################### 2015/02/02 13:07:09
    [stdout:3] # *** pypo *** # 2015/02/02 13:07:09 [stdout:3] # pypo
    notification gateway # 2015/02/02 13:07:09 [stdout:3]
    ######################################### 2015/02/02 13:07:10 [lang:3]
    /usr/lib/airtime/pypo/bin/liquidsoap_scripts/notify.sh -- webstream='{
    "source_url": "http://fsspx.pl:8000/kaplica.mp3", "title": "" }'
    --media-id=11040 & 2015/02/02 13:07:10 [lang:3] URL now
    http://fsspx.pl:8000/kaplica.mp3 (change: false) 2015/02/02 13:07:10
    [lang:3] Using stream_format 2 2015/02/02 13:07:10 [stdout:3]
    2015/02/02 13:07:10 [stdout:3]
    ######################################### 2015/02/02 13:07:10
    [stdout:3] # *** pypo *** # 2015/02/02 13:07:10 [stdout:3] # pypo
    notification gateway # 2015/02/02 13:07:10 [stdout:3]
    ######################################### 2015/02/02 13:07:12
    [server:3] New client: localhost.  2015/02/02 13:07:12 [server:3]
    Client localhost disconnected.  2015/02/02 13:07:22 [server:3] New
    client: localhost.

    HEre is what I get when I turn off butt. It goes back to STATIC or what actually 
    should be on /radio.mp3.

    How to stop this behavior?

    2015/02/02 13:09:12 [server:3] New client: localhost.  2015/02/02
    13:09:12 [server:3] Client localhost disconnected.  2015/02/02
    13:09:18 [http:2] Feeding stopped: Mad.End_of_stream 2015/02/02
    13:09:20 [cross_5586:3] No next track ready yet.  2015/02/02 13:09:20
    [lang:3] /usr/lib/airtime/pypo/bin/liquidsoap_scripts/notify.sh
    --webstream='{ "source_url": "http://fsspx.pl:8000/kaplica.mp3" }'
    --media-id=11040 & 2015/02/02 13:09:20 [lang:3] URL now
    http://fsspx.pl:8000/kaplica.mp3 (change: false) 2015/02/02 13:09:20
    [lang:3] New track inside HTTP stream 2015/02/02 13:09:20 [lang:3]
    status: polling 2015/02/02 13:09:20 [lang:3] need to cross: false
    2015/02/02 13:09:20 [lang:3] remaining inf sec before, 0. sec after
    2015/02/02 13:09:20 [stdout:3] 2015/02/02 13:09:20 [stdout:3]
    ######################################### 2015/02/02 13:09:20
    [stdout:3] # *** pypo *** # 2015/02/02 13:09:20 [stdout:3] # pypo
    notification gateway # 2015/02/02 13:09:20 [stdout:3]
    ######################################### 2015/02/02 13:09:21
    [switch_5592:3] Switch to insert_metadata_5578 with transition.
    2015/02/02 13:09:21 [lang:3] TRANSITION to static 2015/02/02 13:09:21
    [map_metadata_5594:3] Inserting missing metadata.  2015/02/02 13:09:21
    [lang:3] Using stream_format 2 2015/02/02 13:09:22 [server:3] New
    client: localhost.  2015/02/02 13:09:22 [server:3] Client localhost
    disconnected.  2015/02/02 13:09:23 [dummy:3] Source failed (no more
    tracks) stopping output...  2015/02/02 13:09:23 [lang:3] Using
    stream_format 2 2015/02/02 13:09:32 [server:3] New client: localhost.
    2015/02/02 13:09:32 [server:3] Client localhost disconnected.
  • 9 Comments sorted by
  • Of course you could ( please read my explanation below before you decide)

    • set your logs to a lower level .most log level with follow some what (1-alerts,2-warn,3-debug..and so on...)
    • send the log to a file instead of stdout (standard output)
    • Just do not look at it,if it is gibberish.why stress.

    The disadvantage of most of that based on each pointers are

    • if something is wrong I cannot tell you or help you if something is wrong.This log is specific to airtime health
    • sometimes if you send to file and it do not have the proper write permissions then it Liquidsoap will lock up or crash as some people call it
    • Just my favourite joke

    So safely I would say leave it alone ,there are no need to look at it if you do not understand it Leave it to the  Techie not these so called "Genius at computers" - who can just manipulate user interfaces  

    Now look at my explanations below and let it be your Guide to solving any issues

    with airtime

    VOISSES

    Anyone reading this a find it funny about my grammar , I make no apology ,Go get a translator.
    "The Problem with education today is that it takes a university degree to switch on a light bulb"
    "You learn from your mistakes but wise people learn from others mistakes avoid Making mistakes there is not sufficient rooms to make them"
    "Innuendo","If's","Assumptions" and "Fear" are for politician.Who,What,where,When and How are for those seeking knowledge and care about Humanity.
    "I might be in Mud but that does not Make me a Wild Hog(pig)"
    “Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius — and a lot of courage to move in the opposite direction.”
    "The only thing that remains constant is change itself"
    May the force be with you,until our path or destiny bring us in tandem.
  • I will take a snapshot of your log and explain with an hash tag below

    13:07:05 [decoder:3] Method "MAD" accepted "audio/mpeg". 

    2015/02/0213:07:05 [http:3] Decoding...  2015/02/02 13:07:05 [http:3] New metadata chunk: ? -- . 


    # the method by which Airtime inform liquidsoap that there are some information to be processed are
    # for an Mp3  its   (determine the codec) ==>decode (look for any metadata) ===> Prepared (play it)
    #for a stream  its      ditto ==> ditto ==> connect (to The url)


    2015/02/02 13:07:09 [lang:3]/usr/lib/airtime/pypo/bin/liquidsoap_scripts/notify.sh -- webstream='{
    "source_url": "http://fsspx.pl:8000/kaplica.mp3" }' --media-id=11040 &

    #
    Ah notify airtime we have a stream, and its parameters and url are

    2015/02/02 13:07:09 [lang:3] URL now http://fsspx.pl:8000/kaplica.mp3
    (change: true)

    2015/02/02 13:07:09 [lang:3] New track inside HTTP
    stream


    # the two steps above are self explanatory ,this is the url and the metadata is inside

     2015/02/02 13:07:09 [lang:3] status: connected
     
     
    http://fsspx.pl:8000/kaplica.mp3 2015/02/02 13:07:09 [lang:3] need to
    cross: false

    2015/02/02 13:07:09 [lang:3] remaining inf sec before,
    inf sec after

    2015/02/02 13:07:09 [switch_5592:3] Switch to cross_5586
    with transition.

    # Ah now connect to it  and since there is something else going on lets fade it down and

    2015/02/02 13:07:09 [lang:3] TRANSITION to live
    2015/02/02 13:07:09 [map_metadata_5594:3] Inserting missing metadata.

    #transition start using that data  and its tags 

    2015/02/02 13:07:09 [lang:3] Using stream_format 2 2015/02/02 13:07:09
    [stdout:3]

    #Now we are full connected  lets give it a name reference inform liquidsoap that our client connected and then disconnect

    #as we do not need to hang around but monitor the connections

    Note that the time stamps are almost the  same and unless you are queuing mp3 which have a  method (pull of 10 seconds by default)

    Obviously you will see a number of connections and disconnects (monit) each couple of seconds to monitor we are always there connected

    The key is that we are pushing a number of things which are held in the queues and we must monitor them

    As i said there is no need to worry about the logs "if it is not broken do not fixed it"

    VOISSES

    Go Pats
    We are Patriots

    Anyone reading this a find it funny about my grammar , I make no apology ,Go get a translator.
    "The Problem with education today is that it takes a university degree to switch on a light bulb"
    "You learn from your mistakes but wise people learn from others mistakes avoid Making mistakes there is not sufficient rooms to make them"
    "Innuendo","If's","Assumptions" and "Fear" are for politician.Who,What,where,When and How are for those seeking knowledge and care about Humanity.
    "I might be in Mud but that does not Make me a Wild Hog(pig)"
    “Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius — and a lot of courage to move in the opposite direction.”
    "The only thing that remains constant is change itself"
    May the force be with you,until our path or destiny bring us in tandem.
  • The problem is that it is broken!

    The log is to show that airtime interrupts the STATIC program schedule to insert a LIVE stream when there is no reason for it to do so. Immediately as I turn on the other mount point in icecast it interrupts the airtime mount. 

    How to disable this?


  • Read what I say about the transition

    Even if Airtime has nothing schedule its still has a static file called default which is a low noise it must transitions to LIVE there is no way you can stop it.

    Liquidsoap has to either start from scratch or have a daemon process running to pull requestt

    Windows use Sockets (they never show you what happen
    Linux use daemon


    You need two mounts in your Icecast xml

    <mount>
     
    <mount-name>/radio</mount-name> 

     
    <hidden>0</hidden> 

     
    </mount>

    <mount> 

    <mount-name>/kaplica</mount-name> 

     
    <hidden>0</hidden> 

     
    </mount>


    I went to the trouble of explaining the logs to you and told you what is there is normal.

    I also did that for all who hate the logs to explain that there is so
    much information in there and if you do not understand it  leave it
    alone

    You are only creating Havoc for yourself.


    No its not broken.

    Nobody Here will with the current layout be able to suggest otherwise.
    What i wanted was time to analysis what you said and give you a solution

    Please note you do not need the extensions on mp3 mounts like this /kaplica.mp3,Icecast by default knows this so use /kaplica instead

    /kaplica is a client or what is known as an harbour it cannot be listen to by itself it has to be sent directly to or via something else (in this case Airtime ) to a server

    The explanation is below

    As I said if you want to spend time complaining do this
    which is not a solution

    sudo gedit /usr/lib/airtime/pypo/bin/liquidsoap_scripts/ls_script.liq

    Then at the top put this

    set("log.level",1)

    then restart

    sudo service airtime-liquidsoap stop

    I use stop to start having them disappear  but you could use restart


    VOISSES







    Anyone reading this a find it funny about my grammar , I make no apology ,Go get a translator.
    "The Problem with education today is that it takes a university degree to switch on a light bulb"
    "You learn from your mistakes but wise people learn from others mistakes avoid Making mistakes there is not sufficient rooms to make them"
    "Innuendo","If's","Assumptions" and "Fear" are for politician.Who,What,where,When and How are for those seeking knowledge and care about Humanity.
    "I might be in Mud but that does not Make me a Wild Hog(pig)"
    “Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius — and a lot of courage to move in the opposite direction.”
    "The only thing that remains constant is change itself"
    May the force be with you,until our path or destiny bring us in tandem.

  • Ok Lets forget what worked yesterday we are in a changing world lets adopt or pop
    so lets analysis


    We have one live feed coming from a microphone to the icecast server, at mountpoint /kaplica.mp3 using the program butt.
    The other mountpoint on icecast is the airtime stream, at /radio.mp3.


    you mean
    listener A is listening on mount /kaplica.mp3
    listener B is listening on mount /radio.mp3


    This imply you need two mount point (you cannot listen to kaplica without sending it to a server


    Normally one can easily listen to either stream using VLC. However now there is a problem.

    How without sending to a server or mount point?

    From time to time we have a live stream on the scheduled program,

    that is to say we simply add to the media library the mountpoint for /kaplica.mp3 as a stream and put it into the schedule.


    I am not too clear on this.

    You can only send /kaplica.mp3 to a server or use it as an harbor (to which it must connect to either Airttime Stream as Master or Show)

    If you want to use it in the media library it must first send to a server and then pull as a webstream which is totally redundant




    So at this stage  you have only one stream mount  listener B  listening on mount /radio.mp3
    Since /kaplica.mp3 is coming from the client (or what is technically called an harbour) butt (you cannot listen to it by itelf) it needs a server.
    by putting it to Airtime,Airtime serve as the portal to send to /radio.mp3

    Listener A therefore cannot hear anything


    When the program starts, it streams this to the /radio.mp3 without any problems, or at least in the beginning.

    ok



    Everything seems to work well, but now for some reason /radio.mp3 is always written over by /kaplica.mp3 whenever the live stream is turned on. I have to shut down the source client to /kaplica.mp3 or it simply overwrites the airtime program.

    Yes you do because  as said before only one mount is available

    Solution

    You need to make at least two separate mount in icecast

    <mount>
     
    <mount-name>/radio</mount-name>  
     
    <hidden>0</hidden>  
     
    </mount>

    <mount>  
    <mount-name>/kaplica</mount-name>  
     
    <hidden>0</hidden>  
     
    </mount>


    You can also  use a fallback which is outside the scope of this question


    VOISSES
    I am tired
    of this snow


    Post edited by Voisses Tech at 2015-02-02 15:21:12
    Anyone reading this a find it funny about my grammar , I make no apology ,Go get a translator.
    "The Problem with education today is that it takes a university degree to switch on a light bulb"
    "You learn from your mistakes but wise people learn from others mistakes avoid Making mistakes there is not sufficient rooms to make them"
    "Innuendo","If's","Assumptions" and "Fear" are for politician.Who,What,where,When and How are for those seeking knowledge and care about Humanity.
    "I might be in Mud but that does not Make me a Wild Hog(pig)"
    “Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius — and a lot of courage to move in the opposite direction.”
    "The only thing that remains constant is change itself"
    May the force be with you,until our path or destiny bring us in tandem.
  • There are two separate mounts with the entries you have described. This is not the problem. The problem is that as soon as butt is launched it interferres with the second mount. 

    mount A: butt client
    mount B: airtime/pypo client

    mount B without A == works well, but no mount a
    mount A by itself == works well
    mount A with B --> airtime takes audio from butt 

    There are different passwords for each and the client cannot join on the other mount, but for some reason airtime wants to use mount A whenever it is active.

    How to change airtime so that it doesn't pick up the live feed?
  • To make it perfectly clear, the icecast server has 2 mounts. This is not the problem. The problem is that whenever the first client connects, airtime picks up the sound from that mount instead of publishing what it already has. It transitions from program to live for some reason.
  • Set up  If this is not your  setup outline the other senario

    ********************************************************************************
    Client /Harbor
    mount A: butt client  (push to /kaplica)  This is an harbor
    mount B: airtime/harbour  (/radio).I correct this because Airtime is technically an harbor  


    Icecast Server


    mount A (/kaplica) http://localhost:port1/kaplica.m3u

    mount B (/radio)  http://localhost:port1/radio.m3u
    *****************************************************************
    Lets take you decisions base on a case by case basis

    Your conditions start at Case1 through Case 3 but Case 0 is ideal


    Case 0  the ideal case to listen both as I recommended

    mount B  and  mount A == will works well if treated seperately,

    When  Client A is connected to Server A (/kaplica) and Client B (/radio)  is connected to
    mount A (/kaplica) http://localhost:port1/kaplica.m3u and mount B (/radio)  http://localhost:port1/radio.m3u respectively
     
    Both are connected to a Separate Server Mount (A & B respectively) both are Available (condition True)

    listeners will hear both [(/kaplica) http://localhost:port1/kaplica.m3u] and [mount B (/radio)  http://localhost:port1/radio.m3u] using their media player like VLC

    Case 1 - mount B without A == works well, but no mount a  [This is basically  Client B by itself

    Client B  is connected to Server B (/radio) and Client A is not connected
    both are not connected (condition False)  

    listeners will hear only [mount B (/radio)  http://localhost:port1/radio.m3u] using their media player like VLC
    mount A (/kaplica) http://localhost:port1/kaplica.m3u is not connected nothing to be heard

    Case 2 - mount A by itself == works well

    Client A  is connected to Server A (/radio) and Client B is not connected
    both are not connected (condition False)  

    listeners will hear only mount A (/kaplica) http://localhost:port1/kaplica.m3u using their media player like VLC

    [mount B (/radio)  http://localhost:port1/radio.m3u]&nbsp; is not connected nothing to be heard

    If Listener are hearing [mount B (/radio)  http://localhost:port1/radio.m3u] its either a nasty loop you have created or you have a fallback mount which you have not indicated see also below


    Case 3 mount A with B --> airtime takes audio from butt

    When  Client A is connected to Client B (Airtime)  and Client B (Airtime) is connected to Server B (/radio)

    Only One mount [mount B (/radio)] are in Play here. Server mount B (/radio) is responsible for both clients/harbor (condition False)

    Anybody listen on mount B (/radio)  http://localhost:port1/radio.m3u will hear using their media player like VLC
    Anybody listen on mount A (/kaplica) will here nothing (narda) its being routed by Airtime it result in the false condition

    mount A (/kaplica) http://localhost:port1/kaplica.m3u is not connected

    Now  the harbor will be Available to the listen based on the order of connection to Airtime

    If client A is connected to Airtime master you will only hear Client A at mount B (/radio)  http://localhost:port1/radio.m3u

    Client A cannot be put in as a webstream its an harbor it needs a Sever hence you nee something like this http://localhost:port1/kaplica.m3u

    So even if you put http://localhost:port1/kaplica.m3u in the webstream (media library) you have just created a loop of the same server mount

    mount A (/kaplica) http://localhost:port1/kaplica.m3u will be routed through mount B (/radio)  http://localhost:port1/radio.m3u

    and I guess this is what is happening to you


    Now solutions put mount A and mount B  on separate Mounts icecast can listen on multiple ports (see listening directives)

    mount A (/kaplica) http://localhost:port1/kaplica.m3u

    mount B (/radio)  http://localhost:port2/radio.m3u

    At no time should you either schedule mount A as a webstream in the media it will loop
    Yes you can preview it by listening to the little speaker icon beside the web stream  but once you schedule it ,http://localhost:port1/kaplica.m3u, you have just created a nasty loop and prepare for the consequences
    But do I need to mention putting it through the master/show in fact,you must see that you are repeating your self and that is not the real purpose of master/show

    Please note this has nothing to do with Airtime Logs You Logs Are Perfectly 100% correct Leave it alone and focus on your Configuration

    The Logs are just showing you the symptoms of your folly

    Get Dia and put your configuration and a flow chart you will see this

    I hope I have even put you on the right road,when you get to the next Gas station Ask for directions or you be lost(just some gibberrish,)

    As you know, I hear
    VOISSES

    Post edited by Voisses Tech at 2015-02-03 09:28:47
    Anyone reading this a find it funny about my grammar , I make no apology ,Go get a translator.
    "The Problem with education today is that it takes a university degree to switch on a light bulb"
    "You learn from your mistakes but wise people learn from others mistakes avoid Making mistakes there is not sufficient rooms to make them"
    "Innuendo","If's","Assumptions" and "Fear" are for politician.Who,What,where,When and How are for those seeking knowledge and care about Humanity.
    "I might be in Mud but that does not Make me a Wild Hog(pig)"
    “Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius — and a lot of courage to move in the opposite direction.”
    "The only thing that remains constant is change itself"
    May the force be with you,until our path or destiny bring us in tandem.
  • But your Answer lies in either

        Two Separate Mounts which you stated you have done
        Three Seperate Mounts  with fallback in this order

    /radio fallback to /live fallback to /kaplica to /stream

        your listeners will listen to the at /radio  ie. http://localhost:port1/radio.m3u
        if a live feed (say an outside) ,they are send to /live the listener will now hear that live dj but will still connected to radio (you can preview the dj at http://localhost:port1/live.m3u )
        If you are using the microphone you are send to /kaplica the listener will now hear that studio but will still connected to radio (you can preview the dj at http://localhost:port1/kaplica.m3u )
        If you have no live dj (/live is nearer to the listener so once its connected it will take precedent) and not using the studio you are send to the /stream ie airtime

    Notice that the order of the mounts take precedent and so if a live dj is connected,you hear them over all previous fallback (studio and airtime)

    This effect is best serve by using the master and show of Airtime

    Where the studio is connected to the master and all dj are schedule through show and can only be heard when they are schedule

    Good Luck

    Voisses

    Anyone reading this a find it funny about my grammar , I make no apology ,Go get a translator.
    "The Problem with education today is that it takes a university degree to switch on a light bulb"
    "You learn from your mistakes but wise people learn from others mistakes avoid Making mistakes there is not sufficient rooms to make them"
    "Innuendo","If's","Assumptions" and "Fear" are for politician.Who,What,where,When and How are for those seeking knowledge and care about Humanity.
    "I might be in Mud but that does not Make me a Wild Hog(pig)"
    “Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius — and a lot of courage to move in the opposite direction.”
    "The only thing that remains constant is change itself"
    May the force be with you,until our path or destiny bring us in tandem.