2:使用2012.8.31日编译的库 编码mp3 函数
avcodec_decode_audio4(); 编码
avcodec_encode_audio2(); code
调用上面两个函数出现的问题是:当某些解码器对AVCodec:frame_size填充时,不一样解码器在解码时设定的frame_size 和AVFrame::nb_samples过大,从而致使在编码的时出错。对于MP3编码器来讲,该编码器最大能支持1152(该值能够再源码中lsf = sample_rate < (24000+32000)/2和该函数mp_decode_frame中获得,该函数位于libavcodec/mpegaudiodec)的帧数(这里的帧数实际就是样本大小,但不是采样大小,只是AVframe里面的样本数) 源码
解决方法:将解码获得的AVFrame 进行分拆,将其nb_samples分拆成当前编码器能支持最大的frame_size或小于frame_size的大小, io
分拆时要依据当前AVFrame::nb_samples的大小,该值与解压后的数据大小是这样的关系AVFrame::linesize[0] = AVFrame::nb_samples*2*AVCodecContext::channals;(该2表示每样本的字节数:16/8),根据这个关系,咱们此时能够将AVFrame::data[0] 的数据分拆成若干个AVFrame, 分拆后新的AVFrmae除了linesize,data,nb_sampels 改变,其他不用改,用原来AVFrame的值,赋予新的AVFrame的结构变量 编译