ffmpeg初始化AVCodecContext avcodec_open()函数问题

beijie1015 2017-07-27 08:40:11
avcodec_init();
av_register_all();
avcodec_register_all();
output_body.outputcodec = avcodec_find_encoder(CODEC_ID_H264); //函数用于查找一个与codec ID相匹配的已注册的编码器。
if (!output_body.outputcodec)
{
printf("codec not found\n");
return 0;
}
output_body.outputcodecctx = avcodec_alloc_context(); //函数用于分配一个AVCodecContext并设置默认值,如果失败返回NULL,并可用av_free()进行释放。
if (output_body.outputcodecctx == NULL)
{
printf("context could not found\n");
return 0;
}

output_body.outputcodecctx->bit_rate = 400000; //设置采样参数,即比特率
/* resolution must be a multiple of two */// 设置分辨率,必须是2的倍数
output_body.outputcodecctx->width = width;
output_body.outputcodecctx->height = height;
/* frames per second *///设置帧率//该帧率为25,其实timebase = 1/framerate,分别为分子和分母。
output_body.outputcodecctx->time_base.den = 25; //设置速度的
output_body.outputcodecctx->time_base.num = 1;
output_body.outputcodecctx->gop_size = 10; /* emit one intra frame every ten frames *///设置GOP大小,该值表示每10帧会插入一个I帧(intra frame)。
output_body.outputcodecctx->max_b_frames = 1;//设置B帧最大数, c->max_b_frames = 1; 该值表示在两个非B帧之间,所允许插入的B帧的最大帧数。
output_body.outputcodecctx->pix_fmt = PIX_FMT_YUV420P; //设置像素格式,该值将像素格式设置为YUV420P。
output_body.outputcodecctx->me_range = 0;
output_body.outputcodecctx->max_qdiff = 3;
output_body.outputcodecctx->qmin = 2;
output_body.outputcodecctx->qmax = 31;
output_body.outputcodecctx->qcompress = 0.5;
if (avcodec_open(output_body.outputcodecctx, output_body.outputcodec) < 0) //函数用给定的AVCodec来初始化AVCodecContext
{
printf("could not open codec\n");
return 0;
}
执行avcodec_open()后,出现了Segmentation fault,不知道是什么原因。
开发环境为在开发板上。
...全文
653 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
CyberLogix 2017-07-28
  • 打赏
  • 举报
回复
传入的参数有问题,单步调试avcodec_open函数看挂在那里了
小猪_sun 2017-07-28
  • 打赏
  • 举报
回复
怀疑是传入的参数有问题,还有就是查看前面的初始化是否正常,看你代码没有进行异常判断
beijie1015 2017-07-27
  • 打赏
  • 举报
回复
求大神指点!

2,543

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧