通过 mpd 流式传输系统音频

通过 mpd 流式传输系统音频

我使用 mpd 通过 .mpd 将音乐流式传输到我的手机(连接到 Hi-Fi)http

然而,这仅适用于我的 mpd 数据库中的歌曲。我经常想在我的浏览器中播放一些东西,并且mpd也希望能够通过它进行流式传输。

有没有办法将输出路由pulse audio到扬声器mpd而不是扬声器?

答案1

mpd不接受pulseaudio输入源,因此没有直接的方法来路由pulseaudio通过MPD。

然而,借助 gstreamer 和一些聪明才智,您想要完成的事情仍然是可能的。我几年前就做到了这一点。

我写这个程序它实现了该图的“Gstreamer Pipeline Script”组件:

流图 http://tiyukquellmalz.org/sean/stream.svg

总结一下该图,会发生以下情况:

  • mpd 从磁盘上读取音乐文件,对其进行解码,然后将它们“播放”到module-null-sinkpulseaudio 类型的音频输出中。
  • 您想要在计算机上运行的任何其他输出声音的程序 - Adob​​e Flash、来自 gnome shell 的蜂鸣声、Web 浏览器等也会将其音频输出发送到module-null-sinkpulseaudio(它已成为系统的默认音频设备) 。
  • 输出module-null-sink有一个.monitor源,它可以让您将被推送到空接收器的音频并将其“捕获”回来,就像它是输入设备(如麦克风)一样。
  • Pulseaudio 对整台计算机上的所有音频程序(包括 mpd、Web 浏览器以及使用 Pulseaudio 的其他所有程序)进行动态软件混音。
  • 我编写的程序tribblify使用 GStreamer 捕获pulseaudio null sink 监视器音频,其中包含 mpd 以及系统上任何其他程序的混合音频;执行MP3编码;然后将其流式传输到shoutcast/icecast 服务器。tribblify本质上成为“流媒体源”。
  • tribblify程序会自动检测 mpd 何时更改播放音频的标签,并将这些标签推送到shoutcast 流中。
  • Icecast 或shoutcast 服务器可以位于同一台计算机或不同的计算机上,将结果流式传输到所有连接的客户端。

答案2

是的 - 这里的关键是 ALSA 环回功能。因此,首先您需要在 ALSA 中启用环回设备,该设备将作为输入设备(以及输出设备)出现在 PulseAudio 音量控制中。

sudo modprobe snd_aloop

然后可以将该设备添加到 mpd 服务器:

mpc add alsa://hw:1,1

其中 hw:1,1 是环回输入设备,可以使用命令列出aplay -l

那么你需要配置一个http输出插件为议员。下面的例子看起来像/etc/mpd.conf

 audio_output {
    type            "httpd"
    name            "My HTTP Stream"
    encoder         "vorbis"          # optional, vorbis or lame
    port            "8000"
    bind_to_address "192.168.1.38"               # optional, IPv4 or IPv6
    quality         "5.0"                   # do not define if bitrate is d$
#   bitrate         "128"                   # do not define if quality is d$
    format          "44100:16:1"
    max_clients     "0"                     # optional 0=no limit
 }  

就是这样。在“音量控制播放”选项卡中为您的音频源选择回放设备。
最后,您可以在目标点使用 httpd url 地址使用 VLC 或任何其他流渲染器:http://192.168.1.38:8000

相关内容