diff --git a/libavformat/rtpenc.c b/libavformat/rtpenc.c
index 3111c2b32ec076697dc48de3f0bea809770d0012..5abd490cc436a121ac9e26439b204a3d3a34b78b 100644
--- a/libavformat/rtpenc.c
+++ b/libavformat/rtpenc.c
@@ -131,6 +131,13 @@ static int rtp_write_header(AVFormatContext *s1)
         s->max_payload_size = n * TS_PACKET_SIZE;
         s->buf_ptr = s->buf;
         break;
+    case CODEC_ID_H264:
+        /* check for H.264 MP4 syntax */
+        if (st->codec->extradata_size > 0 && st->codec->extradata &&
+            st->codec->extradata[0] == 1) {
+            s->nal_length_size = (st->codec->extradata[4] & 0x03) + 1;
+        }
+        break;
     case CODEC_ID_AMR_NB:
     case CODEC_ID_AMR_WB:
         if (!s->max_frames_per_packet)
diff --git a/libavformat/rtpenc.h b/libavformat/rtpenc.h
index 57101601cdae74a3e9f950b7c8a84bb533a8b936..95e70c140cf341390081a8b5df306f585893c8fe 100644
--- a/libavformat/rtpenc.h
+++ b/libavformat/rtpenc.h
@@ -50,6 +50,12 @@ struct RTPMuxContext {
     uint8_t *buf_ptr;
 
     int max_frames_per_packet;
+
+    /**
+     * Number of bytes used for H.264 NAL length, if the MP4 syntax is used
+     * (1, 2 or 4)
+     */
+    int nal_length_size;
 };
 
 typedef struct RTPMuxContext RTPMuxContext;