如何通过 WI-FI 将我的 GNU/Linux 音频输出流式传输到 Android 设备?

sem*_*nte 52 audio linux debian gnome pulse-audio

我想通过网络 (Wi-Fi) 将音频输出流式传输到我的 Android 设备。我不是在寻找音乐/视频流解决方案,但我会像蓝牙耳机一样将我的 GNU/Linux 桌面的任何音频输出流式传输到我的 Android 工作中。

我的 GNU/Linux 桌面是 Debian Wheezy,声音由pulseaudio 提供。

我已经尝试过 Pulseaudio 的 raop 模块(并在 paprefs 上启用它)+ Android 的 AirBuddle 应用程序,但音频没有流式传输(pulseaudio 看到连接到 AirBuddle,但声音没有重现,某些软件中存在连接失败,某些其他软件声音卡住了)。

小智 36

有一个非常简单的解决方案,因为 PulseAudio 已经拥有所有必要的工具。

  1. 使用命令获取源设备名称 pactl list | grep Name
  2. 创建以下名为 的脚本pashare

    #!/bin/sh
    case "$1" in
      start)
        $0 stop 
        pactl load-module module-simple-protocol-tcp rate=48000 format=s16le channels=2 source=<source_name_here> record=true port=8000
        ;;
      stop)
        pactl unload-module `pactl list | grep tcp -B1 | grep M | sed 's/[^0-9]//g'`
        ;;
      *)
        echo "Usage: $0 start|stop" >&2
        ;;
    esac
    
    Run Code Online (Sandbox Code Playgroud)
  3. 做一些检查和准备(允许脚本执行并检查端口是否成功打开):

    chmod 755 pashare
    ./pashare start
    netstat -nlt | grep 8000 
    telnet 127.0.0.1 8000
    
    Run Code Online (Sandbox Code Playgroud)
  4. 下载并安装PulseDroid.apk

  5. 在手机上启动应用程序;将 IP 地址设置为您的计算机并将端口设置为8000.

PS 您还可以查看 此 Wiki 页面以获取有关 Pulseaudio 网络流的一般信息,以及有关 RTP 流的此 Wiki 页面。不要对通过 WiFi 流式传输原始音频抱有太多期望;它需要大量的带宽。即使使用具有强大信号的高端无线路由器/AP,我也只能从中获得断断续续的音频。最好的办法可能是设置一个合适的媒体服务器(如 Rygel,它与 Pulseaudio 配合得很好)将原始音频转码为 MP3 之类的内容并进行流式传输。

  • 这也适用于这个 Android 应用程序:简单协议播放器 https://play.google.com/store/apps/details?id=com.kaytat.simpleprotocolplayer 请注意,这默认为 rate=44100,所以你可能想要用那个。 (9认同)
  • 使用 `pactl 列表 | grep "Monitor Source"` 为我显示了更多相关的资源。 (8认同)
  • `hostname -I` 是一个获取计算机 IP 地址的命令,以备有人需要时使用。 (2认同)

wil*_*lks 25

您可以使用VLC通过 HTTP 提供脉冲音频输出的 MP3 流。
主要优点是您无需在远程设备上安装任何特殊软件,只需网络浏览器(或音乐播放器)即可播放流。缺点是它只是音频,几秒钟的延迟使它对视频毫无用处

  1. 使用以下命令查找pulseaudio的输出名称:

    pactl list | grep "Monitor Source" 
    
    Run Code Online (Sandbox Code Playgroud)
  2. 启动 VLC http 服务器,用您的输出名称替换 XXXX:

    cvlc -vvv pulse://XXXX --sout '#transcode{acodec=mp3,ab=128,channels=2}:standard{access=http,dst=0.0.0.0:8888/pc.mp3}'
    
    Run Code Online (Sandbox Code Playgroud)
  3. 如果需要,请使用以下命令查找您的本地 IP 地址 ifconfig

  4. 在远程设备上,将浏览器(或音频流应用程序)指向:

    http://your.local.ip.address:8888/pc.mp3
    
    Run Code Online (Sandbox Code Playgroud)

注意:除非您将其完全静音,否则该流不受服务器上设置的音量的影响。如果需要,您可以将电平保持在 0 以上一点点,以便只听到远程设备的声音。


前两个步骤由polynomial_donut合并为一个:

cvlc -vvv pulse://$(pactl list | grep "Monitor Source" | awk '{print $3}') --sout '#transcode{acodec=mp3,ab=128,channels=2}:standard{access=http,dst=0.0.0.0:8888/pc.mp3}'
Run Code Online (Sandbox Code Playgroud)

  • 一行而不是前两行:`cvlc -vvv pulse://$(pactl list | grep "Monitor Source" | awk '{print $3}') --sout '#transcode{acodec=mp3,ab =128,channels=2}:standard{access=http,dst=0.0.0.0:8888/pc.mp3}'` (3认同)
  • 惊人的!虽然有 3 秒的延迟,但我对这个小技巧很满意,直到我找到那条该死的电缆。我可能还得再买一个... (2认同)
  • @КристиянКацаров 这个解决方案更像是流式传输网络广播,而不是连接蓝牙设备。延迟来自以下步骤:在服务器上编码 mp3 流、通过 http 提供服务、连接质量(服务器和客户端)以及在客户端解码流。任何超过 3 或 4 秒的延迟都意味着其中一个步骤花费的时间比应有的时间长。我不知道你会如何减少它,也许使用不同的编解码器和流质量? (2认同)

tot*_*tti 10

要通过 wifi 将音频输出流式传输到您的 Android 手机,您需要安装服务器软件,该软件可以在 PC 和 Android 设备上的客户端软件上发送音频。可用的选项是

WiFi 音频无线扬声器

运行 WiFi Audio Android 应用程序并按开始,您将在底部看到移动设备的 IP 地址,然后运行 ​​Windows/Linux 应用程序并将移动设备的 IP 地址放在 IP 地址字段中,然后在 PC 应用程序上按开始。现在从 PC 发出的所有音频都将发送到移动设备,您将在移动设备上听到音频。
下载

声线

将任何音乐或音频从您的 PC 无线传输到您的 Android 手机、平板电脑或其他 PC
主页 另请参阅

其他有用的链接
XBMC android SE

  • WiFi Audio 无线扬声器已从 github 中删除,论坛中的编译版本被用户报告为恶意软件。当心!从它的分布方式来看,Soundwire 也看起来很可疑。 (4认同)

Zer*_*out -4

哇这个老了……

无论如何,使用 VLC。一路上都有漂亮的 GUI。

  • 在桌面上启动 VLC。
  • 点击流,选择文件(添加您想要的文件数量),点击流。
  • 如果一切正确,则“下一步”。
  • 对于新目标,选择“http”(或您想要使用的任何内容)。如果您也想在进行流式传输的计算机上播放,请选择“本地显示”。接下来的几个对话都是不言自明的。

在您的 Android 设备上启动 VLC。点击搜索按钮旁边的图标(指向点的箭头)。http://<IP ADDRESS O OF THE MACHINE RUNNING VLC>:8080/帮我输入这是http://xxx.ca:8080/

已测试并工作。那么,在 2013 年 6 月 9 日这一古老的时间里,人们能做到这一点吗?也许吧,但我懒得检查 VLC 的提交日志;)

  • 他并不是在寻找音乐/视频流解决方案。 (5认同)