Блоки 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
петля).