多个 pulseaudio 多播“频道”

多个 pulseaudio 多播“频道”

我正在运行 ubuntu 服务器,我已为其配置了 pulseaudio RTP 多播接收器。此接收器用于多种应用程序。

我现在正在寻找的是是否有一种方法可以为 RTP 多播提供额外的“通道”,以便同一台计算机可以同时多播不同的流,并且我是否可以将我的计算机配置为只接受其中一个通道。

它可以与家庭音响系统中的不同区域进行比较,其中每个区域都有自己的多播“频道”

这是可能的吗?那么如何实现呢?

答案1

可以通过本地网络发送多个并发 RTP 流,方法是为每个流分配不同的多播 IP:

# stream 1
pactl load-module module-null-sink sink_name=rtp1 format=s16be channels=1 rate=44100 sink_properties="device.description='rtp1'"
pactl load-module module module-rtp-send source=rtp1.monitor loop=0 destination=224.0.0.56
# stream 2
pactl load-module module-null-sink sink_name=rtp2 format=s16be channels=1 rate=44100 sink_properties="device.description='rtp2'"
pactl load-module module module-rtp-send source=rtp2.monitor loop=0 destination=224.0.0.57

然后使用以下命令监听接收方对应的 IP:

pactl load-module module-rtp-recv sap_address=224.0.0.56 # resp. 224.0.0.57

然而我无法测试它是否真的按我想象的那样起作用。

此外,这种方法还有几个缺点:

  • 对于每个 RTP 发送流,我们需要定义它自己的(独有的)接收器。
  • 发送多个未压缩通过我们的网络传输的音频流将不可避免地导致拥塞,因为这些流将占用大量的带宽。
  • 我们需要一个脚本解决方案来选择一个“渠道”来自接收方的流。
  • 生成多个同时的 RTP 流将需要服务器上相当多的 CPU 能力,因此这可能是有风险的。

我想建议的一个更好的选择是建立一个冰播在您的 Ubuntu 服务器上运行服务器。这并不难:

使用此解决方案,您将能够

  • 溪流压缩网络中的音频数据(例如 ogg 或 mp3)
  • 发送多个音频通道(即“广播电台”) 同时地
  • 只需通过流的名称,即可从接收器(也可以是互联网广播接收器或智能手机)轻松切换这些流
  • Ices2 和 Ices 分别可帮助您流式传输播放列表和 Darkice 来流式传输您的声卡数据。

相关内容