我正在使用html5的标签来播放mp3。我正在使用Node发送html:
var http = require('http')
var fs = require('fs')
var html = fs.readFileSync(__dirname + '/some.html')
http.createServer(function(req,res){
res.writeHead(200, {"Content-Type" : "text/html"})
res.write(html)
res.end()
}).listen(1337)
console.log('Server is listening on 1337')
some.html标记如下所示:
<!DOCTYPE html>
<html>
<body>
<audio id="player" src="/Users/alex/yodog/DTSE9.mp3" controls>
</audio>
</body>
</html>
我想我在这里遗漏了一些东西,因为当我在浏览器中打开相同的html文件时,一切都按预期工作。但是,当我使用节点传递html时,没有任何东西可以播放。小音频控件不显示音轨的长度,按下播放不起作用。
我认为这部分涉及html5的实施问题。我的服务器需要做'某事'才能使html5按预期工作。我尝试过在线搜索,与此相关的唯一事情就是Web Audio API。或者我可能需要在响应头中指定一些内容?显然我在这里很困惑,任何指针都会受到赞赏。
答案 0 :(得分:0)
好的,这是更新的代码,解决了我的问题。基本上,当节点将html传递给客户端时,客户端会再次发出音频请求。我的服务器不能容纳这个。下面是更新的服务器,您将看到当请求要求音频时,我发送音频。
var http = require('http')
var fs = require('fs')
http.createServer(function(req,res){
var url = req.url
if(url === '/Users/alex/yodog/DTSE9.mp3')
{
res.writeHead(200, {"Content-Type" : "audio/mpeg"})
var audio = fs.createReadStream(__dirname + '/DTSE9.mp3')
audio.on('end', function(){
console.log('no more audio')
res.end()
})
audio.pipe(res)
}
else
{
res.writeHead(200, {"Content-Type" : "text/html"})
var html = fs.createReadStream(__dirname + '/some.html')
html.on('end', function(){
console.log('no more html')
res.end()
})
html.pipe(res)
}
}).listen(1337)
console.log('Server is listening on 1337')