我有三个实时音频源,我想将它们作为一个组合音频流重新广播。我想同时收听这三个实时音频源,但我的家庭连接受到每月数据流量的限制,所以我宁愿只从一个源流式传输。这就是为什么我想使用来自我的异地服务器的一个源。
是否可以使用类似 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 可以通过两种方式进行流式传输。
- 直接地
- 到另一台服务器,例如 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