正在加载 <audio> 源 - Firefox 进入 readyState 2 并且 Chrome 进入 4

Loading <audio> source - Firefox gets into readyState 2 and Chrome into 4

我正在尝试将 HTMLAudioElement 连接到网络音频 API (MediaElementAudioSourceNode)。我设置 src 然后调用 load().

现在在 Chromium 中,这让我从 readyState 0 (HAVE_NOTHING) 到 4 (HAVE_ENOUGH_DATA),所以后续 play()成功。但是在 Firefox 中,我只能声明 2 (HAVE_CURRENT_DATA) 并且没有其他任何事情发生。

我是不是漏掉了关键的一步?


编辑: 这是我的调试信息:

| | FF Init | FF Load | Ch Init | Ch Load | |readyState | 0 | 2 | 0 | 4 | |preload | | | auto | auto | |duration | NaN | 186.45 | NaN | 186.44 | |error | null | null | null | null | |networkState | 0 | 1 | 0 | 1 |

至少从这个列表来看,初始数据的唯一区别是 Chrome 中的 preload 值。

因此在创建媒体元素后添加 preload = "auto"(以匹配它在 Chromium 中显然具有的默认值)使其在 Firefox 中也能正常工作。

不确定这是否与您的问题有直接关系,但由于我在研究另一个问题时发现了您的问题,我会加两分钱来帮助其他与 HAVE_CURRENT_DATA 相关的人Firefox 问题...:

发现显然 Firefox 在播放音频后 readyState 重置为 HAVE_CURRENT_DATA,即在 "oncanplaythrough" 中是 "HAVE_ENOUGH_DATA",但播放后又回到 "HAVE_CURRENT_DATA" - 可能是因为没有更多帧可播放?您仍然可以通过再次调用 "play" 来播放音频,只是 readyState 有点混乱。

所以,重复使用音频时要小心...