After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 698768 - gstreamer pulsesink broken when destination is over network
gstreamer pulsesink broken when destination is over network
Status: RESOLVED NOTABUG
Product: GStreamer
Classification: Platform
Component: gst-plugins-good
1.x
Other Linux
: Normal normal
: git master
Assigned To: GStreamer Maintainers
GStreamer Maintainers
Depends on:
Blocks:
 
 
Reported: 2013-04-24 16:40 UTC by Andrew Valencia
Modified: 2013-04-29 06:24 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
pulsesink: Better error message when server version is too old (1.36 KB, patch)
2013-04-29 06:23 UTC, Arun Raghavan
committed Details | Review

Description Andrew Valencia 2013-04-24 16:40:30 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.
Comment 1 Arun Raghavan 2013-04-25 07:53:26 UTC
Are you using PULSE_SINK (name of the sink to use) or PULSE_SERVER (hostname/ip of the machine to connect to)?
Comment 2 Andrew Valencia 2013-04-25 15:27:58 UTC
Sorry, should've just pasted the log:

k9$ env | grep PUL
PULSE_SERVER=192.168.7.21
k9$
Comment 3 Arun Raghavan 2013-04-26 03:13:38 UTC
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)
Comment 4 Andrew Valencia 2013-04-27 01:33:48 UTC
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.
Comment 5 Arun Raghavan 2013-04-29 05:55:22 UTC
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.
Comment 6 Arun Raghavan 2013-04-29 06:23:20 UTC
The following fix has been pushed:
cc5562a pulsesink: Better error message when server version is too old
Comment 7 Arun Raghavan 2013-04-29 06:23:25 UTC
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.