通过http流式传输音频时,设置currentTime不起作用

时间:2017-01-29 12:34:37

标签: javascript node.js express html5-audio audio-streaming

我正在使用http播放音频。我正在使用以下代码加载音频。

var audio = new Audio("http://example.com/get/stream/1/wav");
function seek(time){
    audio.currentTime = time;
}

浏览器可以播放音频格式。

我正在运行nodejs express服务器来提供音频文件。下面是处理流的代码的简化版本。

app.get("/get/stream/:id/:format", function(req, res){
    //Here was some code to verify the request, this code doesn't affect this question so I left it out

    var stat = fs.statSync(__dirname+"/path/to/file/here.wav");

    res.header("Content-Type", "audio/wav");
    res.header("Content-Length", stat.size);

    var readStream = fs.createReadStream(__dirname+"/path/to/file/here.wav");
    readStream.pipe(res);
});

如果我加载了一个普通的音频文件(一个不使用http流媒体的文件),搜索功能将正常工作,但如果我使用一个使用http流媒体的音频文件,那么这首歌就会跳到开头。

我需要使用http流,因为有些文件非常大,将它们压缩/转码为较小的大小是没有选择的吗?

所以我的问题是:如何更改使用http流的音频文件的当前时间?

1 个答案:

答案 0 :(得分:2)

浏览器需要知道允许搜索。

尝试添加:

res.header("Accept-Ranges", "bytes"); 

或者,当您使用Node Express时,您可以添加一个有助于搜索的插件,例如this one