最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

如果广告元数据,则插入mp3

运维笔记admin12浏览0评论

如果广告元数据,则插入mp3

如果广告元数据,则插入mp3

所以我现在在读取元数据并在播放器中播放电台的地方工作。

但是我似乎无法更改请求文件以在需要时注入mp3。

因此,如何暂停1个请求或在需要时更改请求(来回)。

var http = require('http'),
    request = require('request');
    var icecast = require('icecast-stack');
    remote = ':8003/stream';
    var stream = icecast.createReadStream(remote);
    var remoteUrl = remote;



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 === "SkypeTherapy.pro - Ad 1 [2b]"){
        console.error("advert");
        }
        else{
            remote='.mp3';
            remoteUrl = remote+"?=Player" + req.url;
            console.error(title);
            console.error(remoteUrl);
        }
    });


  // .bin
  remoteUrl = remote+"?=Player" + req.url;
  console.error(remoteUrl);
  //stream.pipe(process.stdout);/
  request(remoteUrl).pipe(res);
}).listen(8080);

更新后的尝试仍然不起作用

var http = require('http'),
    request = require('request');
    var icecast = require('icecast-stack');
    remote = ':8003/stream';
    var stream = icecast.createReadStream(remote);
    var remoteUrl = remote;



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 === "SkypeTherapy.pro - Ad 1 [2b]"){
        console.error("advert");

        }
        else{
            remote='.mp3';
            remoteUrl = remote+"?=Player" + req.url;

            if(remoteUrl !== remoteUrl){
            request.get(remoteUrl)
            .on('response', response => {
                console.error(title);
                console.error(remoteUrl);
                // pipe response to res 
                // since response is an http.IncomingMessage
                response.pipe(res);
            });
        }

    }

    });



  // .bin
  remoteUrl = remote+"?=Player" + req.url;
  //console.error(remoteUrl);
  //stream.pipe(process.stdout);/


  request(remoteUrl).pipe(res)
}).listen(8080);
回答如下:

这是一个简单的示例,在该示例中,它关闭流并在10秒后重新打开它。因此,基本上,您可以使其适应于返回服务器并更改流的地址,等等。示例从此处How do I shutdown a Node.js http(s) server immediately?

// Create a new server on port 4000
var http = require('http');
request = require('request');
var icecast = require('icecast-stack');
let remote = 'http://stream.radiomedia.au:8003/stream';
var stream = icecast.createReadStream(remote);
var remoteUrl = remote;

var server = 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 === "SkypeTherapy.pro - Ad 1 [2b]"){
            console.error("advert");
        }
        else{
            remote='https://storage.googleapis/radiomediapodcast/Kegleg/season1/S01E03.mp3';
            remoteUrl = remote+"?=Player" + req.url;
            console.error(title);
            console.error(remoteUrl);
        }
    });
    // http://somewhere/noo.bin
    remoteUrl = remote+"?=Player" + req.url;
    console.error(remoteUrl);
    // stream.pipe(process.stdout);
    request(remoteUrl).pipe(res);
}).listen(4000);

// Maintain a hash of all connected sockets
var sockets = {}, nextSocketId = 0;
server.on('connection', function (socket) {
    // Add a newly connected socket
    var socketId = nextSocketId++;
    sockets[socketId] = socket;
    console.log('socket', socketId, 'opened');

    // Remove the socket when it closes
    socket.on('close', function () {
        console.log('socket', socketId, 'closed');
        delete sockets[socketId];
    });

    // Extend socket lifetime for demo purposes
    socket.setTimeout(4000);
});

function two() {
    var server2 = 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 === "SkypeTherapy.pro - Ad 1 [2b]"){
                console.error("advert");
            }
            else{
                remote='https://storage.googleapis/radiomediapodcast/Kegleg/season1/S01E03.mp3';
                remoteUrl = remote+"?=Player" + req.url;
                console.error(title);
                console.error(remoteUrl);
            }
        });
        // http://somewhere/noo.bin
        remoteUrl = remote+"?=Player" + req.url;
        console.error(remoteUrl);
        // stream.pipe(process.stdout);
        request(remoteUrl).pipe(res);
    }).listen(4000);

// Maintain a hash of all connected sockets
    var sockets = {}, nextSocketId = 0;
    server2.on('connection', function (socket) {
        // Add a newly connected socket
        var socketId = nextSocketId++;
        sockets[socketId] = socket;
        console.log('socket', socketId, 'opened');

        // Remove the socket when it closes
        socket.on('close', function () {
            console.log('socket', socketId, 'closed');
            delete sockets[socketId];
        });

        // Extend socket lifetime for demo purposes
        socket.setTimeout(4000);
    });
}

// Count down from 10 seconds
(function countDown (counter) {
    console.log(counter);
    if (counter > 0)
        return setTimeout(countDown, 1000, counter - 1);

    // Close the server
    server.close(function () { console.log('Server closed!'); });
    // Destroy all open sockets
    for (var socketId in sockets) {
        console.log('socket', socketId, 'destroyed');
        sockets[socketId].destroy();
    }
    two();

})(10);

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论