视频在线播放卡慢,如何实现视频分片加载呢?前段 vue,后台 go

2021-10-23 19:29:07 +08:00
 NotreDame

现在就是直接请求一整个视频文件,浏览器直接播放,几百兆的视频几乎无法在线播放。我看视频网站都是把视频切分成 ts 文件,具体怎么实现呢?

3238 次点击
所在节点    程序员
22 条回复
NowTime
2021-10-23 19:36:42 +08:00
这个没记错的话 Nginx 可以满足你的需求,关键字 nginx range 请求

http://chenzhenianqing.com/articles/926.html
liangxin149
2021-10-23 19:38:12 +08:00
使用 ffmpeg 分割成 ts 文件
easychen
2021-10-23 19:46:23 +08:00
一般视频都是存到云服务商那里,他们会帮忙切片。

还有一种是浏览器端播放器可以自己通过 206 部分载入内容,可以在不切片的情况下不加载整个视频文件。
jim9606
2021-10-23 20:32:13 +08:00
切 ts 片的通常是基于 m3u8 的 HLS 。如果没什么防盗链或者 DRM 之类的需求可以预先切好 m3u8+ts 放服务器上。
xiaoz
2021-10-24 00:24:20 +08:00
4 楼正解,关键词 m3u8 ,ts 切片。
old9
2021-10-24 09:08:50 +08:00
如果视频开头有 moov 元数据,web 服务器支持 range ,那浏览器会自动处理的,不会下载完了才播放
MonikaCeng
2021-10-24 09:09:14 +08:00
youtube 那种 dash mpd 切片方式比 hls m3u8 更好,不过用的也比较少。我曾经用 ffmpeg 尝试去切成 mpd ,也可以用。
dash mpd 的优点可以谷歌一下
ch2
2021-10-24 10:31:10 +08:00
选个支持 http 的 range 功能的播放器就行了
pupboss
2021-10-24 13:08:06 +08:00
针对楼主的附言,我来给点建议吧

其实没什么好办法,你不懂的东西就是不懂,如果想提高的话主要是靠平时积累,平时看帖子刷新闻的时候,感兴趣不感兴趣的都点开看看多积累,如果自己好奇心够强就更好了,接着发帖人的问题刨根问底,慢慢就能在所有领域有不错的积累,并且打通各个领域,有一些独到的见解
NotreDame
2021-10-24 17:30:13 +08:00
@pupboss 是啊,不懂得东西真的就是不懂,自己想破脑袋都没有思路。
xsen
2021-10-24 19:14:23 +08:00
这个需要专门的流媒体服务器来做的

关键字(可以基于 nginx ):
1 ) nginx + rtmp
2 ) nginx + hls
fredcc
2021-10-24 21:53:47 +08:00
直接用公有云的解决方案就行了,源文件丢上去,直接出播放地址,最多对接个防盗链。lz 距离能自己实现知识储备还差很远
20015jjw
2021-10-25 01:38:43 +08:00
顺便再回 lz 一句
不懂很正常的,写 mobile 的不懂 ml 很正常,写 backend 的连博客都搭不出来完全合理。需要的时候问+学 /找人帮忙就行了,重要的更多的还是学习和沟通的能力。
dany813
2021-10-25 09:57:51 +08:00
不懂,就多搜,多交流吧
markgor
2021-10-25 10:24:51 +08:00
实话说,你要弄清楚哪部分卡;
1 、就算 ts 切片,你服务器带宽就 5M ,10 个人在线看,还不是照样卡吗?
2 、不知道你后端业务是怎样的,nginx 的话大文件会自动 range ,类似 ts 切片,一次加载一部分,大多数浏览器都支持 range 请求;但和第一点一样,带宽如何?
3 、一个视频几百兆,首先要做的就是针对请求限流吧?次要就是看带宽是否能支持;
4 、其实国内 CDN 大多按量计费,你这种场景非常适合上 CDN ,费用起码比你加大服务器带宽要便宜的多。
5 、如果一毛不拔,建议上传第三方视频平台。
NotreDame
2021-10-25 11:01:02 +08:00
@markgor 感谢,您说到关键点了。我用的阿里云 ecs ,4M 带宽,现在想着把图片视频都放到阿里云 oss 上。
markgor
2021-10-25 11:19:52 +08:00
@NotreDame
可以給你参考,不过我用的是腾讯云,
resource.xxx.com -> COS 对象存储 ->回源地址 -> 源服务器。
这样当请求 A.JPG 文件 不存在时,COS 会回去源服务器拉取,然后存在 COS 。
代码中几乎不用改动(前提是资源域名做了划分,COS 可否根据请求类型区分是否回源我不确定。
提醒下,COS 回源有超时策略,大文件不多的情况下建议直接把大文件手动转移到同目录下的 COS 。
剩余的小文件就按上面的策略跑。

如果都是大文件的话那还是直接用工具转移去 COS 吧.
ysc3839
2021-10-25 12:42:01 +08:00
切片解决不了带宽问题吧?
NotreDame
2021-10-25 14:05:31 +08:00
@markgor 外网流出流量是不是无解?我看 oss 对象存储内网走 esc 服务器可以免流,但这不最终还是走的 ecs 的带宽,结果还不是一样的卡顿吗?不知道我的理解对不对。
markgor
2021-10-25 14:33:22 +08:00
@NotreDame 阿里云的产品我不清楚,腾讯云的话 oss 对象外网访问是会产生外网费用,但不是走 cvm 带宽。

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

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

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

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

© 2021 V2EX