2

我正在使用以下stackoverflow 问题中概述的方法将 H264 流从 v4l 设备混合到 avi 容器

生成的文件是可播放的,但对于(比如说)30 秒的录制,生成的文件只有 10 秒的长度。换句话说,一旦我按下“开始录制”按钮直到我按下“停止”录制,它已经过去了 30 秒,但文件只有 10 秒的长度(如 Windows Media player 所示)。按下“开始录制”按钮后,Muxing 立即开始。

关于如何解决这个问题的任何想法?

4

1 回答 1

0

问题出在 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,文件持续时间就会与预期时间保持一致。

于 2020-05-25T06:11:16.627 回答