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


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

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

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

但是,当我试图从下面的PHP脚本中获取文件时,它会发送文件OK。但是,我无法使用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);
     }
?>

这是我试图更改音频文件currentTime:的JavaScript

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

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

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

也许您应该绑定canplay来自Audio组件的事件,并在此回调中设置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);
     }
?>