描述
随着 同步 XMLHttpRequest
的快速移除(例如:Chrome 88 正在移除此功能),我正在寻找下一个最佳的替代方法来预缓存视频。
"同步 XMLHttpRequest 是个可怕的想法" - 从未有人这样说过。
是的,对于 大多数 场景,你是对的,但这是不同的。
以前
在 android 和 ios 上,我所在公司有一个 SDK,在后台打开一个 webview,将 HTML 注入其中,并等待 onload
事件触发。这会通知 SDK 准备好向用户展示 webview。
为了获得最佳的体验,播放视频时绝不能有任何缓冲。
这就是为什么在后台加载webview时,我们会使用XMLHttpRequest预缓存视频(同步方式)(由此导致延迟onload
事件触发)。
可能的解决方案
我们考虑了一些不同的解决方案,它们各有优缺点;以下是其中的几个:
- 通过
<link rel="preload" ... />
预加载内容 - 将视频以base64嵌入
index.html
页面中(如果视频大小为2-3Mo,则转换为base64后重量会增加30%)
(1) 是最干净的方法,但由于各种原因需要在我们的后端进行一些较大的更改。同时也不能保证视频在浏览器/ webview 出现时完全被缓存。在不同的webview和移动浏览器中,预缓存的优先级也无法保证相同。例如,用户可以在他们的Chrome配置中停用预缓存功能。当连接是4G或更低时,它也无法工作(叹气)。
(2) 是一个hacky和未经优化的方法,但与(1)相比,实现起来相对简单。
问题
在webview /移动浏览器的背景中预缓存视频的下一个最佳方法是什么:
- 保证(或接近保证)视频播放时没有缓冲
- 在webview /浏览器内完成
- 最好跨移动浏览器/webview兼容
- (最好但不是必需的)延迟触发
onload
事件
注意:并非所有用户都可能拥有4g或wifi连接。 注意2:标签是自动播放的