我正在创建一个本地视频库,但我无法锻炼如何提高视频搜索/擦除的性能。当我看到一个本地存储的视频文件时,它需要10-15秒才能开始播放,而在搜索栏中跳跃则需要45秒的时间。
用VLC打开视频,这一切都是即时的。使用HTML5播放器是有一个直接的限制,还是我的后端代码出现了问题?
为了提供视频,我在控制器中使用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>有明显的方法来提高这里的表现吗?
发布于 2018-11-18 00:48:18
我找到了一些有趣的答案。但我也想出了如何使用轻松地完成这一任务。
这个职位勾勒出了达文·凯文( Davin )给出的令人敬畏的MultipartFileSender,它成功了,但还是有点慢。将InputStream更改为RandomAccessFile,这是另一个更低的答案,这使得擦擦几乎是即时的。
现在我知道了更多关于谷歌的信息,我找到了Jira机票来添加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();
}https://stackoverflow.com/questions/53356205
复制相似问题