Прежде всего, я хочу отметить, что примеров считывания потока rtsp с камер не так много.
До сих пор я выполнял чтение потока rtsp с использованием vlcj, что было довольно сложно из-за многих проблем..
Чтобы начать создавать приложение для чтения потока rtsp, мне нужно было скачать VLC в версии 2.1.2 , что было важно в моем случае.Затем это добавило две зависимости
vlcj в версии 3.9.0 :
<dependency>
<groupId>uk.co.caprica</groupId>
<artifactId>vlcj</artifactId>
<version>3.9.0</version>
</dependency>
И затем мне пришлось понизить версию JNA до версии 3.5.2 so:
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>3.5.2</version>
</dependency>
В этой конфигурации мне удалось прочитать поток rtsp с таким кодом:
public static void main(final String[] args) {
/* import .dll libraries */
NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "C:\\Program Files\\VideoLAN\\VLC");
Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
/* rtsp stream url */
String mrl = "rtsp://192.168.1.1:5555/h264";
String[] options = { ":network-caching=400" };
/* getting MediaPlayer */
MediaPlayerFactory mediaPlayerFactory = new MediaPlayerFactory(args);
HeadlessMediaPlayer mediaPlayer = mediaPlayerFactory.newHeadlessMediaPlayer();
mediaPlayer.playMedia(mrl, options);
/* infinite loop keeping stream reading alive */
while (true) {
}
}
До сих пор я использовал простой HeadlessMediaPlayer
только для тестов.
Проблема, с которой я столкнулся, связана с огромной задержкой между камерой и моим потоком, потому что она составляет около 1 с, что не очень хорошо.Используя VLC, я мог установить задержку на 300-500 мс, и это было действительно хорошо, но, как вы видите здесь String[] options = {":network-caching=400"};
, мое кеширование установлено на 400. Но оно не сильно меняется.Поток имеет слишком большую задержку.Кто-нибудь исправил это?
Другой вопрос касается преобразования этого потока rtsp в поток http, поэтому, возможно, я мог бы использовать его в JavaFX, потому что есть медиаплеер, но он не поддерживает поток rtsp, только HTTP.