我使用ffmpeg库,编码视频帧时,偶尔就死在那里不动了,调试下发现是在avcodec_encode_video2()函数中死在那里了。
请教有碰到这个问题的吗?
似乎是我把编码模式调整为低延迟后才发生的:av_opt_set(c->priv_data, "tune", "zerolatency", 0); (c为AVCodecContext*)
谢谢!
这个函数调用前,已经对编码器各个参数都初始化了。我把它们写进一个类了。
[C++] 纯文本查看 复制代码
void CVideoEncoder::EncodeOneFrame(unsigned char *frame_data)
{
av_init_packet(&pkt);//初始化暂存容器
pkt.data = outbuf;
pkt.size = yuv420img_size;
read_yuv_image(picture, video_width, video_height, frame_data, pYuvBuff);//图像RGB数据向YUV数据的转换,函数代码在下面
cout << "Encoding frame no." << frame_number << " . . . " ;
int go_output;
int ret = avcodec_encode_video2(c, &pkt, picture, &go_output);
picture->pts = frame_number;
if (ret < 0) {
fprintf(stderr, "error encoding frame\n");
exit(1);
}
if (go_output) {
cout << "Finished" << endl;
fwrite(pkt.data, 1, pkt.size, video_fp);
av_free_packet(&pkt);
}
else
{
cout << "no output" << endl;
}
frame_number++;
}
|