是什么导致桌面 Safari html 音频 currentTime 不准确?

Jaa*_*rhu 5 html javascript safari audio

我正在一个项目中工作,我需要创建准确的音频编辑器。

我注意到,Safari 在设置音频的 currentTime 时有一些奇怪的行为。看起来,根据跳转发生的当前时间以及跳转到的位置,实际时间点甚至可能会偏差 2-3 秒。

我做了一个JS 小提琴来演示这个问题

代码的相关部分如下:

jump.addEventListener('click', function () {
  audio.currentTime = jumpToVal;
});

jump2.addEventListener('click', function () {
  audio.currentTime = Number.parseInt(jumpToVal) + Number.parseInt(jumpBufferVal);
  audio.volume = 0;
  setTimeout(function () {
    audio.volume = 1;
    audio.currentTime = jumpToVal;
  }, jumpDelayVal)
});
Run Code Online (Sandbox Code Playgroud)

因此,基本上此示例中发生的情况是,如果在经过该点后尝试在音频中跳转到 8 秒,则音频会在该点之前几秒开始。例如,如果将 currentTime 设置为比该点少 8 秒,并且在延迟跳转到该点后,它会从正确的位置开始播放。

我想强调的是,这很可能只是一个巧合,因为行为的变化取决于设置 currentTime 的位置和时间点。这个问题在这个设置中最为明显。

例如与 Chrome 进行比较,听听差异。

奇怪的是,无论最终结果是什么,音频都会返回相同的 currentTime。因此,换句话说,音频似乎“认为”它处于正确的位置,即使它显然不是。

我的问题是为什么 Safari 的 currentTime 如此不准确?是否有解决此问题的方法?

Safari 版本 12.0 (14606.1.36.1.9)。

San*_*ain 2

媒体格式会导致问题。

当媒体为 flac(也可能是其他格式)时,Seek/currentTime 更新在 safari 上无法可靠工作。

但是,当我将媒体格式切换为mp3时,它和 chrome 一样可靠!