Mopidy is not playing with icecast2

I’m understanding it that async=false allows a sink to transition to PAUSED even though some upstream element didn’t provide the preroll buffer that’s normally required for this transition to occur. Once the sink goes PAUSED it can go PLAYING, then the pipeline goes PLAYING and the upstream element starts co-operating.

I’m not convinced this is related to changes in shout2send specifically. Testing some more older versions would help clarify this. Here is my survey of different pipelines which shows filesink and shout2send behave the same. Note these results probably don’t hold for Spotify playback (appsrc), that’s a whole different mess and it’s not what I am concentrating on here.

#Using gst-launch-1.0 playbin uri=https://archive.org/download/testmp3testfile/mpthreetest.mp3 audio-sink=

# Everything works with a single sink
"tee name=t ! queue  ! lamemp3enc         ! shout2send"                                          YES
"tee name=t ! queue  ! vorbisenc ! oggmux ! shout2send"                                          YES
"tee name=t ! queue  ! waveenc            ! shout2send"                                          YES
                                                                                           
"tee name=t ! queue  ! lamemp3enc         ! filesink"                                            YES
"tee name=t ! queue  ! vorbisenc ! oggmux ! filesink"                                            YES
"tee name=t ! queue  ! waveenc            ! filesink"                                            YES
                                                                                           
"tee name=t ! queue                       ! filesink"                                            YES
"tee name=t ! queue                       ! autoaudiosink"                                       YES

# Breaks when introduce another sink
"tee name=t ! queue  ! lamemp3enc         ! shout2send           t. ! queue ! autoaudiosink"     STUCK
"tee name=t ! queue  ! vorbisenc ! oggmux ! shout2send           t. ! queue ! autoaudiosink"     STUCK
"tee name=t ! queue  ! waveenc            ! shout2send           t. ! queue ! autoaudiosink"     STUCK

# Concentrating on filesink since it doesn't *need* an encoder like shout2send
"tee name=t ! queue  ! lamemp3enc         ! filesink             t. ! queue ! autoaudiosink"     STUCK
"tee name=t ! queue  ! vorbisenc ! oggmux ! filesink             t. ! queue ! autoaudiosink"     STUCK
"tee name=t ! queue  ! waveenc            ! filesink             t. ! queue ! autoaudiosink"     STUCK

# Removing the encoder fixes things
"tee name=t ! queue                       ! filesink             t. ! queue ! autoaudiosink"     YES
"tee name=t ! queue                       ! filesink             t. ! queue ! fakesink"          YES

# async=false fixes some things (same applies to shout2send)                     
"tee name=t ! queue  ! lamemp3enc         ! filesink async=false t. ! queue ! autoaudiosink"     YES
"tee name=t ! queue  ! vorbisenc ! oggmux ! filesink async=false t. ! queue ! autoaudiosink"     YES
"tee name=t ! queue  ! waveenc            ! filesink async=false t. ! queue ! autoaudiosink"     STUCK

# queue2 also fixes the same things (same applies to shout2send)
"tee name=t ! queue2 ! lamemp3enc         ! filesink             t. ! queue ! autoaudiosink"     YES
"tee name=t ! queue2 ! vorbisenc ! oggmux ! filesink             t. ! queue ! autoaudiosink"     YES
"tee name=t ! queue2 ! waveenc            ! filesink             t. ! queue ! autoaudiosink"     STUCK