从 AAC 转换后 FFmpeg 播放音频缓慢
Posted
技术标签:
【中文标题】从 AAC 转换后 FFmpeg 播放音频缓慢【英文标题】:FFmpeg playing audio slowly after conversion from AAC 【发布时间】:2014-01-16 08:05:55 【问题描述】:我正在尝试转换 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)
【问题讨论】:
【参考方案1】:您没有显示实际的音频编码代码,所以我推测您可能无法正确处理重采样。请注意,您从重采样操作中读取的数据减少了两倍(即,如果您传递 80 个字节,您将从重采样器中读取 40 个字节)。
你可以看看我的视频编写代码,去掉音频编码部分。在这里:http://sourceforge.net/p/karlyriceditor/code/HEAD/tree/src/ffmpegvideoencoder.cpp
【讨论】:
以上是关于从 AAC 转换后 FFmpeg 播放音频缓慢的主要内容,如果未能解决你的问题,请参考以下文章
iOS-FFmpeg实现简单播放器(编译fak-aac+x264+sdl)