This patch set adds a support for UDP version of RAOP (so called raop2). Most of the RAOP devices (e.g. AppleTV, AirportExpress, third party AV receivers) today use UDP version, so this patch set is expected to support those devices. While there are still some remaining issues, and testing has not been done thoroughly, we'd like to have a review so that we can discuss some design/style issues as early as possible. A brief project description is here. http://hfujita.github.io/pulseaudio-raop2/ Also this raop issue is actively discussed in this thread. https://bugs.freedesktop.org/show_bug.cgi?id=42804 This patch set corresponds to the following branch on github. https://github.com/hfujita/pulseaudio-raop2/tree/raop2-for-merge1 Current status (as of 9/5/2013) * Plays back music on Pioneer VSX-43 (AV receiver) and some other devices (see below for tested device list). * Expected to support both TCP (original raop module) an UDP protocols. However, TCP protocol is not tested at all because we don't own a device. Known issues (as of 9/5/2013) * May not work with the latest AppleTV * Sound test (launched from the GNOME sound setting dialog) does not work (no sound heard). * Works reasonably with VLC/Totem/Rhythmbox but when playing music from Flash player, quite rough sound is heard. * There's a huge latency. Okay for music player but absolutely terrible for movies/voice chat. * Volume calculation is wrong (https://bugs.freedesktop.org/show_bug.cgi?id=42804#c43) Some comments on code structure * At this moment we intentionally tried not to fuse TCP code and UDP code too much. This is because we currently don't own a device that talks TCP version of RAOP, we were afraid that excessive code modification for TCP path could ruin its original functionality (and we can't detect it). Hajime Fujita (15): raop: Recognize transport protocol type raop: Rename client functions raop: Introduce sink_get_latency for latency calculation raop: Move RTSP announce to an external function raop: Code renaming for protocol specific IDs raop: Add dummy handler for RTSP OPTIONS raop: Use two port numbers for timing/control port raop: Honor encryption capability given by a remote device raop: Resume smoother for correct latency calculation raop: Set precise wake up timer for rtpoll raop: Set poll timer when entering the RUNNING state raop: Cleanup pollfd when the RTSP state enters TEARDOWN raop: Honor memchunk index when encoding chunks raop: Refactor UDP packet send path raop: More precise thread wakeup clock calculation Martin Blanchard (9): raop: Cosmetic fixes / Match coding style raop: Add pulsecore/core-utils a pa_str_in_list function raop: Parse server capabilities on discovery rtp: New pa_rtsp_options function rtp: Allow transport parameters to be ovewritten rtp: Random seq number at the beginning of the session raop: Use server name to construct a sink name raop: Add UDP protocol handling raop: Support for devices capable with both TCP and UDP Matthias Wabersich (1): raop: Packet retransmission support for UDP src/Makefile.am | 3 +- src/modules/raop/base64.c | 28 +- src/modules/raop/base64.h | 6 +- src/modules/raop/module-raop-discover.c | 247 ++++--- src/modules/raop/module-raop-sink.c | 500 +++++++++++-- src/modules/raop/raop_client.c | 1177 +++++++++++++++++++++++++++---- src/modules/raop/raop_client.h | 46 +- src/modules/raop/raop_packet_buffer.c | 160 +++++ src/modules/raop/raop_packet_buffer.h | 41 ++ src/modules/rtp/rtsp_client.c | 92 ++- src/modules/rtp/rtsp_client.h | 34 +- src/pulsecore/core-util.c | 20 + src/pulsecore/core-util.h | 5 +- 13 files changed, 2001 insertions(+), 358 deletions(-) create mode 100644 src/modules/raop/raop_packet_buffer.c create mode 100644 src/modules/raop/raop_packet_buffer.h -- 1.8.1.2