修改FFmpeg encode_audio示例转AMR时遇invalid fastbin entry错误求助
问题描述
- 编译FFmpeg后,运行默认的
encode_audio示例,使用MP2编码可正常工作 - 修改示例代码,将编码ID替换为
AV_CODEC_ID_AMR_NB,并调整参数:bit_rate设为12200sample_rate设为8000channel_layout设为AV_CH_LAYOUT_MONO
- 运行修改后的代码出现
invalid fastbin entry (free)错误 - 确认FFmpeg CLI可正常将音频编码为AMR,排除编译或链接环节问题
解决方法
问题并非AMR编码特有——只要将声道布局改为AV_CH_LAYOUT_MONO,该示例对所有编码格式都会触发错误。根源在于示例中的信号生成代码硬编码为双声道,即使修改了声道布局参数,生成的PCM数据仍保持双声道格式,导致编码时内存操作异常。
需要修改信号生成的代码块:
原示例中生成双声道样本的代码(类似如下):
for (int i = 0; i < nb_samples; i++) { samples[0][i] = sin(2 * M_PI * 440 * i / sample_rate); samples[1][i] = samples[0][i]; }
修改为单声道版本:
for (int i = 0; i < nb_samples; i++) { samples[0][i] = sin(2 * M_PI * 440 * i / sample_rate); }
同时确保代码中nb_channels参数与AV_CH_LAYOUT_MONO对应设置为1,保证输入PCM数据的声道数与编码参数一致。
内容的提问来源于stack exchange,提问作者Mohammadreza Rostam
相关产品推荐
相关产品推荐

