Я просто пытаюсь сохранить те же кадры на видео из буфера, где я правильно сохранил растровый кадр и отметку времени кадра.
writer1 = new VideoFileWriter();
this.writer1.Width = this.videoSourceEndo.VideoResolution.FrameSize.Width;
this.writer1.Height = this.videoSourceEndo.VideoResolution.FrameSize.Height;
this.writer1.VideoCodec = VideoCodec.H264;
this.writer1.BitRate = (this.videoSourceEndo.VideoResolution.FrameSize.Height * this.videoSourceEndo.VideoResolution.FrameSize.Width * 30);
this.writer1.VideoOptions["preset"] = "superfast";
this.writer1.VideoOptions["tune"] = "zerolatency";
writer1.Open("test_HDMI.mp4");
(...)
writer1.WriteVideoFrame(endoFrameBuffer[endoFrameBuffer.Tail],endoFrameBuffer.getframetime(endoFrameBuffer.Tail));
Но в Visual Studio (не на первом кадре) я получаю эту ошибку: Accord.Video.VideoException: 'Ошибка при записи видеокадра. Ошибка -22: Неверный аргумент. Дополнительные сведения см. в выводе консоли.'
И на консоли: Приложение предоставило неверный, немонотонно увеличивающийся dts для мультиплексора в потоке 0: 512 >= 512
Я не знаю причину этого, потому что при отладке все значения кажутся правильными. (Пожалуйста, дайте мне знать, если вам нужно больше кода)
time_base
(чего я здесь не вижу). Итак, ваша проблема заключается здесьendoFrameBuffer.getframetime(endoFrameBuffer.Tail)
давайте посмотрим код - person the kamilz   schedule 08.03.2018public TimeSpan getframetime(int index) { return _timeBuffer[index]; }
- person Eduardo Preto   schedule 08.03.2018endoFrameBuffer.Enqueue(eventArgs.Frame,DateTime.Now - _firstFrameTime.Value);
при запуске события newframe. Тогда на другом потоке я просто записываю каждый кадр из RingBuffer. - person Eduardo Preto   schedule 08.03.2018fps
представляет собой этот видеопоток (потому что pts=512 для меня непривычен). МетодgetFrameTime
возвращает значениеpts
? - person the kamilz   schedule 08.03.2018