我正在使用libavcodec,版本9.7来编写一个简单的演示,几乎完全像official example中的示例。
但是,我无法打开编码器。此外,av_opt_set(context->priv_data, "preset", "slow", 0)
总会导致粉碎。
这是我的代码:
// other code...
int ret = 0;
avcodec_register_all();
AVCodec* codec = NULL;
AVCodecContext* context = NULL;
AVFrame* frame = NULL;
uint8_t endcode[] = { 0, 0, 1, 0xb7 };
codec = avcodec_find_encoder(AV_CODEC_ID_H264);
if(!codec){
qDebug()<<"cannot find encoder";
return;
}
qDebug()<<"encoder found";
context = avcodec_alloc_context3(codec);
if(!context){
qDebug()<<"cannot alloc context";
return;
}
qDebug()<<"context allocted";
context->bit_rate = 400000;
/* resolution must be a multiple of two */
context->width = 352;
context->height = 288;
/* frames per second */
context->time_base= (AVRational){1,25};
context->gop_size = 10; /* emit one intra frame every ten frames */
context->max_b_frames=1;
context->pix_fmt = AV_PIX_FMT_YUV420P;
qDebug()<<"context init";
// av_opt_set(context->priv_data, "preset", "slow", 0); // this will crush
AVDictionary *d = NULL;
av_dict_set(&d, "preset", "ultrafast",0); // this won't
ret = avcodec_open2(context, codec, &d);
if ( ret < 0) {
qDebug()<<"cannot open codec"<<ret;
return;
}
qDebug()<<"codec open";
// other code...
输出:
编码器找到了
上下文分配
context init
无法打开编解码器-22
[libx264 @ 0340B340] [IMGUTILS @ 0028FC34]图片大小0x10无效
[libx264 @ 0340B340]忽略无效的宽度/高度值
[libx264 @ 0340B340]不支持指定的pix_fmt
我认为宽度/高度无效并且格式化。我不知道这里有什么问题。
任何帮助。 PLZ?
答案 0 :(得分:0)
这是libav的一个问题,我还没有检查过它的问题列表。当我使用另一个日常版本20131101时,代码运行得很好。