Пролистывание H264

Здравствуйте. Работаю тут с видео. Кодирование и запись делаю с помощью OpenH264Lib. Вроде все нормально. Пишется читается. Но вот нужно сделать быстрый переход к любому кадру. И тут начинается хрень.
Я так понял что нужно каким то образом получить ключевые кадры чтоли. Но VLC как то справляется сам без них. Если доставать данные нужного кадра и пытаться декодировать то либа говорит что невозможно. И приходится с самого нуля прогонять декодирование до нужного индекса. Но это же дичь полная… И времени занимает тьму.
Грузить файл в память тоже не самая лучшая идея ведь файл может весить и 12 гигов …
В общем как правильно то?? Кто нибудь знает??

Вообще в VLC другая библиотека: http://www.videolan.org/developers/x264.html
Но конечно может быть и эта умеет.

Да, но может быть библиотеки сами это делают?
Не знаю на каком уровне абстракции они, я обычно просто вызывал какой-нибудь ffmpeg чтоб что-то с видео сделать :kolobokkaeef:

Ссылка из гугла с кратким описанием процесса: https://video.stackexchange.com/a/3182

а ffmpeg позволяет управлять процессом?? То есть получить массив данных кадра и самому его обработать и вывести куданибудь. В это время библиотека должна ждать сколько угодно долго. То есть мой софт должен определять скорость обработки кадров.
Что то с ффмпегом слишком все наворочено было поэтому я отказался от него …

Я его использовал для просто базовой обработки видео: склеить, обрезать, вырезать аудио/видео, …
В основном через консольный интерфейс (есть обертки типа https://github.com/rosenbjerg/FFMpegCore#api).

Но вот блогопосты о том, как читать кадры через stdout:
https://www.drmaciver.com/2010/12/reading-video-frame-by-frame-with-ffmpeg/
https://zulko.github.io/blog/2013/09/27/read-and-write-video-frames-in-python-using-ffmpeg/

VCL Player всё зависит от установленных кодеков и их настройке во время установки.

а ffmpeg позволяет управлять процессом?? То есть получить массив данных кадра и самому его обработать и вывести куданибудь. В это время библиотека должна ждать сколько угодно долго. То есть мой софт должен определять скорость обработки кадров.
Что то с ффмпегом слишком все наворочено было поэтому я отказался от него …

FFMpeg позволяет и нет там ничего новороченого.

http://dranger.com/ffmpeg/tutorial07.html
https://stackoverflow.com/questions/17546073/how-can-i-seek-to-frame-no-x-with-ffmpeg

Туторилы старые проще смотреть исходники FFPlay
https://github.com/FFmpeg/FFmpeg/blob/master/fftools/ffplay.c

Ну там си. Обертку надо под шарп.

Это обертка над консольной версией, как и выше

Там только простая обработка, получение инфы.

GStreamer говорят проще.

https://gstreamer.freedesktop.org/documentation/tutorials/basic/time-management.html?gi-language=c

С поддержкой .NET правда не очень понятно.

Тут


почему-то пишут

Supported Platforms

  • Linux
  • Mac OS X

но есть например

Supported Platforms

Any operating system and environment that GStreamer and .NET Core 3.1 can run on. We tested on Windows 10 1909, macOS Catalina and Ubuntu 18.04.

Полистал документы… что то не создалось впечатление что проще …

Сейчас с помощью Open264 удалось понять где расположены ключевые кадры. Запоминаю их индексы и при промотке с этих ключевых пролистываю. Скорость достаточно высокая, а если еще и ключевые кадры часто стоят то вообще идеально быстро мотает.