从 PHP 脚本获取音频文件时,更改 JavaScript 音频 Object 的当前时间

Changing The Current Time of a JavaScript Audio Object, When Getting the audio file from a PHP script

我已经构建了一个 PHP 脚本,可以将 *.MP3 文件发送到 public_html 目录之外, 它工作正常并发送文件。问题是我有一个 JavaScript 脚本,它应该更改音频文件的当前时间 (audioFile.currentTime = 25;)。 当我这样做时(从 public_html 目录中获取文件),它有效:

// JavaScript:
var audioFile = new Audio("https://www.website.com/files/audioFile.mp3");
audioFile.play();
audioFile.currentTime = 15;

但是,当我尝试从以下 PHP 脚本中获取文件时,它发送文件正常。但是,我无法使用 JavaScript

更改 "currentTime"
<?php
     // This PHP file is public www.website.com/getAudioFile.php/
     $fileLocation = "../audioFiles/audioFile.mp3";
     if (file_exists($fileLocation))
     {
          header('Content-type: audio/mpeg');
          header('Content-Disposition: inline; filename="' . $filename . '"');
          header('Content-Transfer-Encoding: binary');
          header('Content-Length: ' . filesize($file));
          readfile($file);
     }

?>

这是 JavaScript 我试图在其中更改音频文件 currentTime:

    <script>
         var audioFile = new Audio("www.website.com/getAudioFile.php");
         audioFile.play();
         audioFile.currentTime = 15;
    </script>

每次我使用 object.currentTime = 15 时,音频文件都会从头开始播放。

如果有人知道 headers 我应该发送什么或我应该做什么,请告诉我如何解决我的问题。

也许您应该从音频组件绑定 canplay 事件,并在此回调中设置 currentTime 属性。

http://www.w3schools.com/tags/av_event_canplay.asp

在我发布这个问题后不久,我找到了问题的解决方案。 为了使脚本工作,您需要添加 header('Accept-Ranges: bytes');

像这样:

<?php
     // This PHP file is public www.website.com/getAudioFile.php/
     $fileLocation = "../audioFiles/audioFile.mp3";
     if (file_exists($fileLocation))
     {
          header('Content-type: audio/mpeg');
          header('Content-Disposition: inline; filename="' . $filename . '"');
          header('Content-Transfer-Encoding: binary');
          header('Accept-Ranges: bytes');
          header('Content-Length: ' . filesize($file));
          readfile($file);
     }

?>