当前位置: 首页 > 知识库问答 >
问题:

使用Spring Boot 2控制器StreamingResponseBody传输视频文件mp4

顾梓
2023-03-14

我试图用Spring Boot 2流式传输视频文件mp4,我遵循了一些教程,解决方案应该很简单...

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

如果我省略标题。添加(“内容长度”,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);
    }
}

我错过了什么?。。。

编辑-

我找到了另一种方法来完成这项工作,不使用Streaming响应体,而是使用响应头“范围-内容”。

这里有一个很好的解释:HTTP范围头

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

共有1个答案

关宏毅
2023-03-14

评论这一行:

headers.add("Content-Type", "video/mp4");
 类似资料:
  • 问题内容: Tl; Dr-问题: 用Node.js处理将视频文件流传输到html5视频播放器以 使视频控件继续工作 的正确方法是什么 ? 我 认为 这与处理标头的方式有关。无论如何,这是背景信息。代码 有点 冗长,但是非常简单。 客户: 服务器: 但是此方法仅限于大小小于1GB的文件。 流式传输(任何大小)视频文件 通过利用,服务器可以读取流中的文件,而不是一次将其全部读取到内存中。这听起来像做事

  • 问题内容: Tl; Dr-问题: 用Node.js处理将视频文件流传输到html5视频播放器以 使视频控件继续工作 的正确方法是什么 ? 我 认为 这与处理标头的方式有关。无论如何,这是背景信息。代码 有点 冗长,但是非常简单。 使用Node将小视频文件流化为HTML5视频很容易 我学习了如何非常轻松地将小型视频文件流式传输到HTML5视频播放器。使用此设置,控件可以正常工作,而我的视频也完美无缺

  • 将RTMP流作为输入或输出处理,并且运行良好。 我想将一些视频(由python脚本管理的动态播放列表)流到RTMP服务器上,我目前正在做一些非常简单的事情:用FFMPEG将我的视频一个接一个地流到RTMP服务器上,但是这会在每次视频结束时导致连接中断,当下一个视频开始时,流就准备好了。 我想流那些视频没有任何连接中断连续,然后流可以被正确地观看。 我使用这个命令将我的视频一个接一个地流到服务器

  • 用Node.js处理将视频文件流到html5视频播放器以使视频控件继续工作的正确方法是什么? 我认为这与头的处理方式有关。不管怎样,这是背景资料。代码有点长,但是,它非常简单。 我学会了如何将小视频文件流式传输到HTML5视频播放器。有了这个设置,控制工作没有任何工作,我的部分,视频流完美。这里有一个完整的工作代码和示例视频的工作副本,可以在Google Docs上下载。 客户: 服务器: 但此方

  • 问题内容: 我想使用servlet将音频/视频文件流式传输到Web。 我尝试使用以下servlet: 以及以下HTML: 但是,播放器只是在加载…正在加载…正在加载… 这是怎么引起的,我该如何解决? 问题答案: 许多媒体播放器要求服务器支持所谓的HTTP范围请求。也就是说,它必须能够根据要求返回带有标头的媒体文件的特定部分。例如,在10MB长的文件中,只有位于精确索引1000的字节,直到2000为

  • 问题内容: 是的,这是一个冗长的问题,涉及很多细节… 所以,我的问题是:如何将分段上传到Vimeo? 对于想要在自己的计算机上进行复制和调试的任何人: 这是您需要的东西: 我的代码在这里。 包括在此处找到的抄写员库 拥有至少大于10 MB的有效视频文件(mp4),并将其放在目录中,或更改该代码以指向您所在的位置。 而已!谢谢你的协助! 重大更新: 我在此处的代码中为Vimeo保留了有效的API密钥