我遇到了定製的ffmpeg問題。基本上,它是一個x264和fdk-aac庫啓用的香草ffmpeg。我餵過ffmpeg的API SDP文件,並收到以下錯誤而傳遞信息,以avcodec_open2
:不支持音頻對象類型3
音頻對象類型3不支持
我的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獲得的輸出,當我打開輸入,轉儲它的格式並嘗試打開輸入流時:
與大小= 2048和得分探測格式SDP = 50
音頻編解碼器設置爲:AAC
音頻採樣率設置爲:設置爲32000個
音頻通道:1個
視頻編解碼器設置爲:H264
RTP打包方式:1
RTP配置文件IDC:42配置文件IOP:80級別:28
Extradata設置爲0xc8d3dc0(大小:21)!
avformat_find_stream_info()之前的文件位置是522
不支持音頻對象類型3。
找不到流1編解碼器的參數(視頻:H264):未指定的大小
考慮爲「analyzeduration」和「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):未指定的尺寸 考慮的保值增值'分析'和'探測器'選項
但是,我認爲這是由於我沒有在測試時運行實際的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輸入不正確?
它可能是指AAC-HBR(Hgih比特率)編碼,這被認爲是AAC的無支持味道。 –