将多个 mp3 文件流式传输到 Icecast

Posted

技术标签:

【中文标题】将多个 mp3 文件流式传输到 Icecast【英文标题】:Streaming mulitple mp3 files to Icecast 【发布时间】:2014-02-04 11:49:56 【问题描述】:

我在 Web 服务器上有几千个 mp3 文件,我需要将它们流式传输到同一台服务器上运行的 Icecast 2.3.3 服务器实例。

每个文件都被分配到一个或多个类别。共有7个类别。我希望每个类别有一个坐骑

我需要能够在类别中添加和删除文件。添加/删除文件时,我需要以某种方式将文件合并到类别中或打乱类别中的文件,之后我假设我需要重新启动挂载。

我的问题是:我可以使用作为服务在 Windows 操作系统上运行的源应用程序来自动执行此类操作吗?

或者,我可以编写一个程序来将这些文件打乱并合并为一个大的“类别”mp3 文件,但想知道是否还有其他方法。

非常感谢任何建议。

【问题讨论】:

【参考方案1】:

由于您只是处理 MP3 文件,因此 SHOUTcast sc_trans 可能是您的不错选择。

http://wiki.winamp.com/wiki/SHOUTcast_DNAS_Transcoder_2

您可以将其配置为使用播放列表(您可以通过编程方式生成),或者让它读取目录并按原样运行文件。请注意,sc_trans 不支持挂载点,因此您必须将 Icecast 配置为接受 SHOUTcast 样式的连接。这可行,但需要您运行多个 Icecast 实例。如果您以后想在单个端口上流式传输所有内容,您可以设置一个主 Icecast 实例,该实例中继来自其他端口的所有流。

根据您的需要,还有很多其他选择。 SAM DJ 之类的工具可以让您完全控制播放列表和广告,但根据您的需要,可能会有些过度。

我通常会发现自己使用不同的输入集,因此我使用 VLC 进行播放,然后使用一些自定义软件将其编码并传输到流服务器。这并不难做到,如果你在配置上很狡猾,你甚至可以使用 VLC 为你做编码。

【讨论】:

【参考方案2】:

我知道它已经过时了,而且您很可能已经找到了解决方案。但是,可能会有更多人遇到此问题,因此当您决定为 MP3 文件编写自己的“洗牌器”时,我提出了一些注意事项。

我不会对手头的任务使用纯随机:标题连续播放多次的可能性是存在的;你不想要那个。

另外,你很可能以某种方式对标题进行了排序,比如

Artist A - Title 1
Artist A - Title 2
...
Artist B - Title 1
... 

您最有可能在洗牌时追求多样性,因此您不想连续播放同一位艺术家两次。

我会将所有文件名读入索引为 0...n 的数组中。

找到文件数最多的艺术家,编号为m

然后找到下一个素数p,它是n的互素数,但大于m

[0...n] 中生成一个伪随机数s 只需ONCE 即可找到起始歌曲;这样可以避免每次播放相同的开始序列。

循环播放歌曲s,然后设置

s := (s + p) mod n

这保证播放所有歌曲,并且它们只会播放一次,并且避免了同一艺术家的多首连续歌曲。

这是一个只有 16 首歌曲的小例子,大写字母是 Artist,小写字母是歌曲标题。

  Aa Ab Ac Ba Bb Bc Bd Ca C2 Da Db Dc Dd Ea Fa Fb
n  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15

艺术家BE的歌曲最多,因此

m := 4

您搜索与16 = 2 * 2 * 2 * 2 互质但大于4 的素数,您会发现:

p := 5

您调用一次 PRNG 函数并获得,比如说,11,所以s = 11 是要播放的第一首歌曲 (s = 0)。然后你循环:

  Aa Ab Ac Ba Bb Bc Bd Ca Cb Da Db Dc Dd Ea Fa Fb
n  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
s  1 14 11  8  5  2 15 12  9  6  3  0 13 10  7  4

s 是播放的序列:

  Dc Aa Bc Db Fb Bb Da Fa Ba Cb Ea Ac Ca Dd Ab Bd 

没有艺术家重复,没有两首接二连三的歌曲,非常多样化。

【讨论】:

以上是关于将多个 mp3 文件流式传输到 Icecast的主要内容,如果未能解决你的问题,请参考以下文章

将 getUserMedia 流式传输到 Icecast 服务器?

使用 node js 实时流式传输 MP3 文件

通过 Yeti lame 包装器将音频流式传输到 mp3 文件

使用 ExtAudioFileWrite ios 将流式 mp3 数据包的缓冲区写入 wav 文件

如何实时流式传输音频文件

加密的 mp3 流式传输到 Flash SWF