【问题标题】:stream video file mp4 with Spring Boot 2 Controller StreamingResponseBody使用 Spring Boot 2 控制器 StreamingResponseBody 流式传输视频文件 mp4
【发布时间】:2021-01-28 02:44:00
【问题描述】:

我正在尝试使用 Spring Boot 2 流式传输视频文件 mp4,我遵循了一些教程,解决方案应该很简单......就像我在下面复制的控制器......但不适合我。

我不明白为什么.. 当我将网址放入浏览器时,会出现默认视频播放器,正在加载... 超时后,我在浏览器控制台中收到“net::ERR_CONTENT_LENGTH_MISMATCH 200”..

如果我省略 headers.add("Content-Length", Long.toString(file.length()));加载速度非常快,但什么也没有发生......

@Controller
public class StreamController {

    @RequestMapping(path = { "/stream-video-file" }, method = RequestMethod.GET)
    public ResponseEntity<StreamingResponseBody> streamFile(
            HttpServletRequest request,
            HttpServletResponse response) {

        File file = new File("/path/to/file.mp4");
        if (!file.isFile()) {
            return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);

        }

        StreamingResponseBody stream = out -> {

            try {
                final InputStream inputStream = new FileInputStream(file);

                byte[] bytes = new byte[1024];
                int length;
                while ((length = inputStream.read(bytes)) >= 0) {
                    out.write(bytes, 0, length);
                }
                inputStream.close();
                out.flush();

            } catch (final Exception e) {
                LOG.error("Exception while reading and streaming data {} ", e);
            }

        };

        final HttpHeaders headers = new HttpHeaders();
        headers.add("Content-Type", "video/mp4");
        headers.add("Content-Length", Long.toString(file.length()));

        return ResponseEntity.ok().headers(headers).body(stream);
    }
}

我错过了什么?...

编辑----

我找到了另一种方法来完成这项工作,不使用 StreamingResponseBody,而是使用响应标头“Range-Content”。

这里有一个很好的解释:HTTP Range header

这里:https://github.com/saravanastar/video-streaming

【问题讨论】:

    标签: java spring-boot controller video-streaming streamingresponsebody


    【解决方案1】:

    评论这一行:

    headers.add("Content-Type", "video/mp4");
    

    【讨论】:

      猜你喜欢
      • 2016-01-17
      • 2023-03-31
      • 2015-06-29
      • 2020-03-02
      • 1970-01-01
      • 2016-04-10
      • 1970-01-01
      相关资源
      最近更新 更多