Add GStreamer-based RTP support

Submitted by Arun Raghavan on Feb. 29, 2016, 9:55 a.m.


Reviewer None
Submitted Feb. 29, 2016, 9:55 a.m.
Last Updated Feb. 29, 2016, 9:55 a.m.
Revision 1

Cover Letter(s)

Revision 1
      Hi folks,
Here's a patch set to add a GStreamer-based RTP implementation for
module-rtp-send and module-rtp-receive. The rationale for this is that
our own RTP implementation is rather basic, and using a more
well-established stack will allow us to do more, such as add support for
RTCP, clock synchronisation, and compressed formats. This should also
reduce our support burden for the RTP stack in theory (although we don't
have too much other than the occasional crasher, I think).

For compressed formats, in particular, moving to a GStreamer-based
implementation lets us not have to deal with messy codec bits within
PulseAudio, which is important IMO, since it opens a whole can of worms
that I'd rather not deal with at the PulseAudio layer. Conversely, it
would be useful to support Opus or other compression since we currently
end up flooding the network while streaming raw audio.

Patch 1, 2 and 6 are small fixes to the existing code
Patch 3 drops support for non-L16 formats which seem to not be useful
Patch 4 and 5 refactor the code to hide away the RTP implementation
details from the actual modules
Patch 7 is minor rtpoll plumbing improvement that was needed
Patch 8 is the actual GStreamer implementation

From a packaging perspective, this might be a bit confusing since we add
a dependency on the GStreamer package which might in turn depend on
PulseAudio (for pulsesrc and pulsesink). The exact dependencies are:

 * The PulseAudio server has a compile and run time dependency on
   gstreamer and  gst-plugins-base
 * The PulseAudio server has a run time dependency on gst-plugins-good
 * gst-plugins-good has a compile and run time dependency on the
   PulseAudio client library