从 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 属性。
在我发布这个问题后不久,我找到了问题的解决方案。
为了使脚本工作,您需要添加 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);
}
?>
我已经构建了一个 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 属性。
在我发布这个问题后不久,我找到了问题的解决方案。
为了使脚本工作,您需要添加 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);
}
?>