ffmpeg默认的flv打包输出aac的音频是44100的采样率、双声道、16位数据格式,但flv格式是可以支持其它参数的,因此需要修改flvenc.c
在get_audio_flags函数中,有这段代码:
if (enc->codec_id == AV_CODEC_ID_AAC) // specs force these parametersreturn FLV_CODECID_AAC | FLV_SAMPLERATE_44100HZ |FLV_SAMPLESSIZE_16BIT | FLV_STEREO;
其所作的工作是一旦确认是aac音频,就强制指定aac的声音参数,如果有其它配置的aac需要打包,就必须屏蔽该段判断和处理,在随后的switch (enc->codec_id)中加入
上面这部分代码,是依据不同类型的声音参数设置声音标志。case AV_CODEC_ID_AAC:{flags |= FLV_CODECID_AAC | FLV_SAMPLESSIZE_16BIT;switch (enc->sample_rate){case 44100:flags |= FLV_SAMPLERATE_44100HZ;break;case 22050:flags |= FLV_SAMPLERATE_22050HZ;break;case 11025:flags |= FLV_SAMPLERATE_11025HZ;break;case 16000: // nellymoser onlycase 8000: // nellymoser onlycase 5512: // not MP3flags |= FLV_SAMPLERATE_SPECIAL;break;default:av_log(s, AV_LOG_ERROR,"FLV does not support sample rate %d, ""choose from (44100, 22050, 11025)\n", enc->sample_rate);return AVERROR(EINVAL);}}break;