gpt4 book ai didi

java - 使用 Spring 和 HTML5 瓶颈搜索/清理本地视频

转载 作者:行者123 更新时间:2023-11-30 05:54:49 25 4
gpt4 key购买 nike

我正在创建一个本地视频库,但我无法弄清楚如何提高视频搜索/清理的性能。当我查看本地存储的视频文件时,需要 10-15 秒才能开始播放,并且使用搜索栏跳转可能需要长达 45 秒的时间。

使用 VLC 打开视频,这一切都是即时的。使用 HTML5 播放器是否存在直接限制,或者问题出在我的后端代码上?

为了提供视频,我在 Controller 中使用 Springboot 并使用以下方法

@GetMapping(value = "/videos/p/{id}", produces = "video/mp4")
public FileSystemResource videoSource(@PathVariable String id) {
Optional<Video> optionalVideo = videoRepository.findById(id);

return optionalVideo
.map(video -> new FileSystemResource(new File(video.getAbsolutePath())))
.orElse(null);
}

我在前端用一个简单的方法调用它

<video width="100%" controls>
<source src="http://localhost:8080/videos/p/{{video.id}}" type="video/mp4">
</video>

有没有明显的方法可以提高性能?

最佳答案

我在 SO 上找到了一些有趣的答案。但我也弄清楚了如何使用 Spring WebFlux 轻松完成此任务。

This post概述了来自 Davin Kevin 的很棒的 MultipartFileSender,它可以工作,但仍然有点慢。正如下面另一个答案所建议的那样,将 InputStream 更改为 RandomAccessFile ,使得清理几乎是即时的。

现在更多地了解我在谷歌上尝试的内容,我发现了 Jira ticket添加 http 字节范围支持。这最终导致了我的解决方案。

@GetMapping(value = "/videos/p/{id}")
public ResponseEntity<UrlResource> getFullVideo(@PathVariable String id) throws MalformedURLException {
Optional<Video> optionalVideo = videoRepository.findById(id);

if (optionalVideo.isPresent()) {
final String videoPath = optionalVideo.get().getAbsolutePath();
final UrlResource video = new UrlResource(String.format("file:%s", videoPath));

return ResponseEntity.status(HttpStatus.PARTIAL_CONTENT)
.contentType(MediaTypeFactory.getMediaType(video)
.orElse(MediaType.APPLICATION_OCTET_STREAM))
.body(video);
}

return ResponseEntity.noContent().build();
}

关于java - 使用 Spring 和 HTML5 瓶颈搜索/清理本地视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53356205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com