0

カスタムビルドの 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 入力を不適切に開いていますか?

4

1 に答える 1

1

まず、オブジェクト タイプ 3 は AAC-SSR (ISO 14496-3 で定義されています) であり、私の知る限り、ffmpeg デコーダではサポートされていません。h.264 エラーに関しては、「サイズが指定されていません」というメッセージは、ビデオ解像度でデコーダを構成できなかったという事実を示しています。解像度は、AVC エレメンタリ ストリームの SPS/PPS NALU で指定されます。

FFmpeg (具体的には libavcodec) は、ストリームを数秒間分析して、デコーダーを構成するために必要なパラメーターを決定します。ストリームの長さが 0 秒だったため、デコーダが適切に構成されていませんでした。したがって、エラー。

于 2013-10-02T17:58:30.267 に答える