我在NodeJS中提供mp3文件时遇到问题。
var filestream = fs.createReadStream('file.mp3');
filestream.on('open', function() {
var stats = fs.statSync('file.mp3');
var fileSizeInBytes = stats["size"];
response.writeHead(200, {
'Content-Type': 'audio/mpeg',
'Content-Length': fileSizeInBytes});
filestream.pipe(response);
});
我在设置文件的内容类型之前设置它们,以及内容长度。
当我在页面上显示该文件时,我可以播放音频并获取内容的持续时间及其当前时间。
但是,当我不使用NodeJS来提供mp3文件时,我无法设置当前时间。
<audio id='player' src='file.mp3'></audio>
<script>
var duration = player.duration; // 88 seconds
var time = player.currentTime; // 0 seconds
player.currentTime = 10;
var time = player.currentTime; // 0 seconds
</script>
只是为了重新输入 - 当从目录打开这个页面时(不使用nodejs作为服务器)我可以设置audio元素的currentTime。 这是为什么? 谢谢你的帮助。
答案 0 :(得分:0)
解决方案是添加一个&#34; Accept-Ranges&#34;每个响应的标头,并使用&#34; range&#34;修改对请求的响应。标头,从标头读取字节范围并使用HTTP / 1.1 206响应代码提供该内容。
字节标题的格式为new One();
,例如bytes=<start>-<end>
这是我更新的代码:
bytes=0-49
这个答案的部分灵感来自github上的一个要点here。