diff --git a/gst/mpegtsmux/mpegtsmux_h264.c b/gst/mpegtsmux/mpegtsmux_h264.c
index 7188ce7..c11fcca 100644
--- a/gst/mpegtsmux/mpegtsmux_h264.c
+++ b/gst/mpegtsmux/mpegtsmux_h264.c
@@ -87,6 +87,8 @@
 #include "mpegtsmux_h264.h"
 #include <string.h>
 
+#define ADD_ACCESS_UNIT_DELIMITER
+
 GST_DEBUG_CATEGORY_EXTERN (mpegtsmux_debug);
 #define GST_CAT_DEFAULT mpegtsmux_debug
 
@@ -119,6 +121,12 @@ mpegtsmux_process_codec_data_h264 (MpegTsPadData * data, MpegTsMux * mux)
   PrivDataH264 *h264_data;
   gboolean ret = FALSE;
 
+#ifdef ADD_ACCESS_UNIT_DELIMITER
+  /* All slice types (I, SI, P, SP, B) may be present in the primary coded
+   * picture */
+  guint8 access_unit_delimiter[2] = { 0x09, 0xE0 };
+#endif
+
   /* Initialize our private data structure for caching */
   if (G_UNLIKELY (!data->prepare_data)) {
     data->prepare_data = g_new0 (PrivDataH264, 1);
@@ -160,6 +168,16 @@ mpegtsmux_process_codec_data_h264 (MpegTsPadData * data, MpegTsMux * mux)
     GST_DEBUG_OBJECT (mux, "we have %d Sequence Parameter Set", nb_sps);
     offset++;
 
+#ifdef ADD_ACCESS_UNIT_DELIMITER
+    /* Fake a start code */
+    memcpy (GST_BUFFER_DATA (h264_data->cached_es) + out_offset, startcode, 4);
+    out_offset += 4;
+    /* Create Access Unit Delimiter - Mandatory for AVC in Transport Stream */
+    memcpy (GST_BUFFER_DATA (h264_data->cached_es) + out_offset,
+        access_unit_delimiter, 2);
+    out_offset += 2;
+#endif
+
     /* For each SPS */
     for (i = 0; i < nb_sps; i++) {
       guint16 sps_size =
