正在加载 <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 有点混乱。
所以,重复使用音频时要小心...
我正在尝试将 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 有点混乱。
所以,重复使用音频时要小心...