为了减少耳机在电脑与手机间来回切换造成的麻烦, 我们可以配置 ROC (Real-time audio streaming over the network) Pipewire 模块或单独的 CLI 工具, 向 Receiver 推送音频
Roc for Android! 是一个 Android 应用, 其封装了 ROC 的 library, 以便用户可以在 Android 上使用 UI 配置 ROC
pipewire-roc 是 ROC 的 Pipewire 模块, 可以作为 Sender 或 Receiver
概念
Sender: 音频产生侧, 将产生的音频推送至接受侧 Receiver: 播放音频侧, 将被推送的音频播放
若要将 PC 作为 Sender
Sender 安装
-
安装模块
Terminal window sudo pacman -S pipewire-roc -
配置音频输出设备 在如下路径内创建任意名称的
.conf文件~/.config/pipewire/pipewire.conf.d/并写入
context.modules = [{ name = libpipewire-module-roc-sinkargs = {fec.code = rs8mremote.ip = <receiver-ip>remote.source.port = 10001remote.repair.port = 10002remote.control.port = 10003sink.name = "ROC-Phone-Sink"sink.props = {node.name = "roc-phone-sink"node.description = "Roc Phone Sink"}}}] -
重启服务以加载配置
Terminal window systemctl --user restart pipewire wireplumber -
在需要时切换音频设备到
Roc Phone Sink
Receiver 安装
-
下载 Roc for Android! 并安装
-
打开应用并在必要时将 “耗电行为控制” 改为 “无限制”
-
选择 “Receiver” 面板, 将 Sender 配置的
<receiver-ip>修改为显示的 IP 地址并重启服务, 并单击 “START RECEIVER” 即可
若要将 PC 作为 Receiver
Receiver 安装
-
安装模块
Terminal window sudo pacman -S pipewire-roc -
配置音频输入设备 在如下路径内创建任意名称的
.conf文件~/.config/pipewire/pipewire.conf.d/并写入
context.modules = [{ name = libpipewire-module-roc-sourceargs = {fec.code = rs8mlocal.ip = 0.0.0.0local.source.port = 10001local.repair.port = 10002local.control.port = 10003source.name = "ROC-Phone-Source"source.props = {node.name = "roc-phone-source"node.description = "Roc Phone Source"media.class = "Audio/Source"audio.position = [ FL FR ]}}}] -
重启服务以加载配置
Terminal window systemctl --user restart pipewire wireplumber
Sender 安装
-
下载 Roc for Android! 并安装
-
打开应用并在必要时将 “耗电行为控制” 改为 “无限制”
-
选择 “Sender” 面板, 修改 IP 地址为 PC IP 地址, 并选择 “Currently playing apps” 或 “Microphone” 作为输入源, 并单击 “START SENDER” 即可
延迟表现
个人体感上来说, ROC 的延迟略大于 Sunshine + Moonlight, 但是整体在可接受范围内, 并且是纯音频传输 (Moonlight 在不使用第三方修改版情况下只能同时传输音频和视频)