【发布时间】:2016-07-02 03:11:31
【问题描述】:
我在尝试将音频从 nodejs 服务器实时流式传输到多个 html 客户端时遇到多个问题(以后可能还会连接)。我在下面的代码中所做的是在 bufferArray 中加载 2 个 mp3 文件,然后当客户端连接后,我继续从 bufferArray 中出列,然后以 16384 字节/秒 ~ 128kbits/秒的速度将其写入客户端。但我觉得 缓冲区很快被清空。我的方法是否正确。基本上我应该确保所有客户都应该播放歌曲的同一部分。首先,我的客户都无法播放歌曲,这是另一个问题。
任何帮助将不胜感激。
var http = require('http');
var fs = require("fs");
var url = require('url');
var stream = require('stream');
var Throttle = require('throttle');
var bufferArray = [];
var clients = [];
var entry = true;
setInterval(function () {
if(bufferArray.length > 0 && clients.length > 0){
entry = false;
var buffer = bufferArray.shift();
var bufferStream = new stream.PassThrough();
var throttledStream = new stream.PassThrough();
var throttle = new Throttle(16384);
bufferStream.end(new Buffer(buffer));
bufferStream.pipe(throttle).pipe(throttledStream);
throttledStream.on('data',function(data){
console.log("Going to write to all the clients "+clients.length);
for(var i = 0; i < clients.length; i++){
clients[i].write(data);
}
});
throttledStream.on('end',function(){
console.log("finished the buffer. Still have to write tot "+bufferArray.length+" buffers");
entry = true;
});
}
},1);
function readMp3FilesInBuffer(songName,callback){
var fd = fs.createReadStream("./songs/"+songName);
fd.on('data',function(chunk){
bufferArray.push(chunk);
});
fd.on('end',callback);
}
readMp3FilesInBuffer("FeelOfLove.mp3",function(){
readMp3FilesInBuffer("ILoveAfrica.mp3",function () {
console.log("successfully read the songs..");
http.createServer(function (request, response) {
var parsedUrl = url.parse(request.url,true);
var requestType = parsedUrl.query.requestType;
if(requestType == "renderHtml"){
console.log("got a request to render html");
response.writeHead(200, {
'Content-Type': 'text/html'
});
var htmlStream = fs.createReadStream("./views/audioStreaming.html");
htmlStream.pipe(response);
}
else if (requestType === "stream") {
response.writeHead(200,{
"Content-Type": "audio/mpeg",
'Transfer-Encoding': 'chunked'
});
clients.push(response);
console.log("got a request to stream. Tot clients available : "+clients.length);
}
else{
response.end();
}
}).listen(8081,function () {
console.log("listening");
});
});
});
【问题讨论】:
标签: javascript node.js html audio audio-streaming