iOS 内存崩溃上的 Web 音频 API

Posted

技术标签:

【中文标题】iOS 内存崩溃上的 Web 音频 API【英文标题】:Web Audio API on iOS Memory crash 【发布时间】:2018-08-29 22:23:01 【问题描述】:

我们正在使用 Web Audio API 在网络应用中播放和操作音频。 在尝试解码大型 mp3 文件(大约 5MB)时,iPad 上的 Safari 中的内存使用量会激增,如果我们加载另一个类似大小的文件,它就会崩溃。

除非我们使用小文件,否则在 iPad 上运行时,Web Audio API 似乎并不能真正使用。

请注意,相同的代码在 Chrome 桌面版上运行良好 - Safari 版确实抱怨内存使用率高。

有人知道如何解决这个问题吗?或者在 iPad 上使用 Web Audio 播放音频文件的内存限制是多少?

谢谢!

【问题讨论】:

【参考方案1】:

已解码的音频文件在 RAM 中的重量比在磁盘中的重量要大得多。单个样本使用4 bytes (32-bit float)。这意味着 230 MB 的 RAM 可用于 10 分钟的 48 000 Hz 采样率和立体声音频。以相同的采样率和立体声播放一小时的音频将需要大约 1.3 GB 的 RAM!

因此,如果您解码大量文件,则可能会消耗大量 RAM。我的建议是“解码”你不需要的文件(只需“忘记”不需要的音频缓冲区,这样垃圾收集器就可以释放内存)。

您也可以使用单声道音频文件代替立体声,这样可以将内存使用量减少一半。

请注意,解码后的音频文件始终会重新采样到设备的采样率。这意味着使用低采样率的音频无助于内存使用。

【讨论】:

以上是关于iOS 内存崩溃上的 Web 音频 API的主要内容,如果未能解决你的问题,请参考以下文章

iPad 上的 iOS 禁用 Web 音频 API

UI11上的UIWebView / WKWebView崩溃(用完可执行内存)

iOS:浏览器因内存不足而崩溃

IOS如何管理后台应用的内存?

iOS9 上的 JavaScriptCore 崩溃

iPhone 3GS 上的 iOS 6.0 上的 UICollectionView 崩溃