Kapitel 11/Premium Rohtext.md aktualisiert

This commit is contained in:
2025-10-15 19:59:58 +00:00
parent 382ee2fe1c
commit fdb3adce90

View File

@@ -149,3 +149,263 @@ 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.
---
## 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 `<Application>`-Blocks fügst du einen Recording-Abschnitt ein:
```xml
<Application>
<Name>live</Name>
<Recording>
<Path>/data/recordings/</Path>
<Format>mp4</Format>
<SegmentDuration>3600</SegmentDuration>
<AutoStart>true</AutoStart>
</Recording>
<Output>
...
</Output>
</Application>
```
**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 1020 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 <ID_OME>
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.