Partyline: Groepsspraakapplicatie voor Reticulum

Kenmerken

  • Versleutelde realtime groepsspraak: Audio over elk Reticulum-transport dat in staat is tot meer dan 6 kbps.
  • Lichtgewicht server en protocol: Eenvoudig te hosten; een Partyline-server kan in minder dan 30 seconden worden opgestart.
  • Toegangs- en kanaalbeheer per kamer: Opties voor open toegang, alleen geïdentificeerde gebruikers, toelatingslijsten van identiteits-hashes of een wachtwoord. Servers kunnen daarnaast een algemeen wachtwoord of een toelatingslijst vereisen.
  • Dial-in: Wanneer ingeschakeld, kunnen rnphone en andere LXST-clients (zoals Sideband en MeshChatX) de server bellen en direct in een kamer terechtkomen.
  • Configureerbare codecs: Elke kamer kan een eigen LXST-codec hebben, configureerbaar door de server. Gebruik Opus voor snelle verbindingen en Codec2 (tot 700 bps) voor langzame verbindingen.
  • Clients: Beschikbaar als GUI- en terminalclient met ondersteuning voor meerdere talen.

Installatie

Vereisten: Python 3.11 of nieuwer.

Via pip

Installeer de basisversie:

pip install partyline

Voor een systeembrede 'push-to-talk'-toets, voeg de optionele extra toe:

pip install "partyline[hotkeys]"

De grafische client maakt gebruik van Tk. Pip kan dit niet installeren. Op de meeste besturingssystemen is dit reeds geïnstalleerd. Zo niet, gebruik dan:

  • Debian of Ubuntu: sudo apt install python3-tk
  • Fedora: sudo dnf install python3-tkinter

Installeren vanuit broncode

Vereist Python 3.11 of nieuwer, Reticulum en LXST.

git clone https://github.com/RFnexus/partyline
cd partyline
pip install .

Of installeer via rngit:

git clone rns://4cf8a0651c4d73cacd0f93ac1d95e80a/public/partyline

Voor de systeembrede push-to-talk-toets:

pip install ".[hotkeys]"

Deze installatie voegt drie commando's toe: partyline, partyline-server en partyline-client.

Gebruik

Client

GUI-client starten:

partyline

Via 'Connect' wordt de serverbrowser geopend. Voeg een server toe via de hash of gebruik de browser om ontdekte servers te vinden. Dubbelklik op een kamer om deze te betreden. Onder 'Settings' kunnen audio-apparaten, verzendmodus, de push-to-talk-toets en UI-uiterlijk worden aangepast.

Terminal-client starten:

partyline-client HASH --name Bob --room Lobby

Beschikbare commando's: /join, /say, /poke, /who, /mute, /deaf. Typ /ptt om push-to-talk te schakelen. Operators hebben daarnaast toegang tot: /kick, /ban, /smute, /op en /move.

Server

Een server starten:

partyline-server --name "My server" --profile opus-high

De server toont de destination hash voor clients. Indien dial-in is ingeschakeld, wordt ook het nummer getoond dat rnphone-gebruikers kunnen bellen.

Voor configuraties van kamers, toelatingslijsten, operators, serverwachtwoorden en dial-in: kopieer server_example.json en start de server als volgt:

partyline-server --config server.json

Beschikbare --profile codecs voor kamers:

Voor spraak:

  • opus-high: Opus voice, 16 kbps
  • opus-med: Opus voice, 8 kbps
  • opus-low: Opus voice, 6 kbps
  • c2-3200: Codec2, 3200 bps
  • c2-2400: Codec2, 2400 bps
  • c2-1200: Codec2, 1200 bps
  • c2-700: Codec2, 700 bps

Voor muziek/streaming:

  • music-low: Opus music, 14 kbps
  • music-med: Opus music, 28 kbps
  • music-high: Opus music, 56 kbps

Richtlijn: Gebruik de hoogste bitrate die uw verbinding aankan. Zie server_example.json voor de volledige lijst met opties.

Installatie als systemd unit

Om de server als systemd unit te installeren, bepaal eerst het servercommando en maak vervolgens het bestand /etc/systemd/system/partyline.service aan:

[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

Activeer de service met:

sudo systemctl daemon-reload
sudo systemctl enable --now partyline

Muziek-, Broadcastkamers & Bots

Serveroperators kunnen broadcast-only kamers configureren voor hoogwaardige muziek en audio met behulp van de Opus CELT-profielen van LXST (music-high, music-med, music-low). In deze kamers kunnen alleen specifiek vermelde identiteiten audio verzenden. Voeg hun identiteits-hashes (gescheiden door komma's) toe in het music veld:

{"name": "Broadcast", "profile": "music-med", "music": ["0123456789abcdef0123456789abcdef"], "description": "Music/broadcast room. Only listed identities may talk. Uses LXSTs Opus CELT profile"}

Een voorbeeld van een Music Bot is te vinden onder bots/music_bot.py. Wanneer Partyline via pip is geïnstalleerd, kan deze worden uitgevoerd met:

python3 -m partyline.bots.music_bot

Push-to-Talk (Slow Link) Kamers

PTT-kamers (slow-mode) zijn ontworpen voor langzame verbindingen zoals LoRa, bare copper wire bitbashing en packet radio. Elke verbinding met een stabiele doorvoer van meer dan ~3,5 kbps kan een PTT-kamer gebruiken. Deze kunnen naast reguliere kamers bestaan op één Partyline-server.

In tegenstelling tot reguliere kamers is er bij PTT-kamers sprake van enige latentie. De audio wordt gepakt om de MTU van de verbinding te vullen (minder, maar voller pakketten in plaats van één frame per pakket). Daarnaast krijgen luisteraars een grotere receive jitter buffer om de onregelmatige aankomst van pakketten over radio-media zoals LoRa op te vangen.

Markeer een kamer als push-to-talk met "ptt": true. Optioneel kan "pttjitterms" worden ingesteld om de bufferdiepte aan te passen. Het wordt aangeraden PTT-kamers te gebruiken met de Codec2-profielen.

Voorbeelden:

{"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-Disclosure Notice

De third-party hosted API van Kimi K3 (https://www.kimi.com/en) is gebruikt voor de volgende taken:

  • I18N lokalisatie en UI gettext() implementatie.
  • Vertaling van UI-elementen en van de eo, es, nl en ru PO-bestanden.
  • Divers debuggen en het creëren van rnsconfig.py RNS helper utilities.

UI Vertaling

De .po bestanden bevinden zich in partyline/locale/.

  • Om een vertaling bij te werken: wijzig de msgstr regel onder de Engelse msgid.
  • Om een taal toe te voegen: kopieer partyline.pot naar een nieuw .po bestand en voeg dit toe aan LANGUAGES in partyline/i18n.py.

Voer python partyline/locale/compile.py uit en dien vervolgens een pull request in of stuur de wijzigingen naar het LXMF-adres.

Credits

  • Reticulum en LXST: Mark Qvist
  • Mumble: Inspiratie voor de UI.
  • Iconen: Tree, toolbar en applicatie-iconen van Tabler Icons.
  • Geluidsfragmenten: Kenney interface sounds.
  • Logo: Tekening van een bliktelefoon via openclipart.org.