GNOME Bugzilla – Bug 698768
gstreamer pulsesink broken when destination is over network
Last modified: 2013-04-29 06:24:00 UTC
The sequence: gst-launch-0.10 -v filesrc location=Thunderbirds.mp3 \! mad \! pulsesink Will work if my pulseaudio daemon is local to my machine. However, if I have: export PULSE_SINK="myhost" in my environment, the same chain will fail: Setting pipeline to PAUSED ... Pipeline is PREROLLING ... /GstPipeline:pipeline0/GstMad:mad0.GstPad:src: caps = audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)32, depth=(int)32, rate=(int)48000, channels=(int)2 ERROR: from element /GstPipeline:pipeline0/GstPulseSink:pulsesink0: Failed to create stream: Not supported Additional debug info: pulsesink.c(1011): gst_pulseringbuffer_acquire (): /GstPipeline:pipeline0/GstPulseSink:pulsesink0 ERROR: pipeline doesn't want to preroll. Setting pipeline to NULL ... /GstPipeline:pipeline0/GstMad:mad0.GstPad:src: caps = NULL Freeing pipeline ... Intrerestingly, switching to "alsasink" will work; apparently "alsa" will avail itself of pulseaudio behind the scenes. This bug was found with the "vagalume" player, which worked in Debian Squeeze and stopped working in Wheezy until I overrode its sink selection. Something has regressed in how the pulsesink module looks at the world, at least when it will need to send its data over TCP to a remote.
Are you using PULSE_SINK (name of the sink to use) or PULSE_SERVER (hostname/ip of the machine to connect to)?
Sorry, should've just pasted the log: k9$ env | grep PUL PULSE_SERVER=192.168.7.21 k9$
What are the pulseaudio versions on the local and remote machines? Does this pipeline work if you connect with PULSE_SERVER=127.0.0.1? (you'll need the TCP module loaded locally, of course)
The server running vagalume is stock Debian Wheezy, updated as of 4/26/2013: k9$ pulseaudio --version pulseaudio 2.0 k9$ Talking to Squeeze 6.0.6: term1$ pulseaudio --version pulseaudio 0.9.21-rebootstrapped-dirty term1$ I got the pulseaudio daemon to load the TCP module and could then play with PULSE_SERVER set to 127.0.0.1. Since this is quite suggestive, I brought up a newer station with Ubuntu 12.04 and was able to play over the net to it as well. So it looks like the pulseaudio sink module in gstreamer is doing something which is not compatible with the older pulseaudio daemon of Debian Squeeze. This would be moderately bad, except that I can tell Vagalume to use alsa, and alsa's backend pulseaudio support will still talk to Squeeze. Anyway, I'm glad the bug is now dialed down to a more specific scenario. I'll be happy to help if you need anything else.
The minimum requirement for pulsesink is PulseAudio 1.0 on both the client and the server, so that explains the problem. This means you will have to upgrade your server to at least 1.0. I'll push a fix to provide a more meaningful error message for this sort of situation.
The following fix has been pushed: cc5562a pulsesink: Better error message when server version is too old
Created attachment 242773 [details] [review] pulsesink: Better error message when server version is too old We check for the library version at configure time, but the server version can only really be checked at run-time.