【发布时间】:2017-11-27 22:35:25
【问题描述】:
我目前正在构建一个需要在客户端存储音频和视频的媒体播放器网络应用程序。要求也是避免流式传输,并且它必须在 Safari 中工作。
为此,我选择了 IndexedDb 并将所有内容都存储在浏览器中。但是,通过网络音频 api 获取和播放音频没有问题 - 我很快就遇到了视频问题。
我目前的方法是从 indexeddb 获取视频并为 src 属性创建一个 blob url:
const objectUrl = createObjectURL(record.videoData);
this.video.src = objectUrl;
这种方法适用于小视频(任何小于 30mb 的视频),但对于较大的视频,播放会卡顿,我注意到网络检查器中对 blob url 的几个错误请求(见图):
尽管“错误”请求视频加载和播放。唯一的问题是口吃。我还注意到,随着文件大小的增加,这种情况变得越来越糟糕。
我环顾四周,但没有找到任何在没有流媒体的情况下实现播放的替代方法。我查看了 Safari 发行说明并注意到以下内容(来自:safari release notes):
如果帧的总内存大小低于 30MB(原为 5MB),则更改内存处理以保留动画图像的所有解码帧
这看起来可能是口吃的原因 - 我假设 safari 正在尝试下载 bloburl 块。
我想要实现的目标是否有替代方法?这在 chrome 中表现得更好(没有口吃),但是 - 这必须在 Safari 中工作。
非常感谢任何帮助。
【问题讨论】:
-
您最终找到解决方案了吗?
-
很遗憾没有。我们只是坚持使用较小的视频,因为口吃还不错。烦人的请求错误仍然存在。
-
无赖。似乎在开发者控制台打开时口吃更严重,但在控制台未打开时肯定仍然可见。
-
是的,我还发现打开控制台窗口会降低性能。
-
试用 iOS 11.3 Beta - 我注意到我的应用在那个版本的 Mobile Safari 中表现得更好。
标签: javascript html video safari blob