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