2014-01-16 194 views
0

我试图转换AAC音频流进行播放。我发现我需要从AV_SAMPLE_FMT_FLTP转换为AV_SAMPLE_FMT_S16,但是当我这样做时,音频以大约一半的速度播放。FFmpeg从AAC转换后缓慢播放音频

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

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

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