Как правильно возвращать .m3u8 файл в Spring Boot?

Я пишу сервер на Spring Boot, на который пользователи могут загружать видео, а потом могут их смотреть. С помощью ffmpeg я конвертирую загружаемое видео в формат .m3u8. Ниже я добавил код моего VideoController, который возвращает файлы .m3u8 и .ts по запросу клиента:

@GetMapping(value = "/getVideo/{video_id}/{file_name}", produces = MEDIA_TYPE) // MEDIA_TYPE = "application/x-mpegURL"
public ResponseEntity<FileSystemResource> getFile(
        HttpServletResponse response,
        @PathVariable("video_id") String videoId,
        @PathVariable("file_name") String fileName
) throws IOException {
    final HttpHeaders headers = new HttpHeaders();
    response.setHeader("Content-Disposition", String.format("attachment; filename=%s", fileName));

    String path = String.format("/tmp/videos/%s/720p/%s", videoId, fileName);
    return new ResponseEntity<>(new FileSystemResource(path), headers, HttpStatus.OK);
}

Сгенерированный файл .m3u8 выглядит как-то так:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:12
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:12.400000,
video0.ts
#EXTINF:9.650000,
video1.ts
#EXTINF:9.683333,
video2.ts
#EXTINF:7.983333,
video3.ts
#EXT-X-ENDLIST

Проблема: При попытке запустить видеопоток (файл .m3u8) в Safari видео не запускается, а должно запускаться. Вместо этого Safari предлагает скачать файл. В сторонних плеерах, которые поддерживают формат .m3u8, видео тоже не запускается.

Моё предположение, что проблема возникает из-за заголовка Content-Disposition. Если это так, то как можно удалить заголовок Content-Disposition в Spring Boot? Если я пытаюсь его удалить, то значение заголовка становится равным inline;filename=f.txt, удалить его не получается.


Ответы (0 шт):