HTML5 会支持离线缓存音频的访问吗?

Posted

技术标签:

【中文标题】HTML5 会支持离线缓存音频的访问吗?【英文标题】:Will HTML5 support the access of offline cached audio? 【发布时间】:2010-06-03 21:55:02 【问题描述】:

我们想要制作一个基于音频的基于网络的应用程序,该应用程序将具有许多声音 sn-ps。我们希望缓存这些文件,以便性能良好且不依赖于网络速度。 html5 可以为离线模式缓存音频吗?

【问题讨论】:

【参考方案1】:

在我看来,这确实应该有效,但我找不到任何说明它不应该有效的文档(来自 W3C 或来自 Apple 等供应商),但将音频文件作为缓存清单中的资源似乎至少不适用于 iPad 和 iPhone 上的 Safari。

当应用程序在线时声音播放正常(尽管它似乎每次都重新加载它们而不是缓存它们)并且它不会抱怨在离线模式下资源不存在(如果你立即这样做忘记包含 javascript、CSS、HTML 或图像资源)。

而不是抱怨(或加载);如果元素有一个控件,则该控件将替换为一个显示“无法播放音频文件”的框。或者,如果它是一个没有控件的元素 - 即通过 JavaScript 全部访问 .play() - 那么它根本不会播放(它不会导致任何错误,只是没有声音,否则 JavaScript 会继续执行通常)。

我已经用非常小的 (我不确定您是否可以像使用图像一样将声音编码为页面中的资源(例如,以 base64 编码),但我将研究该选项 - 我怀疑这是可能的。 我尝试将音频数据编码为数据 URI 字符串,甚至尝试动态生成音频 - 两者都可以在桌面上的 Safari 中正常工作,但不能在 iPhone / iPad 操作系统上工作(至少在版本 3.x 上 - 我有没有在 ios 4 上尝试过,但它不会在一周内发布,并且 iPad 预计在几个月内不会出现,即使他们确实修复了它)。

我猜想拒绝在 iOS 中缓存声音文件是一个实现错误或预期的有限功能。对于很多用例来说,这肯定很烦人,而且是个阻碍。

我不确定其他 HTML5 客户端会发生什么,我很想知道(尤其是在 Andriod 上)。 Google 对音频的支持也不是很出色,因此它可能会受到同样的限制。

【讨论】:

仅供参考,JavaScript .play() 在 controlless 元素上不起作用的原因是因为它在 iphone/ipad 的 safari 中被禁止(必须有用户输入)。至于“无法播放音频文件”,我发现它正在发生,因为该文件不受支持。由于某种原因,某些 mp3 文件发生在我身上。 @jd 谢谢,但要澄清一下,我看到的是 JavaScript 实际上可以正常工作,但只有在你有(快速)连接的情况下(如果速度很慢,它是间歇性的,因为它会不断重新获取声音文件)。离线 HTML5 应用程序中的声音文件不支持缓存清单 - 通过连接,JavaScript 调用确实有效(并且所有声音文件都有效)。这似乎与文件大小无关。 感谢这篇文章。我刚刚自己测试过,和你说的一致。大无赖。 @Crashalot 不,但我只是想知道随着 iOS 5 的发布(Apple 关闭了我的错误报告 8116889,因为我从未有时间提供示例)。我会试试看,稍后再看。 你看到这些帖子了吗? ***.com/questions/7655917/… 和 ***.com/questions/7514596/…【参考方案2】:

您总是可以开发一个与客户端 SQLlite DB 对话的解码/编码层

【讨论】:

每个应用程序的存储空间不是有 5 兆的限制吗?【参考方案3】:

我看不出有任何理由说明您不能在 cache manifest 中指定音频文件。

【讨论】:

好像有问题,看这里:***.com/questions/1612116/…

以上是关于HTML5 会支持离线缓存音频的访问吗?的主要内容,如果未能解决你的问题,请参考以下文章

HTML5 离线缓存

移动网络应用程序和离线访问音频文件

HTML5 离线缓存详解(转)

你的web应用支持离线访问和策略缓存吗?

HTML5-离线缓存(Application Cache)

HTML5教程 离线缓存管理库详解