我正在使用下面概述的方法将H264流从v4l设备转到avi容器中。stackoverflow问题
结果文件是可以播放的,但是(比如说)30秒的录音,结果文件只有10秒长。换句话说,一旦我按下 "开始录制 "按钮,直到我按下 "停止 "录制,已经过了30秒,但文件只有10秒长(如Windows媒体播放器所示)。一旦我按下 "开始录制 "按钮,Muxing就立即开始。
有什么办法可以解决这个问题吗?
问题出在fps参数上。
AVStream *pst = avformat_new_stream(fc, 0);
vi = pst->index;
AVCodecContext *pcc = pst->codec;
_M;
avcodec_get_context_defaults3(pcc, AVMEDIA_TYPE_VIDEO);
pcc->codec_type = AVMEDIA_TYPE_VIDEO;
pcc->codec_id = codec_id;
pcc->bit_rate = br;
pcc->width = w;
pcc->height = h;
pcc->time_base.num = 1;
int fps = 30; // problem here
pcc->time_base.den = fps;
事实证明,H264流产生13帧fps。一旦我让fps=13,文件的持续时间变得与预期时间一致。