Limitations of the PulseAudio backend for GStreamer

  • December 10, 2008
  • Jannis Pohlmann

I’m at the Ubuntu Developer Summit this week and Emmet Hikory just approached me with a question about the PulseAudio support in xfce4-mixer. The problem he has is that when he wants to plug in in a bluetooth headset PulseAudio might act weird and there’s only one way to fix this from the user’s point of view, which is to use pavucontrol or one of the other PulseAudio tools. Unfortunately those tools don’t provide a good user experience. Controls are given technical names and too much of the internal technical stuff is being exposed to the user.
So, his idea is that there has to be a user-friendly way (like using xfce4-mixer) to e.g. control the bluetooth headset after it has been plugged in.
I just took a quick look at the PulseAudio code shipped with gst-plugins-good and to me it seems to be in a pretty bad shape. Unless I’m mistaken it only exposes one track through the GstMixer interface: Master. So if you have several devices capable of audio playback/recording, like a normal sound card and a bluetooth headset, you have no control over which of them is being muted, used for recording or whatever.
What I would expect is to either have a list of tracks (one for each sink – and please give them user-friendly names!) exposed through the GstMixer interface or to have a switch for choosing the sink you want to control with the Master track. Without this, no mixer application is able to provide a user-friendly way to control PulseAudio – unless it implements its own PulseAudio support.
One major reason for rewriting xfce4-mixer based on GStreamer has always been to get rid of the need to maintain our own audio system backends. The old mixer had its own backends for ALSA, OSS and BSD and it really sucked.

So I’m hoping that maybe someone steps up to implement a proper PulseAudio backend for GStreamer, with tracks for all available audio sinks and streams. I think I’d prefer tracks over a simple switch because they allow for a more fine-grained configuration of your devices. Thanks Emmet for pointing that out.