0

再生用に AAC オーディオ ストリームを変換しようとしています。AV_SAMPLE_FMT_FLTP から AV_SAMPLE_FMT_S16 に変換する必要があることを発見しましたが、そうするとオーディオが約半分の速度で再生されます。

swr = swr_alloc();
assert(av_opt_set_int(swr, "in_channel_layout", audioContext->channel_layout, 0) == 0);
assert(av_opt_set_int(swr, "out_channel_layout", audioContext->channel_layout, 0) == 0);
assert(av_opt_set_int(swr, "in_sample_rate", audioContext->sample_rate, 0) == 0);
assert(av_opt_set_int(swr, "out_sample_rate", 44100, 0) == 0);
assert(av_opt_set_int(swr, "in_sample_fmt", audioContext->sample_fmt, 0) == 0);
assert(av_opt_set_int(swr, "out_sample_fmt", AV_SAMPLE_FMT_S16, 0) == 0);
swr_init(swr);

変換するコードがあります。入力サンプル レートは 44100 で、オーディオはステレオです。

私はコードを呼び出します

swr_convert(swr, &output, aDecodedFrame->nb_samples, (const uint8_t**)aDecodedFrame->extended_data, aDecodedFrame->nb_samples) >= 0)
4

1 に答える 1

0

実際のオーディオ エンコーディング コードを示していないので、リサンプリングを適切に処理できない可能性があると推測します。リサンプリング操作から読み取るデータは 2 倍少ないことに注意してください (つまり、80 バイトを渡すと、リサンプラーから 40 を読み取ることになります)。

私のビデオ書き込みコードを見て、オーディオエンコーディング部分を取り除いてください。ここにあります:http://sourceforge.net/p/karlyriceditor/code/HEAD/tree/src/ffmpegvideoencoder.cpp

于 2014-01-17T23:12:32.230 に答える