From fdb3adce905a4b9ad7a3910847293ea900a14f70 Mon Sep 17 00:00:00 2001 From: Thomas Dannenberg Date: Wed, 15 Oct 2025 19:59:58 +0000 Subject: [PATCH] Kapitel 11/Premium Rohtext.md aktualisiert --- Kapitel 11/Premium Rohtext.md | 262 +++++++++++++++++++++++++++++++++- 1 file changed, 261 insertions(+), 1 deletion(-) diff --git a/Kapitel 11/Premium Rohtext.md b/Kapitel 11/Premium Rohtext.md index 42bf997..197f5f8 100644 --- a/Kapitel 11/Premium Rohtext.md +++ b/Kapitel 11/Premium Rohtext.md @@ -148,4 +148,264 @@ Beide laufen parallel, werden unabhängig verarbeitet und können an unterschied > [!TIP] > Wenn du Platz sparen willst, kannst du die vertikale Szene mit geringerer Bitrate streamen. -> Mobile Plattformen benötigen deutlich weniger Bandbreite als YouTube oder Twitch. \ No newline at end of file +> Mobile Plattformen benötigen deutlich weniger Bandbreite als YouTube oder Twitch. + +--- + +## Automatische Aufzeichnung (Recording) + +Neben der gleichzeitigen Übertragung an mehrere Plattformen kann OvenMediaEngine Streams auch lokal mitschneiden. +Das ist besonders nützlich, wenn du VODs sichern, Highlights schneiden oder Material für Shorts und Reels archivieren willst. +Die Aufnahme erfolgt direkt im OME-Container, ohne dass OBS zusätzlich aufzeichnen muss. + +### Ziel des Abschnitts + +Du richtest OME so ein, dass alle eingehenden Streams automatisch auf der Server-Seite gespeichert werden. +Jeder Streamlauf erzeugt eine eigenständige Videodatei im gewünschten Format. +So bleibt jedes Live-Event vollständig erhalten, unabhängig von Plattformen oder VOD-Beschränkungen. + +> [!NOTE] +> Die Aufzeichnung geschieht serverseitig. +> Dein Encoder sendet weiterhin nur einen Stream – OME übernimmt die Speicherung automatisch. +> Damit wird dein System weniger belastet als bei gleichzeitiger Aufnahme in OBS. + +### Schritt 1 – Aufnahme aktivieren + +Die Funktion wird in der **Server.xml** innerhalb der jeweiligen Application definiert. +Unterhalb deines ``-Blocks fügst du einen Recording-Abschnitt ein: + +```xml + + live + + /data/recordings/ + mp4 + 3600 + true + + + ... + + +``` + +**Erläuterung:** +- **Path** – Zielordner für alle Aufnahmen (muss existieren und Schreibrechte haben) +- **Format** – Containerformat der Datei (`mp4`, `mkv` oder `flv`) +- **SegmentDuration** – Dauer eines Abschnitts in Sekunden (3600 = 1 Stunde) +- **AutoStart** – startet die Aufnahme automatisch, sobald der Stream eingeht + +> [!TIP] +> Wenn du lieber manuell startest, setze `AutoStart` auf `false`. +> Du kannst die Aufnahme dann über OvenStudio per Klick aktivieren. + +### Schritt 2 – Speicherort und Rechte prüfen + +Standardmäßig ist `/data/recordings/` ein interner Ordner im Container. +Du kannst ihn über eine gemountete Proxmox-Disk oder ein NFS-Share mit größerem Speicherplatz verbinden. +Prüfe anschließend, ob Schreibrechte vorhanden sind: + +```bash +ls -ld /data/recordings/ +``` + +Die Ausgabe sollte `drwxrwxr-x` oder ähnlich zeigen. +Wenn nicht, Rechte anpassen: + +```bash +chmod 775 /data/recordings/ +``` + +> [!NOTE] +> Für produktive Systeme empfiehlt sich ein separater Datenträger oder ein Mount-Punkt auf deinem Storage-Server. +> So verhinderst du, dass dein Container durch Aufnahmen vollläuft. + +### Schritt 3 – Aufnahme testen + +1) Starte einen Test-Stream über OBS an deinen OME-Input (`/live`). +2) Warte 10–20 Sekunden, bis OME die Session registriert. +3) Öffne den Aufnahmeordner und prüfe, ob dort eine Datei erstellt wird, z. B. + ``` + /data/recordings/live_2025-10-13_20-00-00.mp4 + ``` +4) Stoppe den Stream – OME schließt die Datei automatisch sauber ab. + +Wenn die Datei korrekt abgespielt werden kann, funktioniert die Aufzeichnung. + +> [!TIP] +> Kontrolliere regelmäßig die Speicherbelegung. +> OME löscht alte Aufnahmen nicht automatisch. + +### Schritt 4 – Automatische Verwaltung mit n8n + +Ziel dieses Abschnitts: +Aufnahmen aus dem OvenMediaEngine-Container automatisch sichern, übertragen und anschließend löschen. +Die Automatisierung erfolgt mit n8n über SFTP, da OME und n8n in getrennten LXC-Containern laufen. +So bleibt der Aufnahme-Container schlank und deine VODs landen automatisch im Archiv (z. B. Nextcloud oder Storage-LXC). + +> [!NOTE] +> Dieser Abschnitt setzt kein Admin-Wissen voraus. +> Du kannst alle Befehle exakt so kopieren und im Container ausführen. +> Wir verwenden den Benutzer `transfer` und Port 22. + +### Vorbereitung – SFTP-Verbindung zwischen OME und n8n herstellen + +#### 1. SSH und Benutzer im OME-Container aktivieren + +```bash +pct enter +apt install openssh-server -y +adduser transfer +systemctl enable --now ssh +``` + +Passwort vergeben und bestätigen. +IP ermitteln: + +```bash +ip a +``` + +Beispiel: `10.0.0.152` +Testen: + +```bash +sftp transfer@10.0.0.152 +``` + +Wenn das Login funktioniert, ist die Verbindung aktiv. + +> [!TIP] +> Falls SSH nicht installiert ist: `apt install openssh-server -y` + +#### 2. Aufnahme-Ordner freigeben + +```bash +chown -R transfer:transfer /data/recordings +chmod 755 /data/recordings +``` + +Der Benutzer *transfer* darf lesen und schreiben, aber keine Systemänderungen vornehmen. + +#### 3. SFTP-Credential in n8n anlegen + +| Feld | Wert | +|------|------| +| Host | 10.0.0.152 | +| Port | 22 | +| Username | transfer | +| Password | (dein Passwort) | +| Protocol | SFTP | +| Host Fingerprint Check | deaktiviert (optional) | + +Speichern → **Test Connection** → Success. + +> [!NOTE] +> Optional kannst du stattdessen SSH-Keys nutzen +> (`/home/transfer/.ssh/authorized_keys`). + +### Workflow-Überblick + +1. Schedule Trigger – Startzeit definieren +2. SFTP – List – Dateien anzeigen +3. SFTP – Download – Datei holen +4. Nextcloud – Upload File – Archivierung +5. If Node – Upload-Erfolg prüfen +6. SFTP – Delete – Original löschen +7. Discord – Send Message – Benachrichtigung + +👉 Screenshot geeignet: *n8n-Workflow mit 7 Nodes, beginnend bei Schedule Trigger.* + +### Schritt 1 – Schedule Trigger + +| Feld | Wert | +|------|------| +| Trigger | Every day | +| Time | 03:00 | +| Timezone | Europe/Berlin | + +Dieser Node startet den Workflow einmal pro Nacht. + +### Schritt 2 – SFTP (List Files) + +| Feld | Wert | +|------|------| +| Operation | List | +| Remote Path | `/data/recordings` | +| Recursive | false | +| Return All | true | +| Credential | `sftp_ome` | + +> [!NOTE] +> Dieser Node liefert `name`, `path`, `size`, `modifiedAt`. + +### Schritt 3 – SFTP (Download File) + +| Feld | Wert | +|------|------| +| Operation | Download | +| Remote Path | `={{ $json.path }}` | +| Binary Property | `data` | +| Credential | `sftp_ome` | + +Der Node speichert die Datei als Binary-Objekt `binary.data`. + +### Schritt 4 – Nextcloud (Upload File) + +| Feld | Wert | +|------|------| +| Resource | File | +| Operation | Upload | +| Use Binary Data | true | +| Binary Property | `data` | +| Folder Path | `/UCC/Recordings/` | +| File Name | `={{ $json.name }}` | +| Credential | `nextcloud_main` | + +> [!TIP] +> Dynamische Unterordner: `/UCC/Recordings/{{ $json.path.split('/').slice(-2, -1)[0] }}/` + +### Schritt 5 – If (Upload erfolgreich?) + +| Feld | Wert | +|------|------| +| Mode | All rules must match | +| Value 1 | `={{ $json.fileId || $json.id }}` | +| Operation | Is empty | +| Negate | true | + +**TRUE** = Upload ok → weiter zu Delete +**FALSE** = Fehler → stoppt Workflow + +### Schritt 6 – SFTP (Delete File) (optional) + +| Feld | Wert | +|------|------| +| Operation | Delete | +| Remote Path | `={{ $json.path }}` | +| Credential | `sftp_ome` | + +> [!TIP] +> Falls der Delete-Node keinen Pfad sieht, verwende einen Merge-Node (Mode: Pass-Through) zwischen Download und Upload, damit Metadaten erhalten bleiben. + +### Schritt 7 – Discord (Send Message) (optional) + +| Feld | Wert | +|------|------| +| Resource | Message | +| Operation | Create | +| Channel ID | `123456789012345678` | +| Text | `=🎥 Upload abgeschlossen: {{$json.name}} → /Recordings` | +| Credential | `discord_bot_main` | + +### Troubleshooting & Tipps + +> [!NOTE] +> **Keine Dateien gefunden:** Pfad im SFTP-Node prüfen, Benutzerrechte kontrollieren (`ls -la /data/recordings`). +> **Upload fehlschlägt:** „Use Binary Data“ aktiv, Zielordner in Nextcloud existiert. +> **Delete funktioniert nicht:** Pfad fehlt → Merge Node zwischen Download und Upload setzen. +> **SFTP-Verbindung scheitert:** Port 22 offen, SSH-Dienst aktiv, Credential testen. +> **Laufende Aufnahmen:** Filter im SFTP-List-Node verwenden (`Modified Before = Now – 10 min`). + +Mit dieser Automatisierung werden alle neuen Aufnahmen nachts gesichert, optional gelöscht und du wirst über Discord benachrichtigt. +Der gesamte Prozess läuft serverseitig und vollständig autonom.