我使用 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-sink
pulseaudio 类型的音频输出中。 - 您想要在计算机上运行的任何其他输出声音的程序 - Adobe Flash、来自 gnome shell 的蜂鸣声、Web 浏览器等也会将其音频输出发送到
module-null-sink
pulseaudio(它已成为系统的默认音频设备) 。 - 输出
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