我正在使用以下stackoverflow 问题中概述的方法将 H264 流从 v4l 设备混合到 avi 容器
生成的文件是可播放的,但对于(比如说)30 秒的录制,生成的文件只有 10 秒的长度。换句话说,一旦我按下“开始录制”按钮直到我按下“停止”录制,它已经过去了 30 秒,但文件只有 10 秒的长度(如 Windows Media player 所示)。按下“开始录制”按钮后,Muxing 立即开始。
关于如何解决这个问题的任何想法?
我正在使用以下stackoverflow 问题中概述的方法将 H264 流从 v4l 设备混合到 avi 容器
生成的文件是可播放的,但对于(比如说)30 秒的录制,生成的文件只有 10 秒的长度。换句话说,一旦我按下“开始录制”按钮直到我按下“停止”录制,它已经过去了 30 秒,但文件只有 10 秒的长度(如 Windows Media player 所示)。按下“开始录制”按钮后,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,文件持续时间就会与预期时间保持一致。