ffmpeg初始化AVCodecContext avcodec_open()函数问题
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,不知道是什么原因。
开发环境为在开发板上。