Если вы хотите получить доступ к буферу видеокадров во время воспроизведения мультимедиа, у вас есть несколько вариантов.
Я предполагаю, что вы используете vlcj 4.x +, который актуален на момент написания.
Во-первых, вы можете использовать EmbeddedMediaPlayer
с CallbackVideoSurface
.
. Вы можете использовать MediaPlayerFactory
для создания видеоповерхности.
При созданииваша поверхность видео требует RenderCallback
реализации, которую вы предоставляете.
Создайте встроенный медиаплеер как обычно и вызовите mediaPlayer.setVideoSurface()
, чтобы установить поверхность вашего видео.
Именно этот класс реализации обратного вызова рендеринга будет отозван VLC с необработанными данными видеокадрав виде ByteBuffer
при поддержке родной памяти.Затем вы можете выполнить анализ данных в этом байтовом буфере.
Второй подход - вместо этого взглянуть на класс CallbackMediaPlayerComponent
- этот класс призван упростить вам выход из-полный рабочий медиаплеер и позволяет подключать только те биты, которые вы хотите настроить.В этом случае вы подключаете реализацию обратного вызова рендеринга для выполнения анализа.
В исходном коде vlcj на странице проекта github есть примеры, которые показывают все это.Один из примеров обрабатывает этот буфер для динамического преобразования видео в оттенки серого, но очевидно, что вы можете делать с кадрами все, что захотите.
Метод называется "onDisplay ()", но вам не нужно на самом делеотображать видео в любом месте, если вы заинтересованы только в проведении некоторого анализа.
Это степень, которую может предоставить vlcj, если вы хотите получить доступ к данным видеокадра.