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