用Core Audio采集麦克风语音并生成aac文件,AAC编码出现Input contains (near) NaN/+-Inf,查了有些说是因为使用了AV_SAMPLE_FMT_S16,不过因为我使用的AV_SAMPLE_FMT_FLTP同样出现这个问题,但因为不是所有都报这个错误,偶尔有一帧报这个问题,最终结果也能生成aac,使用播放器播放也正常,通过报错日志查看了源码,在libavcodec文件夹下的aacenc.c文件中,在
static int aac_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr)函数中,
for (k = 0; k < 1024; k++) {
if (!(fabs(cpe->ch[ch].coeffs[k]) < 1E16)) { // Ensure headroom for energy calculation
av_log(avctx, AV_LOG_ERROR, "Input contains (near) NaN/+-Inf\n");
return AVERROR(EINVAL);
}
}
猜想是因为有些帧的数据采集后不满AVFrame帧的音频样本数,导致的问题,这样也解释了偶尔有一两个帧报这个错误,生成的aac整体播放还正常,但也有一些噪音,不知道是否是这个问题导致,还有待继续了解。