我有一部未使用的 HTC Hero Android 手机(运行 Android OS 2.1),我想将它连接到音频放大器并保持连接数月,这样我就可以将这部 Android 手机用作远程脉冲音频服务器/接收器/等。
Android 市场上有“远程音频”应用程序,可以从 /dev/dsp 获取流。/dev/dsp已被禁用由于错误/任何原因在 ubuntu 10.10 中,甚至在我按照以下方法启用它之后此主题- 关注后这些说明它没有帮助,所以当我单击我的 android 上的播放/暂停按钮时 - 什么都没有发生并且 mpg123 song.mp3 仍然使用我的笔记本电脑扬声器。last | head 甚至没有显示这个新用户登录(我想它应该出现在这里?)
通过“pulseaudio”搜索,我发现气泡在 Android 市场上,但它说“不适用于 MacOS X 上的 RaopX 和 Linux 上的 pulseaudio 的 raop 模块。”(c)
那么有没有办法将 Android 手机用作远程音频接收器,理想情况下不仅限于播放 mp3/音乐 - 而是一般的声音子系统?
我肯定不是唯一一个希望通过 Wi-Fi 将音频传送到 Android 手机并在合适的扬声器上收听的人吧?
答案1
两天前我被这个问题困扰,一直没搞清楚,最后在 AirBubble 手册上看到说不支持 RAOP。
我最终利用 pulseaudio 的 DLNA/UPnP 功能解决了这个问题。它的工作方式与你预期的一样。你可以使用盒子上任何带有 pulseaudio 输出的应用程序播放声音,并在需要时选择流式输出以将其重定向到你的 Android 设备。
首先,安装 Rygel:
$ sudo apt-get install rygel rygel-preferences rygel-gst-launch
然后修改文件 /etc/rygel.conf,使得带有参数 enable-transcoding 的行如下所示:
enable-transcoding=false
然后加载DLNA和TCP模块并启动rygel:
$ pactl load-module module-http-protocol-tcp
$ pactl load-module module-rygel-media-server
$ pactl load-module module-null-sink sink_name=upnp format=s16be channels=2 rate=44100 sink_properties="device.description='DLNA/UPnP Streaming' device.bus='network' device.icon_name='network-server'"
$ rygel
在您的 Android 设备上下载应用程序 BubbleUPnP。您的 pulseaudio 输出设备将列在服务器“%HOSTNAME% 上的声音”下。在声音偏好设置中将计算机上的输出定向到 DLNA 设备。在 BubbleUPnP 中选择相同的输出。
请记住,BubbleUPnP 的前 30 分钟是免费的。完整版售价 3.49 欧元,但我认为它物有所值。我没有找到其他适合我的应用程序。
最后,如果您不喜欢,可以使用 rygel-preferences 禁用媒体浏览器:
$ rygel-preferences
再提醒一下:这直接传输原始 LPCM 数据,速度恒定为 ~250 kB/s。如果您使用的是非 802.11 n 网络,任何虚假的 WLAN 活动都会引起卡顿。如果您计划将娱乐解决方案建立在无线流的基础上,请考虑购买无线 n 路由器。
后续工作:转码
为了减少网络开销和卡顿(除非您使用 802.11 n 网络,否则就会发生这种情况),可以将音频流转码为 mp3。
将其粘贴到 ~/.config/rygel.conf 中
[GstLaunch]
enabled=true
launch-items=mypulseaudiosink
mypulseaudiosink-title=Sound on @HOSTNAME@
mypulseaudiosink-mime=audio/mpeg
mypulseaudiosink-launch=pulsesrc device=upnp.monitor ! lamemp3enc target=quality quality=6
使用“Gst Launch”DLNA 服务,该服务将在您启动 rygel 时出现。
后续步骤 2:FLAC
LAME 最多会导致 2 分钟的延迟(!)。而 FLAC 则非常快,通常不到一秒。将上例中的行更改为:
mypulseaudiosink-mime=audio/flac
mypulseaudiosink-launch=pulsesrc device=upnp.monitor ! flacenc quality=8
这会将流速降低到大约 100 kB/s,从而可以在大多数 802.11g 网络上与多个用户一起流畅播放。我在下载 torrent 时进行了测试。全速时,出现了一些卡顿,但当我将下载速度限制到低于最大带宽的 200 kB/s 左右时,它又变得流畅了。
另外,您还消除了任何质量损失。
上面有几个问题 - 检查并编辑~/.config/rygel.conf
,/etc/.config/rygel.conf
如果它不是默认加载的(?)。
接收器创建将不再适用于更高版本的 Ubuntu。
但是,对我而言,有用的是遵循所有说明(不包括创建接收器)。然后运行paprefs
,并在“网络服务器”选项卡上,选择底部选项“使本地声音设备可用作 uPnP 服务器”(可能还需要子选项)。
启动 rygel,并在 PulseAudio 设置中选择新的“DLNA/UPnP Streaming”选项。
在 BubbleUPnP 上选择“Gst Launch”作为库。在应用程序中,选择库,现在顶部应该有一个名为“声音开启”的选项。
答案2
我认为你的想法有点过了,试图让你的手机做一些它本来不应该做的事情(连接到 PulseAudio 或更低级别的功能)。让你的电脑去做那些艰苦的工作。
我建议使用 Icecast 之类的东西(教程在这里) 并使用 30 多个可以进行流式传输的 Android 应用程序之一。
答案3
Shairplay 不支持 TCP,而 raop_play(我认为 pulseaudio-module-raop 就是基于此)不支持 UDP。raop 为何只支持 TCP 很奇怪,UDP 表面上看起来似乎是一种更简单、更适合的协议。
如果您的源是 flac,那么通过 MP3 传输的 icecast 会降低质量,而且会占用更多的 CPU。MPD 本身支持 pulseaudio 输出,因此您可以使用安装了 mpdroid 应用程序的 Android 手机等“打开和关闭”房子的不同房间。如果您可以使用 airplay docks 作为端点,那么您将拥有一个很棒的设置。但您不能这样做,因为 raop 不支持更简单的 UDP 端点!
答案4
您可以在服务器上使用 Foobar2000,泡泡即插即用(付费软件)在客户端上。
- 获取葡萄酒
- 得到
foobar_v1.2.5.exe
$ wine foobar2000_v1.2.5.exe
- 下一个,下一个,下一个... :)
- 得到foo_upnp
- 在 foobar2000 的组件文件夹中提取(可能位于
~/.wine/drive_c/Program Files/
) - 启动 foobar2000
- 进入库→配置→播放→输出→设备并选择“空输出”
- 确保
ufw
没有阻塞相关流量 - 在 BubbleUPnP 中:
- 进入设备→库并选择 foobar2000 服务器
- 在“库”中,选择“播放流捕获”
这种方法的优点是,如果你在 Android 上暂停,它将积累一个缓冲区(因为服务器仍在发送)。
在 Ubuntu(Wine 版本1.5.28-0ubuntu1~ppa1
、foobar2000 版本 1.2.5 和 foo_upnp 版本 0.99.46)和 Windows 上测试。