求助:关于视频播放的方案

2019-11-17 18:22:32 +08:00
 codebigbang

项目是 spring,目前功能是上传 mp4 文件,播放的时候是从后端读取文件流,放到前端 video 标签里。

但是播放的视频文件大于 30M 的时候,浏览器加载就会变得很慢,如果播放大于 100M 就无法短时间内一次性加载到前端。

目前的方案是想利用 video 下的 source 标签,但是使用文件流就无法播放。

请问各位经验丰富的大佬,有没有成熟的方案可以提供吗?网页链接也可以。不胜感激

2765 次点击
所在节点    程序员
12 条回复
av1254
2019-11-17 18:32:48 +08:00
m3u8 了解一下
codebigbang
2019-11-17 19:41:48 +08:00
@av1254 不懂就问~
请问把 mp4 切片以后,是不是只要控制器里处理 m3u8 请求和 ts 请求就可以了?
cst4you
2019-11-17 19:41:51 +08:00
flvjs, 用 flv 格式, 关闭 lazyload, 可以一次加载完

https://www.beatstage.com/play/400
我自己的音游用这种模式来加载视频, 因为是游戏肯定就不可能边放边播, 缓冲不足了卡住那就很尴尬了
duan602728596
2019-11-17 23:53:26 +08:00
你的服务不支持 HTTP 206 吗?
againstodds
2019-11-18 08:39:43 +08:00
了解下 ffmpeg -movflags faststart
视频文件可以不需要全部下载完再播放,可以边下载边播放
Latin
2019-11-18 10:26:17 +08:00
有钱就上 nvr
codebigbang
2019-11-18 14:57:22 +08:00
方案总结:
1、使用 m3u8,把 MP4 切成 m3u8 和若干 ts 文件。我的问题是处理 m3u8 和 ts 请求是自己处理吗?@av1254
2、关于 HTTP 206,range 之后获取的数据可以直接播放吗?@duan602728596
3、关于 flv,有详细的教程或者链接吗?拜托了 @cst4you
Latin
2019-11-18 15:11:13 +08:00
duan602728596
2019-11-18 15:52:29 +08:00
@codebigbang 当然可以
cst4you
2019-11-18 19:21:53 +08:00
codebigbang
2019-11-18 21:22:09 +08:00
@duan602728596 我之前尝试过把读取的 base64 编码的数据拼接在之前已经存在的 video src 里,但是这样会导致正在播放的播放器彻底加载不出来视频数据。
所以想请问一下后台读取过来的数据是怎么保证不卡顿加载上去的?
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 分钟的时候,如果你的服务支持这个的话,是不会把三分钟之前的视频也加载过来的。

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

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

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

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

© 2021 V2EX