我一直在试验html5的音频和本地存储功能,并且碰到了让我难过的东西.
我希望能够在本地缓存或存储音频元素的源,以实现更快速和离线播放.问题是我无法看到当前实现如何实现这一点.
我使用WebKit尝试了以下方法:
创建清单文件以设置本地缓存,但音频文件看起来不是可缓存的项目可能是由于它是流的方式或某事
我还尝试使用javascript将音频对象放入本地存储,但由于内存问题(我认为),mp3的大小使得这不可能.
我试图使用数据uri和base64来使用html作为可以缓存的音频传输,但文件大小再次使这个禁止.另外音频元素在WebKit中似乎不喜欢这样(在mozilla中工作正常)
我已经尝试了几种将数据放入本地数据库存储的方法.再次遇到与其他案件相同的问题.
我很想听听任何人对于如何使用WebKit中的缓存/本地存储实现离线播放目标的任何其他想法.
所以我问了这个问题已经有一段时间了,我想我会提供一些关于我们如何解决它的信息.基本上我们使用类似的技术将数据编码为PNG:
http://audioscene.org/scene-files/yury/pngencoding/sample.html
然后使用html5本地存储在移动设备上缓存图像,并根据需要访问它.PNG非常大,但这对我们有用.
我一直试图在iOS(iPhone/iPad)上自己做这个,但它拒绝在离线状态下缓存音频文件,即使在Cache Manifest中也是如此.
它没有错误,而是简单地假装在没有控件的情况下通过JavaScript调用时播放了音频元素.如果它嵌入了控件,则会显示另一个控件,显示"无法播放音频文件".如果应用程序能够联机,它可以正常工作.
似乎没有缓存音频,播放另一个声音资源似乎导致它从内存中清除以前的资源 - 即使在线时这也是毫无价值的功能.
我已经尝试使用base64编码音频作为数据URI.这适用于桌面上的Safari(至少对于我一直使用的相当短的大约20-30k的样本)但似乎在iOS上根本不受支持 - 它默默地什么都不做,这非常烦人.
我不知道其他供应商 - 谷歌Chrome曾经不支持数据URI的音频,但也许他们修复了它 - 现在似乎不可能.
更新:与iPhone OS 3.x的轻微差异(使用3.1.2测试):如果在离线Web应用程序中指定了音频元素但没有控件,则会显示非动画的非交互式控件旋转器(它绝对不应该这样做).我认为这是在iOS 4.x中修复的(下周应该会出来).
我花了一些时间尝试为我正在制作的游戏做这件事,而且据我所知,浏览器(Firefox和Chrome)仍然不支持音频元素的缓存,我想我会发布我发现的解决方案.
这里描述了一个解决方法:http://dougx.net/plunder/index.php#code
我可以确认它工作得很好,但可能更适合较小的文件.正如他在这里描述的那样(http://dougx.net/plunder/GameSounds.txt),你将音频编码为base64字符串,并给它们一个数据:audio/ogg; base64(或任何兼容的音频格式)标题,其中HTML5然后可以读入音频.因为这只是一个字符串,浏览器会缓存它.