不支持音频对象类型3

时间:2013-10-02 11:19:27

标签: ffmpeg rtp codec aac

我遇到了一个定制的ffmpeg问题。基本上,它启用了一个带有x264和fdk-aac库的vanilla ffmpeg。我通过ffmpeg API提供SDP文件,并在将信息传递给avcodec_open2时收到以下错误:

  

不支持音频对象类型

我的SDP文件:

v=0
o=- 0 0 IN IP4 127.0.0.1
s=Unnamed
i=N/A
c=IN IP4 192.168.1.1
t=0 0
a=recvonly
m=audio 8204 RTP/AVP 96
a=rtpmap:96 mpeg4-generic/32000
a=fmtp:96 streamtype=5; profile-level-id=15; mode=AAC-hbr; config=1a88; SizeLength=13; IndexLength=3; IndexDeltaLength=3;
a=control:trackID=0
m=video 8202 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=428028;sprop-parameter-sets=Z0KAKJWgKA9E,aM48gA==;
a=control:trackID=1
m=application 8206 RTP/AVP 96
a=rtpmap:96 smpte336m/10
a=control:trackID=2

以下是我从ffmpeg获取的输出,因为我打开输入,转储其格式,并尝试打开输入流:

  

格式sdp探测,大小= 2048,得分= 50   音频编解码器设置为:aac
  音频采样率设置为:32000
  音频通道设置为:1
  视频编解码器设置为:h264
  RTP打包模式:1
  RTP Profile IDC:42 Profile IOP:80 Level:28
  Extradata设置为0xc8d3dc0(大小:21)!
  avformat_find_stream_info()之前的文件位置是522
  不支持音频对象类型3   找不到流1的编解码器参数(视频:h264):未指定大小
  考虑增加'analyzeuration'和'probesize'选项的值   avformat_find_stream_info()之后的文件位置是522
  转储输入AV格式
  输入#0,sdp,来自'conf / test.sdp':

     

元数据:
      标题:未命名的
      评论:N / A

     

持续时间:N / A,比特率:N / A

Stream #0:0, 0, 1/32000: Audio: aac, 32000 Hz, 1 channels, fltp  

Stream #0:1, 0, 1/90000: Video: h264, 90k tbr, 90k tbn, 180k tbc  

Stream #0:2, 0, 1/90000: Data: none, 0/1  
     

不支持音频对象类型3。

我还看到报告的错误是没有找到流1的编解码器参数:

  

找不到流1的编解码器参数(视频:h264):未指定的大小   考虑增加'analyzeuration'和'probesize'选项的值

但是,我认为这是因为我在测试时没有运行实际的rtp。

在任何情况下,可能导致音频对象类型3不受支持异常的原因是什么?

更新 - 2013年10月2日

静态ffmpeg构建提供以下标志:

静态ffmpeg 2.0.1构建标志输出:

ffmpeg version 2.0.1 Copyright (c) 2000-2013 the FFmpeg developers
  built on Sep 30 2013 22:24:00 with gcc 4.1.2 (GCC) 20080704 (Red Hat 4.1.2-54)
  configuration: --enable-gpl --enable-nonfree --enable-shared
  configuration: --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --mandir=/usr/share/man --enable-shared --enable-runtime-cpudetect --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-avfilter --enable-pthreads --enable-x11grab --enable-vdpau --disable-avisynth --enable-libdc1394 --enable-libfaac --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libx264 --enable-libxavs --enable-libxvid --extra-cflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC' --disable-stripping

我的构建来自ffmpeg 2.0.1快照,带有以下标志:

--enable-static --disable-shared --enable-gpl --enable-nonfree --enable-libfdk-aac --enable-libfaac --enable-libmp3lame --enable-libx264 --disable-symver --disable-doc --disable-ffplay --enable-ffmpeg --disable-ffprobe --disable-ffserver --disable-avdevice --disable-avfilter --disable-filters --disable-devices --disable-everything --enable-avformat --enable-avcodec --enable-muxers --enable-protocols --enable-parsers --enable-demuxers --enable-decoders --enable-encoders --enable-bsfs --enable-network --enable-swscale  --disable-demuxer=sbg --disable-demuxer=dts --disable-parser=dca --disable-decoder=dca --enable-asm --enable-pthreads --enable-version3

我正在使用的fdk-aac库版本:

  

fdk-aac - 0.1.2

所以看起来同样的.sdp文件导致 音频对象类型3 错误与我的构建但不是静态但我真的不知道是什么导致它(被授予我不是ffmpeg API的专家,可能只是错过了重要的细节。)

用于打开不包含错误检查和逻辑分离的.sdp文件的简化代码:

AVFormatContext *inputContext = NULL;

av_register_all();
avformat_network_init();

avformat_open_input(&inputContext, "test.sdp", NULL, NULL);
avformat_find_stream_info(inputContext, NULL);

int inAudioStreamIdx = av_find_best_stream(inputContext, AVMEDIA_TYPE_AUDIO, -1, -1, NULL, 0);
AVStream *st = inputContext->streams[inAudioStreamIdx];

AVCodecContext *dec_ctx = st->codec;
AVCodec *dec = avcodec_find_decoder(dec_ctx->codec_id);

avcodec_open2(dec_ctx, dec, NULL); // Fails here with Audio object type 3

我是否打开了不正确的sdp输入?

1 个答案:

答案 0 :(得分:1)

首先,对象类型3是AAC-SSR(在ISO 14496-3中定义),据我所知,ffmpeg解码器不支持它。至于h.264错误,“未指定大小”消息指的是解码器无法配置视频分辨率。分辨率在AVC基本流中的SPS / PPS NALU中指定。

FFmpeg(特别是libavcodec)将分析流几秒钟,以确定配置解码器所需的参数。您的流长度为0秒,因此解码器从未正确配置。因此错误。