[pulseaudio-discuss] PulseAudio Xen module
arun.raghavan at collabora.co.uk
Sun Nov 13 21:06:51 PST 2011
On Tue, 2011-11-01 at 10:11 -0400, Konrad Rzeszutek Wilk wrote:
> On Tue, Nov 01, 2011 at 10:19:45AM +0530, Arun Raghavan wrote:
> > On Mon, 2011-10-31 at 17:33 +0100, George Boutsioukis wrote:
> > > Hello PulseAudio people!
> > >
> > >
> > > As part of a Google Summer of code project for Xen during this summer,
> > > I wrote a PulseAudio module that acts as the frontend part of a Xen
> > > paravirtualized audio driver. Basically what it does is push audio
> > > frames over a ring buffer placed in memory shared between different
> > > Xen domains, using Xen's interrupt-like events to notify the playback
> > > backend that audio data is available.
> > Incidentally, Is there a reason you chose not to do this by exposing the
> > host server over the network instead of having to invent your own
> > protocol for host/guest communication?
> Couple of things:
> - security (firewall rules might will to open on the guest/host)
> - traffic is mungled along with the other traffic that might have nothing
> to do with audio.
> - extra configuration setup of making it work - you would need to pass
> to the guest the IP of the host, and the host would need to dynamically
> add an ACL for the guest.
> One way to make some of these issues disappear is to create a second interface
> between host and guest that is private and will only be used for audio traffic.
> It won't solve the 'extra configuration' issue. It also will be complex to setup -
> both the guest and host have to know which of the interfaces is used for normal
> traffic vs audio traffic.
> Making it use the XenBus and using a ring-buffer bypasses a bunch of these
> issues - the configuration is negotiated with the XenBus. This means that the host
> and guest know where each is (they only have to negotiate the event channel (think
> IRQ), and ring reference (think virtual memory for shared page)).
> In regards to the ring implementation the idea behind it is to be the standard
> for PV audio. Which means that you can have different backends and frontends using
> a different implementation. For Windows, you could write the frontend using DSound
> and it would "pass" the audio frames on the ring, while the backend (host) would
> pick them up and feed them in PulseAudio.
Thanks for the explanation -- does make more sense to make a virtual
card and support arbitrary guests.
More information about the pulseaudio-discuss