Чтение потока Java RTSP с VLCJ - PullRequest
       74

Чтение потока Java RTSP с VLCJ

0 голосов
/ 07 декабря 2018

Прежде всего, я хочу отметить, что примеров считывания потока 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.

1 Ответ

0 голосов
/ 23 декабря 2018

Не всегда понятно или непоследовательно, как следует использовать эти переключатели / опции.

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

Вы можете попробовать:

String[] options = {"--network-caching", "400"};

Иногда эти параметры будут работать при вызове playMedia, но в других случаях они должны быть установлены при создании MediaPlayerFactory.

ТакжеВообще говоря, не используйте узкий цикл, такой как while(true), вместо этого используйте Thread.currentThread().join().

...