Блоки mediaReader.readPacket() при попытке прочитать поток rtsp в Xuggler

Я пытаюсь загрузить видео (с библиотекой Xuggler 5.4) из потока rtsp в файл, используя код ниже.

    String inputSource = "rtsp://[ip-address]:[port]/user=[username]&[password]=password&channel=1&stream=1.sdp";
    String outputFilename = "d:/downloadedrtsp.flv";
    try {
        IContainerFormat inFormat = IContainerFormat.make();
        inFormat.setInputFormat("h246");

        IMediaReader mediaReader = ToolFactory.makeReader(inputSource);
        mediaReader.setQueryMetaData(false);

        IMediaWriter mediaWriter = ToolFactory.makeWriter(outputFilename, mediaReader);
        mediaReader.addListener(mediaWriter);

        logger.info("before reading");
        IError error;
        while ((error = mediaReader.readPacket()) == null) {
            logger.info("reading packet");
        }
        logger.info("error: " + error.getDescription());
        logger.info(error.getType());
        logger.info(error.toString());
    } catch (Exception e) {
        e.printStackTrace();
    }

Проблема в том, что после печати "перед чтением" код просто перестает выполняться, и через долгое время он выводит мне три строки из регистратора:

ошибка: неизвестная ошибка

ERROR_EOF

Неизвестная ошибка

Поток прекрасно работает, когда я открываю его в медиаплеере VLC. Я уверен, что в моей конфигурации mediaReader есть какая-то ошибка, но я не знаю, где именно, поскольку у меня очень мало опыта работы с видео. Вот некоторая информация о видео, взятом из VLC:

1 ответ

Кажется, все работает как положено.
Тип ошибки ERROR_EOF отмечает конец входного потока (см. документацию).
Долгое время, которое вы программируете "прекращение выполнения", - это время, которое требуется Xuggler для преобразования видеокадров (на самом деле он не "останавливается", просто перебирайте while петля).

Другие вопросы по тегам