Audio Zentrale - JanHG98/netcore-tetra GitHub Wiki
Verbindlich: main@8fb581b730f7a3833566c4bbb7c87875ad921e69; veröffentlicht bleibt v1.9.0. PR #74–#97 sind integriert. Deployment/Discovery, Imagebuilder, Pi-VPN und Syslog sind auf main, nicht mehr nur historische Vorschau. 26 reguläre Rollen einschließlich Deployment-VM; Provisioning ist optional zusätzlich.
Betreiberbestätigt: KDE-Boot, Rufe, SDS, Aufnahme/RF-Wiedergabe und WLAN am 13.10.; 28/28 Discovery-Agenten aktualisiert und keine ungeklärten Remote-Aufträge mehr am 15.10. Ein aktueller Backend-Gesamtrollout, NAS-Entlastung, SIP/Telegram, VPN-Wechsel und Dauerlauf bleiben separat offen. Vier alte Git-/Timeoutfehler bleiben Fehler.
Gesamtroadmap · Upstream-Vergleich · Roadmap und Releases. NETCORE-IAM-01 ist weiterhin Planung; AD-SSO-Pilot und Gruppenmapping sind konkretisiert, Produkt-/Betriebsentscheidung und Umsetzung offen.
TBS-WAV-Aufzeichnung, zentraler Recorder und Media Library sind unterschiedliche Pfade. Die aktuelle zentrale Medienstruktur führt seit PR #97 einen begrenzten lokalen Nutzdaten-Cache: 2 GiB Zielgröße, 24 h Vorhaltung und 2 GiB Reserve. Private SHA-256-/Größenbelege und ein echter NFS-/SMB-Mount sind Voraussetzung lokaler Freigabe. Metadaten und Belege bleiben lokal; NAS-Kopien werden nicht durch Cachewartung gelöscht.
Vorschau, Wellenform, neue/wiederholte Aussendung und Verarbeitung holen Dateien vorher zurück. Aktive/wartende Jobs schützen ihre Assets; bei NAS-Ausfall bleiben vorhandene Kopien erhalten, nicht rückholbare Abrufe liefern vorübergehend 503. Die Runtime-Übernahme erhält Konfiguration, Piper, Modelle und Medien. Code und native Tests sind belegt; tatsächliches NAS-Recall und Funkwiedergabe nach Update bleiben offen.
Die folgende frühere Fassung bleibt als datierte Historie erhalten. Frühere Dienstzahlen, Featurebranch-Aussagen, offene Tests und Prioritäten sind keine aktuelle Statusaussage; heutige Verfahren stehen oben beziehungsweise in den verlinkten kanonischen Docs.
Die Audio-Zentrale bündelt lokale Aufzeichnung, Medienverwaltung, Vorschau, TTS und Funkaussendung. Die Funktionen werden standardmäßig mit den Cargo-Features recording und audio-player gebaut. Im verteilten Aufbau existieren zusätzlich ein zentraler Recorder und die Media Library als eigene Dienste. Ein lokal sichtbares Asset ist dadurch nicht automatisch zentral freigegeben oder archiviert. Dienstkatalog
Empfangene TETRA-Sprache wird lokal als 8 kHz, mono, 16 Bit PCM WAV gespeichert. Zu jeder WAV-Datei wird eine JSON-Metadatendatei angelegt.
[recording]
enabled = true
active = true
directory = "/var/lib/netcore/recordings"
mode = "all" # all | selected_groups
selected_groups = []
minimum_free_space_mb = 2048
retention_days = 30
max_recording_minutes = 480
idle_finalize_secs = 15
max_list_entries = 2000mode = "selected_groups" zeichnet nur die in selected_groups eingetragenen GSSIs auf.
Der NFS-Mount muss bereits durch das Betriebssystem verfügbar und für den Dienstbenutzer beschreibbar sein.
archive_enabled = true
archive_directory = "/mnt/nfs-share/Recordings"
tts_archive_enabled = true
tts_archive_directory = "/mnt/nfs-share/TTS-Dateien"
archive_retry_seconds = 60Normale Aufzeichnungen landen im Ordner Recordings. Erzeugte TTS-WAVs werden separat nach TTS-Dateien kopiert. Bei kurzfristigem NFS-Ausfall bleiben lokale Dateien erhalten und die Archivierung wird erneut versucht.
[audio_player]
enabled = true
directory = "/var/lib/netcore/audio"
cache_directory = "/var/cache/netcore/audio"
source_issi = <QUELL-ISSI>
default_priority = 5
max_file_size_mb = 100
max_duration_seconds = 1800
lead_in_silence_blocks = 12
tail_silence_blocks = 3
group_release_guard_seconds = 6
individual_answer_timeout_seconds = 30
ffmpeg_path = "ffmpeg"WAV- und MP3-Dateien werden vor dem Funkruf vollständig vorbereitet und in das benötigte Sprachformat umgesetzt. Erst danach startet der neue Ruf. Das verhindert, dass eine langsame Dateikonvertierung die erste Aussendung zerstört.
Zusätzliche, bereits gemountete Verzeichnisse können als Shares eingebunden werden:
[audio_player.shares](audio_player.shares)
name = "Server"
path = "/mnt/nfs-share"
read_only = trueNetCore Piper stellt eine lokale HTTP-Schnittstelle bereit. Die Basisstation erzeugt daraus eine WAV-Datei, speichert sie wie ein Medium und sendet sie erst nach Auswahl aus. Das ist robuster als eine direkte Synthese während eines laufenden Funkrufs.
[tts]
enabled = true
endpoint = "http://127.0.0.1:5005"
cache_directory = "/var/cache/netcore/tts"
template_directory = "/var/lib/netcore/tts/templates"
auto_save_generated_templates = true
default_voice = "de-thorsten"
default_speed = 0.95
default_priority = 5
max_text_characters = 2000
synthesis_timeout_seconds = 90
max_output_file_mb = 25
cache_retention_minutes = 1440
keep_generated_audio = falseTTS-Dateien erhalten den Namen der Vorlage oder bei Freitext einen vom Bediener vergebenen Namen. So lassen sie sich später erneut auswählen und aussenden.
sudo install -d -o netcore -g netcore /var/lib/netcore/recordings
sudo install -d -o netcore -g netcore /var/lib/netcore/audio
sudo install -d -o netcore -g netcore /var/lib/netcore/tts/templates
sudo install -d -o netcore -g netcore /var/cache/netcore/audio
sudo install -d -o netcore -g netcore /var/cache/netcore/ttsBenutzer und Gruppe müssen zur Systemd-Unit passen.
Die Media Library verwaltet Audio-Assets, TTS-/Recorder-Import, Freigabe, Vorschau und Playout-Jobs; der Recorder hat eine eigene Aufbewahrung und Integritätsprüfung. Vor einer Aussendung die Asset-Version, Freigabe, Ziel-GSSI/ISSI, lokalen TBS-Cache und den zugehörigen Rufpfad prüfen. Die verteilten Dienste ersetzen nicht automatisch das lokale TBS-Recording. Architecture · Netzwerk-und-Ports
-
ffmpegvorhanden und ausführbar? - native Sprachcodec-Bibliothek korrekt gelinkt?
- Ziel-GSSI/ISSI gültig und erreichbar?
- bereits ein Ruf oder eine Audio-Aussendung aktiv?
- Cache-Verzeichnis beschreibbar?
- TTS nicht direkt synthetisieren und gleichzeitig senden.
- Datei zuerst vollständig erzeugen, speichern und anschließend aus der Medienliste senden.
- Ruf-Release und Hangtime im Log kontrollieren.
- bei gerätespezifischem Verhalten Re-Registrierung und Call-State prüfen.
mount | grep nfs
sudo -u netcore test -w /mnt/nfs-share/Recordings && echo schreibbar
sudo journalctl -u tetra.service -n 300 --no-pager | grep -iE 'archive|nfs|record|tts'