ServletOutputStream не удалось очистить:JAVA

Программисты JAVA общаются здесь
Anonymous
ServletOutputStream не удалось очистить:

Сообщение Anonymous »

Я пытаюсь преобразовать файл m3u8 в WebM с помощью ffmpeg и транслировать его в браузер.
Я хочу, чтобы он воспроизводился в браузере без использования JavaScript.
Метод потокового видео:

Код: Выделить всё

 public void streamVideo(OutputStream os ){

String url = "m3u8file.m3u8";

byte[] bytes = new byte[BUFFER];
int bytesRead = -1;

ProcessBuilder pb = new ProcessBuilder(
"ffmpeg",
"-i", url,
"-c:v", "libvpx-vp9",
"-b:v", "1M",
"-c:a", "libopus",
"-b:a", "128k",
"-f", "webm",
"pipe:1"
);
pb.redirectErrorStream(true);

try {
Process process = pb.start();
try (
InputStream is = process.getInputStream()){

while((bytesRead = is.read(bytes)) != -1){
os.write(bytes, 0 , bytesRead);
os.flush();
}

}catch (IOException ex){
ex.printStackTrace();
}

}catch (IOException ex){
ex.printStackTrace();
}

}

}
Веб-контроллер

Код: Выделить всё

@Autowired
private VideoService videoService;

@GetMapping("/stream")
public ResponseEntity streamVideo(@RequestHeader(value = "Range", required = false) String rangeHeader) {
HttpHeaders headers = new HttpHeaders();

headers.add("Content-Type", "video/webm");
headers.add("Accept-Ranges", "bytes");

StreamingResponseBody responseStream  = os ->{
videoService.streamVideo(os);
};
return new ResponseEntity(responseStream, headers, HttpStatus.PARTIAL_CONTENT);
}
Когда я открываю /stream, я получаю сообщение об ошибке в приложении Spring.
"ServletOutputStream не удалось очистить: java.io.IOException: установленное соединение было прервано программным обеспечением на вашем хост-компьютере"
  • В Firefox в консоли я получил 2 ошибки
    Не могу декодировать мультимедийный ресурс:
    И не могу декодировать мультимедийный ресурс: Код ошибки: NS_ERROR_DOM_MEDIA_METADATA_ERR (0x806e0006)
    И в окне, в котором будет отображаться видео, написано: «Не найдено видео с поддерживаемым форматом и типом MIME»

    В Chrome просто ничего не происходит
  • А в Firefox, когда я открываю источник представления, я вижу информация о потоке, а затем появляется тарабарщина, которая, как я полагаю, представляет собой байты из видео. Тарабарщина прекращается, когда я получаю, что ServletOutputStream не удалось очистить: в консоли весной
Извините, если перевод кодов ошибок затруднен чтобы понять

Подробнее здесь: https://stackoverflow.com/questions/789 ... d-to-flush

Вернуться в «JAVA»