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

您没有显示实际的音频编码代码,所以我推测您可能无法正确处理重新采样。请注意,您从重采样操作中读取的数据减少了两倍(即,如果您传递 80 个字节,您将从重采样器中读取 40 个字节)。

你可以看看我的视频编写代码,去掉音频编码部分。它在这里:http: //sourceforge.net/p/karlyriceditor/code/HEAD/tree/src/ffmpegvideoencoder.cpp

于 2014-01-17T23:12:32.230 回答