ffmpeg - 不支持音频对象类型 3

标签 ffmpeg rtp codec aac

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

Audio object type 3 is not supported



我的 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 获得的输出:

Format sdp probed with size=2048 and score=50
audio codec set to: aac
audio samplerate set to: 32000
audio channels set to: 1
video codec set to: h264
RTP Packetization Mode: 1
RTP Profile IDC: 42 Profile IOP: 80 Level: 28
Extradata set to 0xc8d3dc0 (size: 21)!
File position before avformat_find_stream_info() is 522
Audio object type 3 is not supported.
Could not find codec parameters for stream 1 (Video: h264): unspecified size
Consider increasing the value for the 'analyzeduration' and 'probesize' options
File position after avformat_find_stream_info() is 522
Dumping input AV format
Input #0, sdp, from 'conf/test.sdp':

Metadata:
title :Unnamed
comment :N/A

Duration:N/A, bitrate: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  

Audio object type 3 is not supported.



我还看到因找不到流 1 的编解码器参数而报告的错误:

Could not find codec parameters for stream 1 (Video: h264): unspecified size Consider increasing the value for the 'analyzeduration' and 'probesize' options



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

无论如何,得到 的原因可能是什么?不支持音频对象类型 3 异常(exception)?

更新 - 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 输入?

最佳答案

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

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

关于ffmpeg - 不支持音频对象类型 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19135719/

相关文章:

batch-file - CMD 批处理变量不会保存 FFprobe 输出

video - 如何使用 ffmpeg 将视频分割为奇数场和偶数场的 2 个独立文件?

linux - 如何修改以下命令行?

php - FFMPEG 在命令行中工作,但不能在 exec() 中工作,它返回 127

objective-c - 如何在 Objective-C 中使用 FFmpeg 在 macOS 中录制屏幕?

android - 使用 RTP 从 Android 到 PC 的相机流式传输

video - 原始 h.264 数据包捕获并在 VLC 中播放

java - OSWAP ESAPI 的 Sybase 编解码器

转换 flv1 (flv) -> h264 (libx264) 时出现 FFMPEG 错误

macos - Opencv 视频编解码器 OSX