新到的公司要搞短视频,之前没搞过这块,现在用 h5 搞发现切换总是有延迟,卡个两三秒,看过大厂的做法都是自己定义播放 sdk,预加载,本地代理,但实在是时间有限,问下有没有一些开源方案。
1
opengps 2020-03-06 09:25:19 +08:00
视频源服务器的带宽多大?如果带宽够大你不做预加载都感觉不到慢多少
|
2
yorkyoung 2020-03-06 09:31:35 +08:00
预加载
|
4
laminux29 2020-03-06 09:40:48 +08:00
说白了就是钱的问题。
大厂是就近 CDN,并且 CDN 整套后台都是 C++。 小厂既没有 CDN,又是蜗牛 java 后台,速度怎么会快。 |
5
delectate 2020-03-06 09:42:00 +08:00
先说结论:h5 做不到。
再说原理:根据你的选择,生成一个动态的列表,因为你只有三个选择:上一个、下一个、退出。 只要预加载下一个就行了。 |
6
simonlu9 OP @delectate 我也觉得 h5 做不到,提供的 api 根本做不到上面的优化,如果又改善,估计只有用原生的 api
|
8
ETiV 2020-03-06 10:41:22 +08:00 via iPhone
不信 h5 做不到
但是 iOS 不让纯 webview 的 app 上架 |
10
lihailewodeji 2020-03-06 10:42:50 +08:00
@laminux29 这和后台什么语言有什么关系
|
11
Jooooooooo 2020-03-06 10:44:34 +08:00
预加载
|
12
xsen 2020-03-06 10:48:31 +08:00
是否秒开,跟采用的语言,是不是 h5 没有关系。关键是流媒体传输的方式,若是传统的直播类协议,如 hls、rtmp 这些,延迟 2-3s 是正常的情况
若要秒开,可以直接基于 rtp/rtcp 进行传输,或者采用 webrtc 这样的方式 |
14
fgodt 2020-03-06 10:56:53 +08:00 via Android
预加载 H5 使用 MSE 喂数据就可以了 不过需要自己开发个播放器
|
15
fancy111 2020-03-06 11:15:59 +08:00
啥的秒开不秒开啊,很多用的障眼法而已。 要么就是带宽管够。
|
17
KuroNekoFan 2020-03-06 11:30:30 +08:00
hls 分片越小响应速度越快吧,tradeoff,衡量一下呗
|
18
simonlu9 OP @KuroNekoFan 试过 m3u8,对比过不明显
|
19
tongyang 2020-03-06 12:00:23 +08:00
预加载,还有就是可以根据当前带宽加载不同码率的,一般为了 kpi 前三秒都是地滑知的
|
20
tongyang 2020-03-06 12:00:28 +08:00
低画质
|
21
surewen 2020-03-06 12:01:47 +08:00 1
秒开很简单,预加载数据就行。不够快就预解封装、解码,还不够快就再加上预渲染
|
22
sobigfish 2020-03-06 12:38:43 +08:00
h5 一样可以预加载啊 可以把视频 切 2 片,前部分 2~3s 预加载,2~3s 耗费又不大,在播放这部分时加载下一部分
|
23
DoveAz 2020-03-06 13:18:17 +08:00 1
https://demo.doveaz.xyz/ 5m 小水管,别点下一个太快,就不卡,使用了高端大气的障眼法技术
|
24
tengyoubiao 2020-03-06 13:37:10 +08:00 via Android
@DoveAz 都挤进去,加载不出来了
|
25
rrfeng 2020-03-06 13:59:22 +08:00
楼上基本上没说到点子上的。
如果是公司业务的话,直接去找你们的 CDN 提供商,他们可以给你提供建议和支持。 |
26
zyEros 2020-03-06 14:36:27 +08:00
H5 可以做到的,比如这个: http://h5.haohuimai1.com/#/
使用了 WXInlinePlayer 这个库 |
27
Semidio 2020-03-06 16:03:24 +08:00
DASH
|
29
laminux29 2020-03-06 17:29:00 +08:00 1
|
30
laminux29 2020-03-06 17:30:57 +08:00 1
@GM
无论什么年代,C++与 Java 在性能问题上都存在差异,这是语言特性注定的。 你让我 keep learning,我倒想问问你,jre 各版本与 C++在变量自增这个简单问题上的性能差距是多少,你有没有跟踪过? |
31
laminux29 2020-03-06 17:34:04 +08:00 1
|
33
itmyhome126 2020-03-06 17:44:58 +08:00
@laminux29 看你说了这么多, 你倒是贴个对比图啊, 是你说 java 慢的
|
34
laminux29 2020-03-06 17:57:43 +08:00
|
35
laminux29 2020-03-06 17:59:15 +08:00
|
37
GM 2020-03-06 21:33:28 +08:00
|
38
GM 2020-03-06 21:37:31 +08:00
@laminux29 水再深,也不会影响播放速度。影响速度最大的原因在于网速,也就是 IO,而不是什么变量自增速度快慢。
楼主碰到的问题,根源在于他没有做“预加载”,跟后台是 C 艹还是 C 井还是 Java 基本没关系。 |
39
wdlth 2020-03-06 22:28:07 +08:00
可以通过一个小文件预载起始的部分,Google Developers 有说明:
https://developers.google.com/web/fundamentals/media/fast-playback-with-video-preload |
40
ljpCN 2020-03-07 00:54:54 +08:00 via Android
CDN+转码+预加载?
|
41
FS1P7dJz 2020-03-07 01:43:59 +08:00
每个视频有个预览图
预览图直接在滑下一个的瞬间弹出来 之后才播放视频 视频提前缓冲到本地 |
42
mumbler 2020-03-07 06:42:40 +08:00 via Android
视频多长,体积多大? mp4 有一个 head,必须加载完 head 数据才能开始播放,所以越小视频 head 小,开播速度越快。把视频压缩小一些,用质量换速度
|
43
linhongye 2020-03-07 09:09:54 +08:00 via Android
前端去预加载, 后端不用改
|
44
leonme 2020-03-07 10:03:30 +08:00 via iPhone
CDN
预加载 |
45
newmlp 2020-03-07 11:12:58 +08:00
秒开只能预加载
|
48
GM 2020-03-07 15:58:44 +08:00
@laminux29
你怎么知道我没做过视频播放器? 直播确实没做过,本地播放做过(基于开源项目修修改改就成了自己用的了)。 然后呢?卡几秒跟后台是 C 艹还是 Java 有一毛钱关系吗? 我估计你的意思是“在线转码对计算量要求非常高,所以只有 C 艹才能胜任”。 |
53
geekvcn 2020-03-08 05:39:41 +08:00 via Android
限制 h5 的话,最简单的方式就是 quic
|
54
aguesuka 2020-03-08 09:40:52 +08:00 via Android
我干过摄像头的项目,在我走后安卓端改从 rtsp 改成 hls(理论 rtsp 更快但是既然选择了 hls 那说明 h5 是可以接受的),mp4 的视频放在 cdn 上,加上视频清晰度不高只给内部用,按照同事的说法就是秒开。
|
55
aguesuka 2020-03-08 09:53:34 +08:00 via Android
@simonlu9 hls 协议是下一个.ts 和.m3u8 文件,第一段视频的 io 时间就是两次 http 请求,你把每段视频的大小控制在 1m 试试?可以用 ffmpeg 推流到 nginx 上,环境搭起来很简单,选择合适的参数,全程只要部署改配置文件运行。
|
56
aguesuka 2020-03-08 10:42:54 +08:00
https://s2.ax1x.com/2020/03/08/3vRQfA.jpg
https://s2.ax1x.com/2020/03/08/3vRKFH.jpg hls 如果提前分包后台就不需要解码,后台就是个静态 http 服务器,甚至你可以把视频全扔给 cdn。视频的延迟完全取决于服务器带宽和用户的网速。 |
57
flanche 2021-08-25 10:59:25 +08:00
m3u8
|