Java 实现大文件(视频)的高效下载,并让前端播放,有什么思路吗?

2023-02-16 11:12:57 +08:00
 Triump

需求背景:

要在网页上播放视频,视频是存储在文件系统( minIO )上,现在的做法是,前端请求后台的文件下载接口,将整个文件下载后返回给前端进行播放。但是这个视频大概有 140M ,整个过程耗时大概 1 分钟了。用户体验很差。

我的思路:

后端提供一个支持文件分片下载的方法,前端通过请求头设置 Range 参数传入指定的范围。比如一个 100M 的文件,每次请求 10M, 但是我不确定前端拿到这 10M 文件后,是否能够播放。。。 如果这个思路可行的话,前端需要用到哪些技术呢?

有没有大佬能够提供一下思路啊?

5082 次点击
所在节点    程序员
38 条回复
mmdsun
2023-02-16 14:32:46 +08:00
你是不是用 Java 先 download 文件,然后再 Response 写返回给页面的?
你应该用 gateway 代理直接转发给页面,这样后端你就需要先下载了
mmdsun
2023-02-16 14:37:17 +08:00
var file = downloadFile("http://xxxxxxxxxx");
Response.write(file);

上面这种换成:

/gateway/download/xxxxxxxxxx => http://file.download/xxxxxxxxxx

要是云存储那边要鉴权加什么请求头的,你网关直接给加上就好。
zzl22100048
2023-02-16 15:11:35 +08:00
能用 m3u8 是最好
最省事就 presignedGetObjectUrl 期限设置一天
mouyong
2023-02-16 15:20:14 +08:00
我有解决方案,可付费提供,见下方图。本地大文件视频在线播放。
1. 大文件视频在线播放不卡顿
2. 大文件视频本地存储,不用担心昂贵的云存储费用

mouyong
2023-02-16 15:22:39 +08:00
在线预览与管理管理本地文件、视频。

renmu
2023-02-16 15:23:38 +08:00
走 m3u8 ,很成熟了
qfdk
2023-02-16 15:24:31 +08:00
m3u8 吧 多简单 流方案.
m3u8 视频格式原理:将完整的视频拆分成多个.ts 视频碎片,.m3u8 文件详细记录每个视频片段的地址。 视频播放时,会先读取.m3u8 文件,再逐个下载播放.ts 视频片段
HTML001
2023-02-16 17:16:25 +08:00
后端将视频转 m3u8, 前端用 hls.js 或者 video.js 播放应该就可以满足
wqhui
2023-02-16 17:31:26 +08:00
m3u8 ,大的在线视频网站都这样玩
HtPM
2023-02-16 18:00:02 +08:00
#16 楼是正规方案,现在基本上都是用 MPEG-DASH 方案,Youtube 采用的这种
123zouwen
2023-02-16 19:04:53 +08:00
前段时间刚做了类似需求, 简单做法就是后端返回给前端 mp4 的视频链接(如果桶不是 public 的话, 后端调用 minio 生成一个临时访问链接), 前端拿到链接即可播放视频, 快进等功能正常
xylxAdai
2023-02-16 19:10:09 +08:00
m3u8 啊。切成流格式,直接播放。
q1angch0u
2023-02-17 00:24:03 +08:00
转 dash + 1
q1angch0u
2023-02-17 00:24:16 +08:00
@q1angch0u 转完存一下,下次接着播
cephei
2023-02-17 10:49:38 +08:00
可以在后台做一层代理,把前端的 Http Range 请求转发到 MinIO
Sum0l
2023-02-17 13:25:32 +08:00
推荐一个 java 版的 ffmpeg https://github.com/bytedeco/javacv
dudubaba
2023-02-17 14:53:08 +08:00
好像除了直接访问,没有一劳永逸的方法,得后端改造一下。
lbunderway
2023-02-17 17:52:00 +08:00
ffmpeg 这个靠谱

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/916579

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX