Java: как читать поток RTSP кадр за кадром - PullRequest
0 голосов
/ 21 мая 2019

По соображениям производительности я отказался от решения Python-Opnecv / FFmpeg и перешел на Java.

Но, к моему удивлению, я не могу найти лучшего и полного решения, как у нас в Python.Я попытался использовать vlcj, но опять-таки он дает больше интерфейса командной строки.Я не могу найти какой-либо механизм обратного вызова для чтения и анализа всех кадров.

Я также пытался использовать Java Sockets, но не смог ничего сделать, кроме как установить соединение с Ip Camera потоковое h264 видео по RTSP.

Примечание: Оно будет работать в серверной среде, поэтому мы не хотим показывать какой-либо кадр, мы простонужно выполнить некоторые другие операции над кадрами.

Пожалуйста, направьте меня в правильном направлении.

1 Ответ

1 голос
/ 22 мая 2019

Если вы хотите получить доступ к буферу видеокадров во время воспроизведения мультимедиа, у вас есть несколько вариантов.

Я предполагаю, что вы используете vlcj 4.x +, который актуален на момент написания.

Во-первых, вы можете использовать EmbeddedMediaPlayer с CallbackVideoSurface.

. Вы можете использовать MediaPlayerFactory для создания видеоповерхности.

При созданииваша поверхность видео требует RenderCallback реализации, которую вы предоставляете.

Создайте встроенный медиаплеер как обычно и вызовите mediaPlayer.setVideoSurface(), чтобы установить поверхность вашего видео.

Именно этот класс реализации обратного вызова рендеринга будет отозван VLC с необработанными данными видеокадрав виде ByteBuffer при поддержке родной памяти.Затем вы можете выполнить анализ данных в этом байтовом буфере.

Второй подход - вместо этого взглянуть на класс CallbackMediaPlayerComponent - этот класс призван упростить вам выход из-полный рабочий медиаплеер и позволяет подключать только те биты, которые вы хотите настроить.В этом случае вы подключаете реализацию обратного вызова рендеринга для выполнения анализа.

В исходном коде vlcj на странице проекта github есть примеры, которые показывают все это.Один из примеров обрабатывает этот буфер для динамического преобразования видео в оттенки серого, но очевидно, что вы можете делать с кадрами все, что захотите.

Метод называется "onDisplay ()", но вам не нужно на самом делеотображать видео в любом месте, если вы заинтересованы только в проведении некоторого анализа.

Это степень, которую может предоставить vlcj, если вы хотите получить доступ к данным видеокадра.

...