Node.js nodejs结束后写入-切换音频请求
我想知道如何使下面的脚本保持打开状态并继续编写 我需要它在广告结束时触发函数radio() 错误Node.js nodejs结束后写入-切换音频请求,node.js,Node.js,我想知道如何使下面的脚本保持打开状态并继续编写 我需要它在广告结束时触发函数radio() 错误 node .\index.js advert advert Hurricane - Pain
node .\index.js advert advert
Hurricane - Pain in Your Eyes
https://storage.googleapis.com/ad-system/DRN1_Indie.drn1.com.mp3?=Player/
Hurricane - Pain in Your Eyes
http://stream.radiomedia.com.au:8000/stream?=Player/
internal/streams/legacy.js:57
throw er; // Unhandled stream error in pipe.
^
Error [ERR_STREAM_WRITE_AFTER_END]: write after end
at write_ (_http_outgoing.js:572:17)
at ServerResponse.write (_http_outgoing.js:567:10)
at Request.ondata (internal/streams/legacy.js:15:31)
at Request.emit (events.js:198:13)
at IncomingMessage.<anonymous> (C:\Users\russe\Documents\nodejs\node_modules\request\request.js:1080:12)
at IncomingMessage.emit (events.js:198:13)
at addChunk (_stream_readable.js:288:12)
at readableAddChunk (_stream_readable.js:269:11)
at IncomingMessage.Readable.push (_stream_readable.js:224:10)
at HTTPParser.parserOnBody (_http_common.js:122:22)
的默认行为是在读卡器结束时结束编写器
更改您的代码:
//请求(remoteUrl).pipe(res)
请求(remoteUrl).pipe(res,{end:false})
var http = require('http'),
request = require('request');
var icecast = require('icecast-stack');
let remote = 'http://stream.radiomedia.com.au:8000/stream';
var stream = icecast.createReadStream(remote);
var remoteUrl = remote;
var ad = 0;
http.createServer(function (req, res) {
res.writeHead(200, {
'Content-Type': 'audio/mpeg'
});
stream.on('connect', function() {
console.error("Radio Stream connected!");
});
stream.on('metadata', function(metadata) {
var title = icecast.parseMetadata(metadata).StreamTitle;
if(title === title){
console.error("advert");
ad = 1;
if(ad === 1)
{
let remote='https://storage.googleapis.com/ad-system/DRN1_Indie.drn1.com.mp3';
remoteUrl = remote+"?=Player" + req.url;
request.get(remoteUrl)
.on('response', response => {
// pipe response to res
console.error(title);
console.error(remoteUrl);
// since response is an http.IncomingMessage
/*setTimeout(function(){
ad = 0;
radio();
},20000);*/
response.pipe(res);
})
.on("finish", response => {
return radio();
});
}
}
else{
console.error(title);
}
});
function radio(){
let remote='http://stream.radiomedia.com.au:8003/stream';
remoteUrl = remote+"?=Player" + req.url;
request.get(remoteUrl)
.on('response', response => {
// pipe response to res
//console.error(title);
//console.error(remoteUrl);
// since response is an http.IncomingMessage
response.pipe(res);
});
}
// http://somewhere.com/noo.bin
remoteUrl = remote+"?=Player" + req.url;
//console.error(remoteUrl);
//stream.pipe(process.stdout);/
request(remoteUrl).pipe(res)
}).listen(8080);