将三个实时音频流合并为一个实时音频流

将三个实时音频流合并为一个实时音频流

我有三个实时音频源,我想将它们作为一个组合音频流重新广播。我想同时收听这三个实时音频源,但我的家庭连接受到每月数据流量的限制,所以我宁愿只从一个源流式传输。这就是为什么我想使用来自我的异地服务器的一个源。

是否可以使用类似 ffmpeg 的东西来实现这一点,或者它会比这更复杂?

我可以获得多种格式的实时音频源。它们支持流式传输的格式包括 Windows Media Player、Real Player、iTunes、Winamp、Web Player 和 Java Web Player,因此获取支持的源类型不是问题。

以下是两个 feed 的示例:

  • http://audio2.radioreference.com/342138428
  • http://audio7.radioreference.com/333108723

我想把这些内容整合成一个 feed,所以我会关注http://example.com/radiostream然后我就得到了一个流。现在源是 MPEG 格式,用完全相同的编解码器输出完全没问题。

答案1

混合两个通道很简单。下面是一个混合两个通道并使用过滤器录制 500 秒文件的测试amix

ffmpeg -i http://audio2.radioreference.com/342138428 -i http://audio7.radioreference.com/333108723 -filter_complex amix=inputs=2 -t 500 a.mp3

这比过滤器更简单amerge,过滤器也依赖于通道布局(左、右、中等)。因此,虽然这也有效,但它几乎平移了通道:

ffmpeg -i http://audio2.radioreference.com/342138428 -i http://audio7.radioreference.com/333108723 -filter_complex amerge=inputs=2 -t 500 a.mp3

流媒体:

ffmpeg 可以通过两种方式进行流式传输。

  1. 直接地
  2. 到另一台服务器,例如 icecast

本指南更多细节。

使用 icecast,源密码为“hackme”(默认),端口号为 8000(默认),启动如下:

icecast -c /usr/local/etc/icecast.xml

当然你的答案是:

icecast -c /path/to/your/icecast.xml

然后使用amerge来提供给 icecast:

ffmpeg -i http://audio2.radioreference.com/342138428 -i http://audio7.radioreference.com/333108723 -filter_complex amerge=inputs=2 -f mp3 icecast://source:hackme@localhost:8000/radio

打开 VLC 并连接到流-http://192.168.1.128:8000/radio(这是我指定的ip,你可以使用localhost:8000/radio)。

您可以听到 2 个流。使用 amerge(而不是 amix)时,2 个流将左右平移,并且很容易区分。

要混合 3 个流,请使用amix过滤器:

ffmpeg -i http://audio2.radioreference.com/342138428 -i http://audio7.radioreference.com/333108723 -i <third stream> -filter_complex amix=inputs=3 -f mp3 icecast://source:hackme@localhost:8000/radio

相关内容