Partyline:基于 Reticulum 和 LXST 的群体语音应用
Partyline: A group voice application for Reticulum, built on LXST
Partyline 是一款基于 Reticulum、使用 LXST 构建的群体语音应用,支持加密实时多人语音、房间权限控制、拨号接入以及 GUI 和终端客户端。
项目提供可直接运行的服务器、GUI 和终端客户端,以及多套房间权限、编码和 PTT 配置,便于评估不同网络条件下的部署方案。
一款适用于 Reticulum 的群组语音应用,基于 LXST 构建,并受 Mumble 启发
功能
- 通过任何可提供 >6 kilobits per second 传输能力的 Reticulum 传输方式,实现加密的实时群组语音和音频
- 易于托管的轻量级服务器和协议。启动 Partyline 服务器只需不到 30 seconds。
- 按房间进行访问和频道控制。访问方式可选:开放、仅限已识别用户、身份哈希允许列表或密码。服务器也可要求密码或允许列表
- 拨入:启用后,rnphone 以及 Sideband、MeshChatX 等其他 LXST 客户端也可以拨打服务器并进入房间
- 每个房间都有自己的 LXST 编解码器,可由服务器配置。快速链路使用 Opus,慢速链路则可使用低至 700 bps 的 Codec2。
- 支持多语言的 GUI 和终端客户端
安装
需要 Python 3.11 或更新版本
pip install partyline
若要添加系统级按键通话快捷键,请添加可选附加项:
pip install "partyline[hotkeys]"
图形客户端使用 Tk,而 pip 无法安装它。在大多数操作系统/发行版中,它可能已经由系统安装。如果没有:
在 Debian 或 Ubuntu 上运行 sudo apt install python3-tk,在 Fedora 上运行 sudo dnf install python3-tkinter。
从源代码安装
需要 Python 3.11 或更新版本、Reticulum 和 LXST
git clone https://github.com/RFnexus/partyline
cd partyline
pip install .
或者通过 rngit 安装:
git clone rns://4cf8a0651c4d73cacd0f93ac1d95e80a/public/partyline
若要安装系统级按键通话快捷键,请使用以下命令安装可选附加项:
pip install ".[hotkeys]"
这会安装三个命令:partyline、partyline-server 和 partyline-client。
运行
启动 GUI 客户端:
partyline
“连接”会打开服务器浏览器。你可以通过其哈希值添加服务器,也可以使用服务器浏览器查找通过 announces 发现的服务器。双击某个房间即可加入。“设置”中包含音频设备、发送模式、按键通话快捷键和界面外观选项

终端客户端
partyline-client HASH --name Bob --room Lobby
命令为:/join, /say, /poke, /who, /mute, /deaf
输入 /ptt 可切换按键通话
或以操作员身份使用:/kick、/ban、/smute、/op 和 /move
服务器
启动服务器:
partyline-server --name "My server" --profile opus-high
服务器会打印供客户端使用的目标哈希;如果启用了拨入并为房间配置了 rnphone 用户拨打的号码,也会打印该号码。要配置房间、访问列表、操作员、服务器密码和拨入功能,请复制 server_example.json 并使用以下命令启动:
partyline-server --config server.json
房间可用的 --profile 编解码器:
opus-high- Opus 语音,16 kbpsopus-med- Opus 语音,8 kbpsopus-low- Opus 语音,6 kbpsc2-3200- Codec2,3200 bpsc2-2400- Codec2,2400 bpsc2-1200- Codec2,1200 bpsc2-700- Codec2,700 bpsmusic-low- Opus 音乐,14 kbpsmusic-med- Opus 音乐,28 kbpsmusic-high- Opus 音乐,56 kbps
有关完整选项列表,请参阅 server_example.json。
opus-high-med-low 和 Codec2 模式用于语音,music-high-med-low 用于播放流式音乐或向房间广播。一般来说,请使用链路能够承载的最高比特率
安装为 systemd 单元
要作为 systemd 单元安装,请使用 which partyline-server 查找服务器命令,然后创建 /etc/systemd/system/partyline.service:
[Unit]
Description=Partyline voice server
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=partyline
ExecStart=/usr/local/bin/partyline-server --config /home/partyline/server.json
Restart=on-failure
[Install]
WantedBy=multi-user.target
然后:
sudo systemctl daemon-reload
sudo systemctl enable --now partyline
音乐/广播房间 & 机器人
服务器操作员还可以使用 LXST 的 Opus CELT 配置文件,为高质量音乐和音频配置仅广播房间。可选项为 music-high、music-med 和 music-low。音乐房间是一种特殊房间,只有列出的身份才能发送音频。在 music 中添加它们的身份哈希,以逗号分隔
{"name": "Broadcast", "profile": "music-med", "music": ["0123456789abcdef0123456789abcdef"], "description": "Music/broadcast room. Only listed identities may talk. Uses LXSTs Opus CELT profile"}
示例 Music Bot 可在 bots/music_bot.py 下找到。使用 pip 安装 Partyline 后,可通过 python3 -m partyline.bots.music_bot 运行
按键通话(慢速链路)房间
PTT(或慢速模式)房间是专为较慢链路设计的房间,例如 LoRa、裸铜线 bitbashing 和数据包无线电。任何稳定吞吐量超过 ~3.5 kbps 的连接都可以使用 PTT 房间。它们可以与常规房间共存于同一 Partyline 服务器中,使快速客户端和慢速客户端都能通过语音进行通信。
与普通房间相比,这里存在少许延迟。PTT 房间会将传出音频打包至链路的 MTU,以更少、更满的数据包发送,而不是每个数据包只发送一帧;同时,每位监听者都会获得更大的接收抖动缓冲区,以平滑 LoRa 等无线电介质上突发式到达的数据。
使用 "ptt": true 将任意房间标记为按键通话。也可选择设置 "ptt_jitter_ms" 以更改缓冲区深度。建议将 PTT 房间与 codec2 配置文件搭配使用。
{"name": "LoRa 1200", "profile": "c2-1200", "ptt": true, "description": "Slow-link push to talk"}
{"name": "Packet Radio Net 700", "profile": "c2-700", "ptt": true, "ptt_jitter_ms": 9000}
LLM 披露声明
Kimi K3(https://www.kimi.com/en)的第三方托管 API 被用于以下任务:
- I18N 本地化和 UI
gettext()实现 - 翻译 UI 元素以及 eo、es、nl 和 ru PO 文件
- 其他调试工作以及
rnsconfig.pyRNS 辅助工具的创建
UI 翻译
.po 文件位于 partyline/locale/
要更新翻译,请修改英文 msgid 下的 msgstr 行
要添加语言,请将 partyline.pot 复制到新的 .po 文件,并将其添加到 partyline/i18n.py 中的 LANGUAGES。
运行 python partyline/locale/compile.py,然后创建一个包含你的更改的拉取请求,或将其提交至以下 LXMF 地址:
致谢
- Reticulum 和 LXST 由 Mark Qvist 开发
- Mumble。始终稳定运行的优秀软件。最好的 UI 都是偷来的 UI
- 来自 Tabler Icons 的树形、工具栏和应用程序图标
- 来自 Kenney 界面音效 的音效
- 标志中的锡罐电话插图来自 openclipart.org
来源:Hacker News · github.com


