
新到的公司要搞短视频,之前没搞过这块,现在用 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 秒开很简单,预加载数据就行。不够快就预解封装、解码,还不够快就再加上预渲染 |
22 run2 2020-03-06 12:38:43 +08:00 h5 一样可以预加载啊 可以把视频 切 2 片,前部分 2~3s 预加载,2~3s 耗费又不大,在播放这部分时加载下一部分 |
23 DoveAz 2020-03-06 13:18:17 +08:00 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 |
30 laminux29 2020-03-06 17:30:57 +08:00 @GM 无论什么年代,C++与 Java 在性能问题上都存在差异,这是语言特性注定的。 你让我 keep learning,我倒想问问你,jre 各版本与 C++在变量自增这个简单问题上的性能差距是多少,你有没有跟踪过? |
31 laminux29 2020-03-06 17:34:04 +08:00 |
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 leon0318 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 |