[FFmpeg-devel] [PATCH] libavformat/rtpdec_mpeg4: AAC may not contain AU headers.
koushd at gmail.com
koushd at gmail.com
Wed Apr 2 06:29:39 EEST 2025
From: Koushik Dutta <koushd at gmail.com>
The codec information may be in the SDP and not in the stream.
Signed-off-by: Koushik Dutta <koushd at gmail.com>
---
libavformat/rtpdec_mpeg4.c | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/libavformat/rtpdec_mpeg4.c b/libavformat/rtpdec_mpeg4.c
index 6531632b2d..c3c3c67c3e 100644
--- a/libavformat/rtpdec_mpeg4.c
+++ b/libavformat/rtpdec_mpeg4.c
@@ -180,6 +180,7 @@ static int aac_parse_packet(AVFormatContext *ctx, PayloadContext *data,
int flags)
{
int ret;
+ AVCodecParameters *par = st->codecpar;
if (!buf) {
@@ -208,6 +209,26 @@ static int aac_parse_packet(AVFormatContext *ctx, PayloadContext *data,
return 1;
}
+ /* Check for and skip ADTS header if we have an explicit decoder config */
+ if (par->extradata && len > 7) {
+ if (buf[0] == 0xff && (buf[1] & 0xf0) == 0xf0) {
+ size_t header_size = 7 + ((buf[1] & 0x01) ? 0 : 2);
+ if (len > header_size) {
+ buf += header_size;
+ len -= header_size;
+ }
+
+ if ((ret = av_new_packet(pkt, len)) < 0) {
+ av_log(ctx, AV_LOG_ERROR, "Out of memory\n");
+ return ret;
+ }
+
+ memcpy(pkt->data, buf, len);
+ pkt->stream_index = st->index;
+ return 0;
+ }
+ }
+
if (rtp_parse_mp4_au(data, buf, len)) {
av_log(ctx, AV_LOG_ERROR, "Error parsing AU headers\n");
return -1;
--
2.39.5 (Apple Git-154)
More information about the ffmpeg-devel
mailing list