项目是 spring,目前功能是上传 mp4 文件,播放的时候是从后端读取文件流,放到前端 video 标签里。
但是播放的视频文件大于 30M 的时候,浏览器加载就会变得很慢,如果播放大于 100M 就无法短时间内一次性加载到前端。
目前的方案是想利用 video 下的 source 标签,但是使用文件流就无法播放。
请问各位经验丰富的大佬,有没有成熟的方案可以提供吗?网页链接也可以。不胜感激
1
av1254 2019-11-17 18:32:48 +08:00
m3u8 了解一下
|
2
codebigbang OP @av1254 不懂就问~
请问把 mp4 切片以后,是不是只要控制器里处理 m3u8 请求和 ts 请求就可以了? |
3
cst4you 2019-11-17 19:41:51 +08:00
flvjs, 用 flv 格式, 关闭 lazyload, 可以一次加载完
https://www.beatstage.com/play/400 我自己的音游用这种模式来加载视频, 因为是游戏肯定就不可能边放边播, 缓冲不足了卡住那就很尴尬了 |
4
duan602728596 2019-11-17 23:53:26 +08:00 via iPhone
你的服务不支持 HTTP 206 吗?
|
5
againstodds 2019-11-18 08:39:43 +08:00
了解下 ffmpeg -movflags faststart
视频文件可以不需要全部下载完再播放,可以边下载边播放 |
6
Latin 2019-11-18 10:26:17 +08:00
有钱就上 nvr
|
7
codebigbang OP 方案总结:
1、使用 m3u8,把 MP4 切成 m3u8 和若干 ts 文件。我的问题是处理 m3u8 和 ts 请求是自己处理吗?@av1254 2、关于 HTTP 206,range 之后获取的数据可以直接播放吗?@duan602728596 3、关于 flv,有详细的教程或者链接吗?拜托了 @cst4you |
8
Latin 2019-11-18 15:11:13 +08:00
|
9
duan602728596 2019-11-18 15:52:29 +08:00 via iPhone
@codebigbang 当然可以
|
10
cst4you 2019-11-18 19:21:53 +08:00
|
11
codebigbang OP @duan602728596 我之前尝试过把读取的 base64 编码的数据拼接在之前已经存在的 video src 里,但是这样会导致正在播放的播放器彻底加载不出来视频数据。
所以想请问一下后台读取过来的数据是怎么保证不卡顿加载上去的? |
12
duan602728596 2019-11-18 22:36:23 +08:00
@codebigbang 主要是这个东西,别人的文章拿过来你可以看看,https://dabing1022.github.io/2016/12/24/%E8%81%8A%E4%B8%80%E8%81%8AHTTP%E7%9A%84Range,%20Content-Range/。比如有个 5 分钟的视频,你跳到 3 分钟的时候,如果你的服务支持这个的话,是不会把三分钟之前的视频也加载过来的。
|