--- a/gst/rtp/Makefile.am
+++ b/gst/rtp/Makefile.am
@@ -6,6 +6,7 @@ libgstrtp_la_SOURCES = \
 	gstrtpchannels.c \
 	gstrtpac3depay.c \
 	gstrtpac3pay.c \
+	gstrtpalacdepay.c \
 	gstrtpbvdepay.c \
 	gstrtpbvpay.c \
 	gstrtpceltdepay.c \
@@ -92,6 +93,7 @@ noinst_HEADERS =			\
 		 gstrtpL16pay.h 	\
 		 gstrtpac3depay.h 	\
 		 gstrtpac3pay.h 	\
+		 gstrtpalacdepay.h 	\
 		 gstrtpbvdepay.h 	\
 		 gstrtpbvpay.h 	        \
 		 gstrtpceltpay.h	\
--- a/gst/rtp/gstrtp.c
+++ b/gst/rtp/gstrtp.c
@@ -23,6 +23,7 @@
 
 #include "gstrtpac3depay.h"
 #include "gstrtpac3pay.h"
+#include "gstrtpalacdepay.h"
 #include "gstrtpbvdepay.h"
 #include "gstrtpbvpay.h"
 #include "gstrtpceltdepay.h"
@@ -93,6 +94,9 @@
 static gboolean
 plugin_init (GstPlugin * plugin)
 {
+  if (!gst_rtp_alac_depay_plugin_init (plugin))
+    return FALSE;
+
   if (!gst_rtp_ac3_depay_plugin_init (plugin))
     return FALSE;
 
--- /dev/null
+++ b/gst/rtp/gstrtpalacdepay.c
@@ -0,0 +1,192 @@
+/* GStreamer
+ * Copyright (C) <2012> Freebox SAS (contact <avrac@freebox.fr>)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <arpa/inet.h>
+
+#include <gst/rtp/gstrtpbuffer.h>
+#include "gstrtpalacdepay.h"
+
+#define ATOM_TAG_ALAC 0x616c6163
+
+struct _AlacAtom {
+  guint32 atom_size;
+  guint32 tag;
+  guint32 tag_version;
+  guint32 samples_per_frame;
+  guint8 compatible_version;
+  guint8 sample_size;
+  guint8 history_mult;
+  guint8 initial_history;
+  guint8 kmodifier;
+  guint8 channels;
+  guint16 max_run;
+  guint32 max_coded_frame_size;
+  guint32 average_bitrate;
+  guint32 sample_rate;
+} __attribute__ ((__packed__));
+
+typedef struct _AlacAtom AlacAtom;
+
+GST_DEBUG_CATEGORY_STATIC (rtpalacdepay_debug);
+#define GST_CAT_DEFAULT (rtpalacdepay_debug)
+
+static GstStaticPadTemplate gst_rtp_alac_depay_src_template =
+    GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/x-alac"));
+
+static GstStaticPadTemplate gst_rtp_alac_depay_sink_template =
+GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("application/x-rtp, "
+        "media = (string) audio, "
+        "payload = (int) " GST_RTP_PAYLOAD_DYNAMIC_STRING ", "
+        "clock-rate = (int) [ 1, MAX ], "
+        "encoding-name = (string) APPLELOSSLESS")
+    );
+
+#define gst_rtp_alac_depay_parent_class parent_class
+G_DEFINE_TYPE (GstRtpALACDepay, gst_rtp_alac_depay,
+    GST_TYPE_RTP_BASE_DEPAYLOAD);
+
+static gboolean
+gst_rtp_alac_depay_setcaps (GstRTPBaseDepayload * depayload, GstCaps * caps);
+static GstBuffer *
+gst_rtp_alac_depay_process (GstRTPBaseDepayload * depayload, GstBuffer * buf);
+
+static void
+gst_rtp_alac_depay_class_init (GstRtpALACDepayClass * klass)
+{
+  GstElementClass *gstelement_class;
+  GstRTPBaseDepayloadClass *gstrtpbasedepayload_class;
+
+  gstelement_class = (GstElementClass *) klass;
+  gstrtpbasedepayload_class = (GstRTPBaseDepayloadClass *) klass;
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&gst_rtp_alac_depay_src_template));
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&gst_rtp_alac_depay_sink_template));
+
+  gst_element_class_set_static_metadata (gstelement_class,
+      "RTP ALAC depayloader", "Codec/Depayloader/Network/RTP",
+      "Extracts ALAC (Apple Lossless Audio Codec) audio from RTP packets",
+      "Arnaud Vrac <avrac@freebox.fr>");
+
+  gstrtpbasedepayload_class->set_caps = gst_rtp_alac_depay_setcaps;
+  gstrtpbasedepayload_class->process = gst_rtp_alac_depay_process;
+
+  GST_DEBUG_CATEGORY_INIT (rtpalacdepay_debug, "rtpalacdepay", 0,
+      "ALAC Audio RTP Depayloader");
+}
+
+static void
+gst_rtp_alac_depay_init (GstRtpALACDepay * rtpalacdepay)
+{
+}
+
+static gboolean
+gst_rtp_alac_depay_setcaps (GstRTPBaseDepayload * depayload, GstCaps * caps)
+{
+  GstStructure *structure;
+  GstCaps *srccaps;
+  const gchar *str;
+  gint clock_rate;
+  gboolean res;
+
+  structure = gst_caps_get_structure (caps, 0);
+
+  if (!gst_structure_get_int (structure, "clock-rate", &clock_rate))
+    clock_rate = 90000;
+  depayload->clock_rate = clock_rate;
+
+  srccaps = gst_caps_new_empty_simple ("audio/x-alac");
+
+  if ((str = gst_structure_get_string (structure, "format-parameters"))) {
+    GstBuffer *buffer;
+    guint32 samples_per_frame;
+    guint8 compatible_version;
+    guint8 sample_size;
+    guint8 history_mult;
+    guint8 initial_history;
+    guint8 kmodifier;
+    guint8 channels;
+    guint16 max_run;
+    guint32 max_coded_frame_size;
+    guint32 average_bitrate;
+    guint32 sample_rate;
+    AlacAtom atom;
+
+    if (sscanf(str, "%u %hhu %hhu %hhu %hhu %hhu %hhu %hu %u %u %u",
+          &samples_per_frame, &compatible_version, &sample_size, &history_mult,
+          &initial_history, &kmodifier, &channels, &max_run,
+          &max_coded_frame_size, &average_bitrate, &sample_rate) != 11)
+      goto bad_parameters;
+
+    atom.atom_size = htonl (sizeof (atom));
+    atom.tag = htonl (ATOM_TAG_ALAC);
+    atom.tag_version = htonl(0);
+
+    atom.samples_per_frame = htonl (samples_per_frame);
+    atom.compatible_version = compatible_version;
+    atom.sample_size = sample_size;
+    atom.history_mult = history_mult;
+    atom.initial_history = initial_history;
+    atom.kmodifier = kmodifier;
+    atom.channels = channels;
+    atom.max_run = htons (max_run);
+    atom.max_coded_frame_size = htonl (max_coded_frame_size);
+    atom.average_bitrate = htonl (average_bitrate);
+    atom.sample_rate = htonl (sample_rate);
+
+    buffer = gst_buffer_new_wrapped (&atom, sizeof (atom));
+
+    gst_caps_set_simple (srccaps,
+        "channels", G_TYPE_INT, (gint) channels,
+        "rate", G_TYPE_INT, (gint) sample_rate,
+        "codec_data", GST_TYPE_BUFFER, buffer, NULL);
+  }
+
+bad_parameters:
+  res = gst_pad_set_caps (depayload->srcpad, srccaps);
+  gst_caps_unref (srccaps);
+
+  return res;
+}
+
+static GstBuffer *
+gst_rtp_alac_depay_process (GstRTPBaseDepayload * depayload, GstBuffer * buf)
+{
+  GstRTPBuffer rtp = { NULL };
+
+  gst_rtp_buffer_map (buf, GST_MAP_READ, &rtp);
+  buf = gst_rtp_buffer_get_payload_buffer (&rtp);
+  gst_rtp_buffer_unmap (&rtp);
+
+  return buf;
+}
+
+gboolean
+gst_rtp_alac_depay_plugin_init (GstPlugin * plugin)
+{
+  return gst_element_register (plugin, "rtpalacdepay",
+      GST_RANK_SECONDARY, GST_TYPE_RTP_ALAC_DEPAY);
+}
--- /dev/null
+++ b/gst/rtp/gstrtpalacdepay.h
@@ -0,0 +1,59 @@
+/* GStreamer
+ * Copyright (C) <2012> Freebox SAS (contact <avrac@freebox.fr>)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_RTP_ALAC_DEPAY_H__
+#define __GST_RTP_ALAC_DEPAY_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstadapter.h>
+#include <gst/rtp/gstrtpbasedepayload.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_RTP_ALAC_DEPAY \
+  (gst_rtp_alac_depay_get_type())
+#define GST_RTP_ALAC_DEPAY(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RTP_ALAC_DEPAY,GstRtpALACDepay))
+#define GST_RTP_ALAC_DEPAY_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RTP_ALAC_DEPAY,GstRtpALACDepayClass))
+#define GST_IS_RTP_ALAC_DEPAY(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RTP_ALAC_DEPAY))
+#define GST_IS_RTP_ALAC_DEPAY_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTP_ALAC_DEPAY))
+
+typedef struct _GstRtpALACDepay GstRtpALACDepay;
+typedef struct _GstRtpALACDepayClass GstRtpALACDepayClass;
+
+struct _GstRtpALACDepay
+{
+  GstRTPBaseDepayload depayload;
+};
+
+struct _GstRtpALACDepayClass
+{
+  GstRTPBaseDepayloadClass parent_class;
+};
+
+GType gst_rtp_alac_depay_get_type (void);
+
+gboolean gst_rtp_alac_depay_plugin_init (GstPlugin * plugin);
+
+G_END_DECLS
+
+#endif /* __GST_RTP_ALAC_DEPAY_H__ */
