Ices/Icecast-正在附加到的streaming.ogg文件

Ices/Icecast-正在附加到的streaming.ogg文件,streaming,pcm,ogg,icecast,Streaming,Pcm,Ogg,Icecast,我正在通过一个套接字将PCM音频数据发送到一个小的node.js服务,然后我想将它作为实时音频与Icecast流式传输。我每5秒钟左右发送一次数据,所以我基本上有5秒钟的剪辑,我希望以一系列文件或一个文件的形式无缝传输。基本要点是,这是一个现场录音,我希望在它被写的时候流式播放 我尝试了以下方法: 1使用ffmpeg获取音频并将其转换为.ogg,然后将文件路径写入播放列表文件,以提供标准的ices类型basic/playlist config-以便它像标准播放列表一样在文件中滚动 2使用ffmp

我正在通过一个套接字将PCM音频数据发送到一个小的node.js服务,然后我想将它作为实时音频与Icecast流式传输。我每5秒钟左右发送一次数据,所以我基本上有5秒钟的剪辑,我希望以一系列文件或一个文件的形式无缝传输。基本要点是,这是一个现场录音,我希望在它被写的时候流式播放

我尝试了以下方法:

1使用ffmpeg获取音频并将其转换为.ogg,然后将文件路径写入播放列表文件,以提供标准的ices类型basic/playlist config-以便它像标准播放列表一样在文件中滚动

2使用ffmpeg获取音频,将其转换为.ogg,并将新创建的.ogg文件转换为主super.ogg文件,并使用标准ices类型basic/playlist配置提供该文件

3每次接收PCM数据时,只需将其通过stdinpcm输入传输至ices,因此每5秒左右将PCM数据传输至ices

不管我怎么做,我只能流一片冰,冰就停了。它认为它已经完成了创建、流式传输和拆除冰铸支架的工作。。。并终止客户端连接

我觉得这可能从根本上是错误的方法,所以我试图找出其他人正在做什么来解决相同的问题,将多个音频文件分块以创建连续的流

提前感谢您的帮助

更新:

谢谢,布拉德。我现在能够通过Icecast的身份验证并启动装载/流。然而,若我试图给它提供一个文件流以供测试,它会奇怪地在15秒内播放,然后突然停止。所以我认为我得到的流媒体部分是非常错误的-这应该发生在同一个请求中-还是一个新的,后续的请求?下面是一个代码示例:

'use strict';

var http = require('http');
var fs = require('fs');

var options = {
    host: 'iceserver_host.net',
    path: '/stream.ogg',
    port: '8000',
    method: 'SOURCE /stream.ogg ICE/1.0',
    headers: {
        'Authorization': 'Basic ' + new Buffer('source:somepassword').toString('base64'),
        'Content-Type': 'application/ogg',
        'User-Agent': 'mysource/1.0',
        'ice-name': 'Test Stream',
        'ice-url': 'http://server.com',
        'ice-genre': 'talk',
        'ice-bitrate': '128',
        'ice-private': '0',
        'ice-public': '1',
        'ice-description': 'Some description.'
    }
};

var req = http.request(options, function(response) {
    if (response.statusCode == '200') {
        console.log('************* Authenticated! *************');
        // this only sort of works...
        var stream = fs.createReadStream('audio.ogg');
        stream.pipe(req);
    }
});
req.on('error', function(e) {
    console.log('problem with request: ' + e.message);
});

req.end();

我有一个做同样事情的应用程序。我的方法是获取交错采样,将它们发送到FFmpeg,通过STDIO进行编码,从FFmpeg获取结果,并将其作为流直接发送到SHOUTcast/Icecast服务器。我已经用JavaScript为这两个服务器编写了源客户机

这种方法非常有效。Icecast和SHOUTcast都很容易与以下设备连接:


谢谢,这很有道理。我试图避免编写客户机,但这似乎是唯一体面的方式。在进行身份验证的初始握手之后,是否存在间歇性地向流提供信息的问题?当我从输入中获得流数据时,我将以小的突发方式提供流数据。服务器将在数据可用时将您的编码数据发送给客户端。由于您仅每5秒发送一次数据,因此客户端可能需要重新缓冲,但如果您每5秒发送5秒音频,它们最终应无间隔播放。这就是缓冲区的重点。您可以通过使用更大的缓冲区配置Icecast,或者在节点应用程序中添加缓冲区,轻松解决此问题。如果您将其放在节点端:再次感谢您的帮助!