diff --git a/libavformat/rtpenc.c b/libavformat/rtpenc.c index 3111c2b32e..5abd490cc4 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 57101601cd..95e70c140c 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;