カスタムビルドの ffmpeg で問題が発生しています。基本的に、x264 と fdk-aac ライブラリが有効になっているバニラ ffmpeg です。ffmpeg API を介して SDP ファイルをフィードしていますが、情報を に渡すときに次のエラーが発生しますavcodec_open2
。
オーディオ オブジェクト タイプ 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 およびスコア = 50 でプローブされるフォーマット sdp
オーディオ コーデックの設定: 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): サイズが指定されていません 'analyzeduration' および 'probesize' オプションの値を増やすことを検討してください
ただし、テストの時点で実際の rtp を実行していないことが原因だと思います。
いずれにせよ、 Audio Object Type 3 not supported例外が発生する理由は何でしょうか?
更新 - 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 ファイルが私のビルドではAudio object type 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 入力を不適切に開いていますか?