Home > Mobile >  How can I stream video with Spring Boot
How can I stream video with Spring Boot

Time:03-06

I'm trying to streaming videos which uploaded with MultipartFile and saved video path to database. When I execute a get request to this method "http://localhost:8080/video/{id}" video is just downloading but not showing something, also I tried to watch video with html but no action.

 public ResponseEntity<InputStreamResource> getVideoById(Long id) throws FileNotFoundException {
    Video video = this.videoRepository.findById(id).get();
    
    java.io.File file = new java.io.File(video.getFile().getUrl());
    InputStream fis = new FileInputStream(file);
    
    
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.valueOf(video.getFile().getContentType()));
    headers.set("Accept-Ranges", "bytes");
    headers.set("Expires", "0");
    headers.set("Cache-Control", "no-cache, no-store");
    headers.set("Connection", "keep-alive");
    headers.set("Content-Transfer-Encoding", "binary");
    
    return new ResponseEntity<>(new InputStreamResource(fis), headers, HttpStatus.OK);
}

CodePudding user response:

I dont know about InputStreamResource but I got this working long time ago with a ResponseEntity wrapping byte[]. Try out returning a Response with these headers with data being a byte[] obtained by the video file:

ResponseEntity.status(HttpStatus.PARTIAL_CONTENT)
                .header("Content-Type", "video/"  yourFileType)
                .header("Accept-Ranges", "bytes")
                .header("Content-Length", yourContentLength)
                .header("Content-Range", "bytes "   rangeStart   "-"   
                        rangeEnd   "/"   fileSize)
                .body(data);

CodePudding user response:

I'd recommend using Spring Webflux for video streaming :

https://www.vinsguru.com/spring-webflux-video-streaming/

  • Related