Open SpeedyCharly opened 2 months ago
Hi @SpeedyCharly,
Let me retell your story.
Am I correct?
@vitoyucepi
Sounds about right save for points 3 & 4 ; client doesn't actually disconnect from the server - it's a simple case of a bit of dead air when DJ is slow to open mike at end of song or some such... We're running Sam Broadcaster and it doesn't actually disconnect event when AutoDj kicks in when the buffer is depleted. Normal operations, with buffer reset, resumes as soon as operator resumes streaming... We don't need to restart the encoder unless we exceed the app's timeout.
Hi @SpeedyCharly, I still don't understand the concept of dead air, especially I'd like to understand how it works from a data transfer perspective. Maybe you can record a demo track and annotate it? By the way, can you run a standalone liquidsoap server with a custom script?
Dead air is typically silence in the delay time between the end of a song and the dj turning on his mike, or any other delay between operations. The client is still connected but nothing is being transmitted to the server. Which is the main reason we have a buffer to begin with, or else we'd be disconnected all the time.
And no, I don't have the space on my server to run anything else but my Azuracast installation... radio on a shoestring here...
Here's how I figure this is happening; • Buffer is initially set at 30 secs. [on my station] • Dead air occurs [Client connected but no data stream] > LS starts to count down from 30 while buffer empties. • Let's say client resumes sending after 10 seconds > LS will buffer for the remaining 20 secs. then resume streaming [no gap at listener end] New buffer length is now 20 secs. • More dead air will result in further erosion of the buffer time until it reaches 0 where AutoDj will kick in with a song from playlist. • If stream resumes quickly, the client won't have time to disconnect and LS will buffer again for the full 30 seconds before outputting the stream. • Longer gaps will disconnect the client which will have to be reset to return to air...
Am I wrong anywhere on this?
Hi @SpeedyCharly, I feel like this is an expected way of functioning. As for your problem, I'm theorizing about the behavior similar to the Twitch disconnect protection screen that displays a placeholder image when the streamer is not connected before going offline.
Description
Posted this as a bug, then as discussion on the Azuracast Forum [https://github.com/AzuraCast/AzuraCast/issues/7433] but it didn't attract the attention I had hoped... [Buster later stated it was likely an LS issue]
Wondering if anyone else has experienced this;
For a long while now, we've been having live streamers getting disconnected for a few seconds without warning following a tiny bit of dead air (usually slight delay in switching to mike after a song). This typically occurs once or twice over the course of their broadcast. Such delays are not usually long enough for the streaming app to go off air. On such occasions, Autodj automatically kicks in with a song that will stop playing as soon as the stream comes back after the little bit of dead air ends.
Looking to the logs was not giving us any obvious clues as to what was happening, so I decided to do some experimentation to hopefully discover what was happening. I would intentionally create little bits of dead air, and, after about 10 or 12 such bits the Autodj would kick in until I resumed streaming (all without having to reconnect as the encoder would stay alive during such a short delay).
After a few times doing this, I started noticing that the buffer delay was getting shorter after each such little bit of dead air. Starting at 30 seconds, it would erode all the way to zero at which time the Autodj would kick in on the next bit of dead air.
I don't remember exactly on which release it started doing this, but it seems to me it wasn't always so; the delay would remain at 30 secs or whatever time you would set the buffer at.
I've included a bit of LS log showing one such occasion where the streamer was dropped - I personally don't see a clue to a solution, but you guys might...
As always, thank you for your hard work and for such a great app Speedy Charly
Steps to reproduce
Stated above...
Expected behavior
There is no reason that little bits of dead air should erode the buffer down to zero, it should remain constant. In fact this is a fairly recent issue that didn't exist in previous versions...
Liquidsoap version
Liquidsoap build config
Installation method
From official container image
Additional Info
LS Log;
024/09/09 17:44:56 [harbor:4] Request to update metadata for mount / on port 8005 2024/09/09 17:44:56 [lang:3] API auth - Sending POST request to 'http://127.0.0.1:6010/api/internal/1/liquidsoap/auth' with body: { "user": "XXX", "password": "YYYY" } 2024/09/09 17:44:57 [lang:3] API auth - Response (200): true 2024/09/09 17:44:57 [harbor:4] Client logged in. 2024/09/09 17:44:57 [input_streamer:3] New metadata chunk ? -- Honoré Godbout - Y'a trop d'amour autour de moi - Speedy en ondes. 2024/09/09 17:45:01 [lang:3] API feedback - Sending POST request to 'http://127.0.0.1:6010/api/internal/1/liquidsoap/feedback' with body: {"title":"Honoré Godbout - Y'a trop d'amour autour de moi - Speedy en ondes"} 2024/09/09 17:45:01 [server:4] New client unix socket "". 2024/09/09 17:45:01 [server:4] Client unix socket "" disconnected. 2024/09/09 17:45:01 [lang:3] API feedback - Response (200): true 2024/09/09 17:46:01 [server:4] New client unix socket "". 2024/09/09 17:46:01 [server:4] Client unix socket "" disconnected. 2024/09/09 17:47:01 [server:4] New client unix socket "". 2024/09/09 17:47:01 [server:4] Client unix socket "" disconnected. 2024/09/09 17:48:01 [server:4] New client unix socket "". 2024/09/09 17:48:01 [server:4] Client unix socket "" disconnected. 2024/09/09 17:48:38 [input_streamer:4] End of track
!! Delay in opening mike at end of song >> switch to Autodj immediately - no buffer left! !! 2024/09/09 17:48:38 [input_streamer:4] Buffer emptied, buffering needed.
Of course, it got eroded to zero 2024/09/09 17:48:38 [live_fallback:3] Switch to ladspa with forgetful transition. 2024/09/09 17:48:38 [source:4] Source replay_metadata.159 gets down. 2024/09/09 17:48:38 [source:4] Source replay_metadata.160 gets up with content type: {audio=pcm(stereo)}. 2024/09/09 17:48:38 [replay_metadata.160:3] Content type is {audio=pcm(stereo)}. 2024/09/09 17:48:38 [next_song:4] Remaining 0 requests 2024/09/09 17:48:38 [next_song:3] Prepared "/var/azuracast/stations/radio_des_festivals/media/Country Anglo/Freddy Fender - Sweet Summer Day.mp3" (RID 2687). 2024/09/09 17:48:38 [request.2687:4] Currently on air. 2024/09/09 17:48:38 [lang:3] API nextsong - Sending POST request to 'http://127.0.0.1:6010/api/internal/1/liquidsoap/nextsong' with body: 2024/09/09 17:48:38 [lang:3] API feedback - Sending POST request to 'http://127.0.0.1:6010/api/internal/1/liquidsoap/feedback' with body: {"song_id":"d867c90e776a3afebe1b8e122fb38f2a","artist":"Dani","title":"Un p'tit boy c'est gentil (1970)","playlist_id":"17","mediaid":"19267"} 2024/09/09 17:48:38 [lang:3] API nextsong - Response (200): annotate:title="A.L L.A",artist="Éric Morel",duration="173.61",song_id="4b2f87ba02a7360a719db709764945cd",media_id="19024",playlist_id="21":media:Vedette/éricmorel-a.ll.a.mp3 2024/09/09 17:48:38 [request.2688:4] Pushed ["annotate:title="A.L L.A",artist="Éric Morel",duration="173.61",song_id="4b2f87ba02a7360a719db709764945cd",media_id="19024",playlist_id="21":media:Vedette/éric_morel-a.l_l.a.mp3";...]. 2024/09/09 17:48:38 [request.2688:4] Resolving "annotate:title="A.L _ L.A",artist="Éric Morel",duration="173.61",song_id="4b2f87ba02a7360a719db709764945cd",media_id="19024",playlist_id="21":media:Vedette/éricmorel-a.ll.a.mp3" (timeout 20s)... 2024/09/09 17:48:38 [request.2688:4] Pushed ["media:Vedette/éric_morel-a.l_l.a.mp3";...]. 2024/09/09 17:48:38 [request.2688:4] Resolving "media:Vedette/éricmorel-a.ll.a.mp3" (timeout 20s)... 2024/09/09 17:48:38 [request.2688:4] Pushed ["/var/azuracast/stations/radio_des_festivals/media/Vedette/éric_morel-a.l_l.a.mp3";...]. 2024/09/09 17:48:38 [decoder.video.metadata:4] Unsupported MIME type for "/var/azuracast/stations/radio_des_festivals/media/Vedette/éricmorel-a.ll.a.mp3": audio/mpeg! 2024/09/09 17:48:38 [decoder.ogg.metadata:4] Unsupported MIME type for "/var/azuracast/stations/radio_des_festivals/media/Vedette/éric_morel-a.l_l.a.mp3": audio/mpeg! 2024/09/09 17:48:38 [decoder.image.metadata:4] Unsupported MIME type for "/var/azuracast/stations/radio_des_festivals/media/Vedette/éricmorel-a.ll.a.mp3": audio/mpeg! 2024/09/09 17:48:38 [decoder.id3:4] Unsupported file extension for "/var/azuracast/stations/radio_des_festivals/media/Vedette/éric_morel-a.l_l.a.mp3"! 2024/09/09 17:48:38 [decoder.id3:4] Unsupported file extension for "/var/azuracast/stations/radio_des_festivals/media/Vedette/éricmorel-a.ll.a.mp3"! 2024/09/09 17:48:38 [decoder.id3:4] Unsupported file extension for "/var/azuracast/stations/radio_des_festivals/media/Vedette/éric_morel-a.l_l.a.mp3"! 2024/09/09 17:48:38 [decoder.flac.metadata:4] Unsupported MIME type for "/var/azuracast/stations/radio_des_festivals/media/Vedette/éricmorel-a.ll.a.mp3": audio/mpeg! 2024/09/09 17:48:38 [metadata.mp4:4] Unsupported MIME type for "/var/azuracast/stations/radio_des_festivals/media/Vedette/éric_morel-a.l_l.a.mp3": audio/mpeg! 2024/09/09 17:48:38 [decoder.ffmpeg:4] Unsupported file extension for "/var/azuracast/stations/radio_des_festivals/media/Vedette/éricmorel-a.ll.a.mp3"! 2024/09/09 17:48:38 [metadata.flac:4] Unsupported MIME type for "/var/azuracast/stations/radio_des_festivals/media/Vedette/éric_morel-a.l_l.a.mp3": audio/mpeg! 2024/09/09 17:48:38 [decoder.ogg:4] Unsupported MIME type for "/var/azuracast/stations/radio_des_festivals/media/Vedette/éricmorel-a.ll.a.mp3": audio/mpeg! 2024/09/09 17:48:38 [decoder.taglib:4] Unsupported file extension for "/var/azuracast/stations/radio_des_festivals/media/Vedette/éric_morel-a.l_l.a.mp3"! 2024/09/09 17:48:38 [decoder.ogg:4] Unsupported MIME type for "/var/azuracast/stations/radio_des_festivals/media/Vedette/éricmorel-a.ll.a.mp3": audio/mpeg! 2024/09/09 17:48:38 [decoder.ffmpeg:4] Unsupported file extension for "/var/azuracast/stations/radio_des_festivals/media/Vedette/éric_morel-a.l_l.a.mp3"! 2024/09/09 17:48:38 [decoder.mad:4] Unsupported file extension for "/var/azuracast/stations/radio_des_festivals/media/Vedette/éricmorel-a.ll.a.mp3"! 2024/09/09 17:48:38 [decoder.flac:4] Unsupported MIME type for "/var/azuracast/stations/radio_des_festivals/media/Vedette/éric_morel-a.l_l.a.mp3": audio/mpeg! 2024/09/09 17:48:38 [decoder.mp4:4] Unsupported MIME type for "/var/azuracast/stations/radio_des_festivals/media/Vedette/éricmorel-a.ll.a.mp3": audio/mpeg! 2024/09/09 17:48:38 [decoder.aac:4] Unsupported MIME type for "/var/azuracast/stations/radio_des_festivals/media/Vedette/éric_morel-a.l_l.a.mp3": audio/mpeg! 2024/09/09 17:48:38 [decoder.midi:4] Unsupported MIME type for "/var/azuracast/stations/radio_des_festivals/media/Vedette/éricmorel-a.ll.a.mp3": audio/mpeg! 2024/09/09 17:48:38 [decoder.srt:4] Unsupported MIME type for "/var/azuracast/stations/radio_des_festivals/media/Vedette/éric_morel-a.l_l.a.mp3": audio/mpeg! 2024/09/09 17:48:38 [decoder.aiff:4] Unsupported MIME type for "/var/azuracast/stations/radio_des_festivals/media/Vedette/éricmorel-a.ll.a.mp3": audio/mpeg! 2024/09/09 17:48:38 [decoder.wav:4] Unsupported MIME type for "/var/azuracast/stations/radio_des_festivals/media/Vedette/éric_morel-a.l_l.a.mp3": audio/mpeg! 2024/09/09 17:48:38 [decoder:4] Available decoders: ffmpeg (priority: 10), mad (priority: 1), image (priority: 1) 2024/09/09 17:48:38 [decoder:4] Trying decoder "ffmpeg" 2024/09/09 17:48:38 [decoder.ffmpeg:3] Requested content-type for "/var/azuracast/stations/radio_des_festivals/media/Vedette/éricmorel-a.ll.a.mp3": {audio=pcm(stereo)} 2024/09/09 17:48:38 [decoder.ffmpeg:3] FFmpeg recognizes "/var/azuracast/stations/radio_des_festivals/media/Vedette/éric_morel-a.l_l.a.mp3" as audio: {codec: mp3, 44100Hz, 2 channel(s)} 2024/09/09 17:48:38 [decoder.ffmpeg:3] Decoded content-type for "/var/azuracast/stations/radio_des_festivals/media/Vedette/éricmorel-a.ll.a.mp3": {audio=pcm(stereo)} 2024/09/09 17:48:38 [decoder:4] Selected decoder ffmpeg for file "/var/azuracast/stations/radio_des_festivals/media/Vedette/éric_morel-a.ll.a.mp3" with expected kind {audio=pcm(stereo)} and detected content {audio=pcm(stereo)} 2024/09/09 17:48:38 [next_song:4] Queued 1 requests 2024/09/09 17:48:38 [lang:3] API feedback - Sending POST request to 'http://127.0.0.1:6010/api/internal/1/liquidsoap/feedback' with body: {"song_id":"facd4f25e9873385dc3cc1564a8713ff","artist":"Freddy Fender","title":"Sweet Summer Day","playlist_id":"14","media_id":"20351"} 2024/09/09 17:48:38 [lang:3] API feedback - Response (200): true 2024/09/09 17:48:39 [lang:3] API feedback - Response (200): true 2024/09/09 17:49:01 [server:4] New client unix socket "". 2024/09/09 17:49:01 [server:4] Client unix socket "" disconnected.
!! Return to live feed after 3 seconds of streamer silence - not even long enough for encoder to disconnect! Returns with metadata from previous song ? Shouldn't it display XXX is live? Returns to normal operations at end of voice segment with buffer restored to 30 seconds !! 2024/09/09 17:49:11 [live_fallback:3] Switch to insert_metadata with transition. 2024/09/09 17:49:11 [source:4] Source replay_metadata.160 gets down. 2024/09/09 17:49:11 [lang:3] executing transition to live 2024/09/09 17:49:11 [lang:3] Inserting last live meta: [("pass", "XXXX:YYYY"), ("metadata_url", "https://radiodesfestivals.ca"), ("title", "Honoré Godbout - Y'a trop d'amour autour de moi - Speedy en ondes"), ("is_live", "true")] 2024/09/09 17:49:11 [source:4] Source replay_metadata.161 gets up with content type: {audio=pcm(stereo)}. 2024/09/09 17:49:11 [replay_metadata.161:3] Content type is {audio=pcm(stereo)}. 2024/09/09 17:49:11 [next_song:4] Finished with "/var/azuracast/stations/radio_des_festivals/media/Country Anglo/Freddy Fender - Sweet Summer Day.mp3". 2024/09/09 17:49:11 [request.2687:4] Request finished. 2024/09/09 17:49:11 [lang:3] API feedback - Sending POST request to 'http://127.0.0.1:6010/api/internal/1/liquidsoap/feedback' with body: {"title":"Honoré Godbout - Y'a trop d'amour autour de moi - Speedy en ondes"} 2024/09/09 17:49:11 [lang:3] API feedback - Response (200): true 2024/09/09 17:50:01 [server:4] New client unix socket "". 2024/09/09 17:50:01 [server:4] Client unix socket "" disconnected.