Мультиплексирование потока h264: продолжительность результирующего файла меньше, чем время записи

Я мультиплексирую поток H264 с устройства v4l в контейнер avi, используя подход, описанный в следующем ">вопрос о переполнении стека

Результирующие файлы можно воспроизводить, но для (скажем) 30-секундной записи результирующий файл имеет длину всего 10 секунд. Другими словами, после того, как я нажму кнопку «Начать запись» и пока не нажму «Остановить» запись, прошло 30 секунд, но длина файла составляет всего 10 секунд (как показано в проигрывателе Windows Media). Мультиплексирование начинается сразу после того, как я нажму кнопку «Начать запись».

Любые идеи о том, как я могу подойти к этой проблеме?


person user466540    schedule 21.05.2020    source источник
comment
Видео имеет тройную скорость или оно обрезано, но воспроизводится с нормальной скоростью?   -  person Karol Żygłowicz    schedule 21.05.2020
comment
Скорость нормальная, такая же, как и у исходника H264 - видео, я бы сказал, обрезано.   -  person user466540    schedule 21.05.2020


Ответы (1)


Проблема была с параметром 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 = 13, продолжительность файла стала соответствовать ожидаемому времени.

person user466540    schedule 25.05.2020