在使用avcodec_send_frame 对于音频数据进行编码的时候报了读取位置 0x0000000000000770 时发生访问冲突,一开始不知道是什么问题,看了下函数声明:
int avcodec_send_frame(AVCodecContext *avctx, const AVFrame *frame);经过参数的各个成员逐个检验,发现参数avctx的codec的sample_fmt值设置的是AV_SAMPLE_FMT_FLTP而frame参数的format设置为AV_SAMPLE_FMT_FLT,不一致,修改后再运行就没有报错了。
这个sample_fmt的值如果设置不正确还可能引起avcodec_open2函数返回-22。