我正在尝试转换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)
答案 0 :(得分:0)
您没有显示实际的音频编码代码,因此我推测您可能无法正确处理重采样。请注意,您从重新采样操作中读取的数据少了两倍(例如,如果传递80个字节,则将从重新采样器中读取40个数据。)
您可以查看我的视频编写代码,并剥离音频编码部分。它在这里:http://sourceforge.net/p/karlyriceditor/code/HEAD/tree/src/ffmpegvideoencoder.cpp