请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

执行avcodec_send_frame函数出现段错误

老师,您好,我用的ubuntu18.04系统。
执行到avcodec_send_frame函数的时候,发生了如下错误:
段错误 (核心已转储)
确定代码没有错误(按照你课程中的),也没有数组越界和栈溢出。
但是莫名奇妙的出现了这个错误,在网上也找不到相应的解决办法,花费了几个小时的时间也没有解决,还请老师指点一下。

我的代码有和您不一样的地方。如下:
(1)我之前遇到了一个错误是avcodec_open2打开失败,avcodec_open2函数返回值是-22.在网上找了写办法:在创建编码器(avcodec_find_encoder_by_name / avcodec_find_encoder)之前先注册封装格式等信息和注册编码器。具体如下:

av_register_all();			//注册封装格式等信息
avcodec_register_all();		//注册编解码器

而且只能使用avcodec_find_encoder这个函数创建编码器,使用另一个也会出现avcodec_open2函数返回值是-22。
还有一个:我的采样大小必须是AV_SAMPLE_FMT_FLTP才可以,不支持AV_SAMPLE_FMT_S16.

//给编码器设置参数
codec_ctx->sample_fmt = AV_SAMPLE_FMT_FLTP;

上面的三行代码是我与您不一样的地方。
还请老师帮助解决一下。

正在回答 回答被采纳积分+3

1回答

李超 2021-11-26 23:47:37

Ctx 你初始化了吗?

0 回复 有任何疑惑可以回复我~
  • 提问者 发如雪jay #1
    初始化了。我把frame->format 改为:
    	frame->format = AV_SAMPLE_FMT_FLTP;          //视频中是AV_SAMPLE_FMT_S16
    就不发生段错误了。但是又出现了一个新的错误:
    [aac @ 0x565071047680] Input contains (near) NaN/+-Inf
    这个错误,我也没有找到相应的解决办法。那这个该怎么解决呢?
    回复 有任何疑惑可以回复我~ 2021-11-27 12:58:47
  • 提问者 发如雪jay #2
    而且avcodec_send_frame函数的返回值是-22.我猜可能是frame的参数设置错了。但是不知道该如何设置,才能不出错
    回复 有任何疑惑可以回复我~ 2021-11-27 13:09:13
  • 李超 #3
    先确认你的ffmpeg里包括了fdkaac 吗?用命令行验证一下
    回复 有任何疑惑可以回复我~ 2021-11-28 17:10:54
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信