- Registriert
- 18. Februar 2017
- Beiträge
- 2.003
- Lösungen
- 3
- Reaktionspunkte
- 1.997
- Punkte
- 2.120
StreamRelay Delay Buffer für OSCam – Konfiguration und Anleitung
Mit dem Patch streamrelay-delaybuffer_vxx.p1-xxx-tem_invictus.patch erhält StreamRelay einen optionalen, zeitgesteuerten Delay Buffer. Der bisherige direkte Verarbeitungsweg bleibt erhalten und ist weiterhin der Standard.
Der neue Verarbeitungsweg puffert die empfangenen TS-Daten pro Stream-Verbindung, wartet auf ein gültiges Control Word (CW), entschlüsselt die Daten in einem eigenen Writer Thread und sendet sie anschließend an den Client. Damit können verspätete oder kurzzeitig fehlende CWs besser abgefangen werden, ohne dass sich die Stream-Verzögerung bei jedem Problem dauerhaft vergrößert.
Danksagung: Dieser Patch basiert auf der von @BugSpencer vorgestellten Idee zum zeitverzögerten StreamRelay: Oscam StreamRelay Delay Mod
Basis und Voraussetzung
Was der Patch ändert
Wichtig: Der erweiterte Pfad ist standardmäßig ausgeschaltet. Ohne eine bewusste Aktivierung verhält sich StreamRelay weitgehend wie zuvor.
Konfiguration
Die Optionen befinden sich in oscam.conf im Abschnitt streamrelay. Im WebIf sind sie unter Configuration -> StreamRelay in den Bereichen Relay Timing Settings und Relay Runtime Settings zu finden.
stream_relay_delay_buffer
Schaltet den neuen Verarbeitungsweg ein oder aus.
Bei 0 wird wie bisher direkt entschlüsselt und gesendet. Bei 1 werden Writer Thread, CW startup gating, Resync und Backpressure verwendet.
stream_relay_delay_time
Bestimmt in Millisekunden, wie lange TS-Daten im erweiterten Delay Buffer verbleiben, bevor sie entschlüsselt und ausgegeben werden.
stream_relay_cw_timeout
Maximale Wartezeit in Millisekunden auf ein verwendbares CW.
stream_relay_resync_grace
Wartezeit in Millisekunden bei einem CW-Ausfall oder veralteten CW während eines bereits laufenden Streams.
stream_relay_buffer_time
Dies ist die bereits vorhandene, einmalige Startverzögerung vor der Stream-Verarbeitung. Sie ist kein Ersatz für den neuen zeitgesteuerten Delay Buffer.
stream_relay_log
Aktiviert zusätzliche ODD/EVEN-, CW-Timing- und Buffer-Statistiken im OSCam-Log.
Für die Einrichtung und Fehlersuche ist 1 hilfreich. Im Dauerbetrieb kann die Option wieder auf 0 gesetzt werden. Wichtige Zustands- und Fehlermeldungen werden unabhängig davon protokolliert.
stream_tcp_waitall
Steuert im erweiterten Modus, wie Daten von der Stream-Quelle gesammelt werden.
Auf schwächeren Geräten ist 1 der sinnvollere Ausgangspunkt. 0 eignet sich zum Testen auf ausreichend leistungsfähiger Hardware, wenn möglichst geringe zusätzliche Latenz wichtiger ist.
Empfohlene Startkonfiguration
Diese Werte sind ein konservativer Ausgangspunkt. Die optimale Delay-Zeit hängt von Reader, Netzwerk, Sender und den tatsächlichen ECM-Zeiten ab.
Nach dem Speichern sollten die Stream-Clients neu verbunden werden. Ein OSCam-Neustart ist die sicherste Methode, damit alle Verbindungen garantiert mit dem neuen Modus und einem leeren Zustand beginnen.
Abstimmung der Werte
Legacy-Betrieb
Wer das bisherige Verhalten beibehalten möchte, verwendet:
In diesem Modus sind stream_relay_delay_time, stream_relay_cw_timeout und stream_relay_resync_grace für den erweiterten Writer-Pfad nicht aktiv.
Hinweis für Updates von älteren Patch-Versionen
In v08 wurden zwei Optionsnamen geändert:
Für die alten Namen gibt es keine Compatibility Aliases. Vor dem Start mit v08 müssen vorhandene Einträge in oscam.conf deshalb auf die neuen Namen geändert werden.
Mit dem Patch streamrelay-delaybuffer_vxx.p1-xxx-tem_invictus.patch erhält StreamRelay einen optionalen, zeitgesteuerten Delay Buffer. Der bisherige direkte Verarbeitungsweg bleibt erhalten und ist weiterhin der Standard.
Der neue Verarbeitungsweg puffert die empfangenen TS-Daten pro Stream-Verbindung, wartet auf ein gültiges Control Word (CW), entschlüsselt die Daten in einem eigenen Writer Thread und sendet sie anschließend an den Client. Damit können verspätete oder kurzzeitig fehlende CWs besser abgefangen werden, ohne dass sich die Stream-Verzögerung bei jedem Problem dauerhaft vergrößert.
Danksagung: Dieser Patch basiert auf der von @BugSpencer vorgestellten Idee zum zeitverzögerten StreamRelay: Oscam StreamRelay Delay Mod
Basis und Voraussetzung
- Der Patch ist für den Quellstand OSCam r11965 erstellt.
- OSCam muss mit aktiviertem MODULE_STREAMRELAY neu kompiliert werden.
- Nach dem Austausch der Binary sollte OSCam neu gestartet werden.
Was der Patch ändert
- Ein neuer, dynamisch wachsender Ring Buffer hält TS-Daten für die konfigurierte Zeit zurück.
- Die Entschlüsselung und Ausgabe erfolgen im erweiterten Modus über einen separaten Writer Thread.
- Vor dem Start des Bufferings wird auf ein gültiges, nicht leeres CW für die aktive CAID und den aktiven ECM PID gewartet.
- Fehlgeschlagene ECM-Anfragen und Zero CWs können den Delay Buffer nicht starten oder auf eine falsche CAID/einen falschen ECM PID umschalten.
- Bei einem CW-Ausfall während des Streams wird nur für eine begrenzte Zeit gewartet. Danach werden nicht sicher entschlüsselbare Blöcke verworfen, bis ein passendes CW vorhanden ist.
- Die TS scrambling bits werden nur nach erfolgreicher Entschlüsselung entfernt.
- Der Buffer startet abhängig von stream_relay_delay_time mit ungefähr 2 MB + 2 MB je voller Sekunde Delay, wächst in 2 MB-Schritten und ist auf 20 MB pro Verbindung begrenzt.
- Automatische Backpressure pausiert das Lesen von der Stream-Quelle ab 75 % Buffer-Belegung und setzt es bei 50 % oder weniger wieder fort. Das hilft besonders auf schwächeren Geräten.
- Fehler beim Initialisieren, Schreiben, Starten des Writer Threads oder Senden führen zu einer sauberen Trennung der betroffenen Verbindung.
- Für Client-Sends gilt ein Timeout von fünf Sekunden; auch unvollständige Sends werden als Fehler behandelt.
- Beim Wechsel der Stream-Quelle werden Buffer-, Writer-, TS-, PAT/PMT/PID- und CW-Zustände vollständig zurückgesetzt.
- Locks und atomare Statuswerte schützen CWs, Verbindungen und Statistiken vor Race Conditions.
Wichtig: Der erweiterte Pfad ist standardmäßig ausgeschaltet. Ohne eine bewusste Aktivierung verhält sich StreamRelay weitgehend wie zuvor.
Konfiguration
Die Optionen befinden sich in oscam.conf im Abschnitt streamrelay. Im WebIf sind sie unter Configuration -> StreamRelay in den Bereichen Relay Timing Settings und Relay Runtime Settings zu finden.
stream_relay_delay_buffer
Schaltet den neuen Verarbeitungsweg ein oder aus.
- 0 = legacy/direct path, Standard
- 1 = extended delay-buffer path
Bei 0 wird wie bisher direkt entschlüsselt und gesendet. Bei 1 werden Writer Thread, CW startup gating, Resync und Backpressure verwendet.
stream_relay_delay_time
Bestimmt in Millisekunden, wie lange TS-Daten im erweiterten Delay Buffer verbleiben, bevor sie entschlüsselt und ausgegeben werden.
- Standard: 0
- Gültiger Bereich: 0-9999 ms
- Größere Werte geben dem CW mehr Zeit, erhöhen aber Umschaltzeit, Stream-Latenz und Speicherbedarf.
- Werte über 9999 werden automatisch auf 9999 begrenzt.
- Eine Änderung wird von einem laufenden Writer Thread übernommen; für reproduzierbare Tests empfiehlt sich trotzdem ein neuer Stream-Verbindungsaufbau.
stream_relay_cw_timeout
Maximale Wartezeit in Millisekunden auf ein verwendbares CW.
- Standard: 5000 ms
- Beim Start wird die Verbindung getrennt, wenn innerhalb dieses Zeitraums kein gültiges CW für den aktiven Stream verfügbar ist.
- Der Wert begrenzt außerdem die CW-Wartezeit des Writer Threads beim Start.
- 0 bedeutet keine Wartezeit und führt beim Start ohne bereits vorhandenes CW zur sofortigen Trennung. Für den normalen Betrieb ist daher ein Wert größer als 0 sinnvoll.
stream_relay_resync_grace
Wartezeit in Millisekunden bei einem CW-Ausfall oder veralteten CW während eines bereits laufenden Streams.
- Standard: 1000 ms
- 0 = immediate resync; der betroffene Block wird ohne zusätzliche Wartezeit verworfen.
- Nach Ablauf der Wartezeit werden nicht entschlüsselbare Blöcke verworfen, bis das passende CW wieder vorhanden ist.
- Der Wert darf stream_relay_cw_timeout nicht überschreiten. Ein höherer Wert wird beim Einlesen der Konfiguration automatisch entsprechend reduziert.
stream_relay_buffer_time
Dies ist die bereits vorhandene, einmalige Startverzögerung vor der Stream-Verarbeitung. Sie ist kein Ersatz für den neuen zeitgesteuerten Delay Buffer.
- Standard: 0 ms
- Funktioniert sowohl mit stream_relay_delay_buffer = 0 als auch mit stream_relay_delay_buffer = 1.
- Im WebIf können wieder bis zu fünf Stellen eingegeben werden.
- Der Wert bleibt unabhängig einstellbar und wird auch bei aktiviertem Extended Delay Buffer berücksichtigt.
stream_relay_log
Aktiviert zusätzliche ODD/EVEN-, CW-Timing- und Buffer-Statistiken im OSCam-Log.
- 0 = zusätzliche Dauerprotokollierung aus, Standard
- 1 = zusätzliche Protokollierung ein
Für die Einrichtung und Fehlersuche ist 1 hilfreich. Im Dauerbetrieb kann die Option wieder auf 0 gesetzt werden. Wichtige Zustands- und Fehlermeldungen werden unabhängig davon protokolliert.
stream_tcp_waitall
Steuert im erweiterten Modus, wie Daten von der Stream-Quelle gesammelt werden.
- 1 = MSG_WAITALL verwenden und größere Blöcke abwarten, Standard
- 0 = kleinere Datenmengen nach einem kurzen Poll verarbeiten; geringere Latenz, aber potentiell höhere CPU-Last
Auf schwächeren Geräten ist 1 der sinnvollere Ausgangspunkt. 0 eignet sich zum Testen auf ausreichend leistungsfähiger Hardware, wenn möglichst geringe zusätzliche Latenz wichtiger ist.
Empfohlene Startkonfiguration
Diese Werte sind ein konservativer Ausgangspunkt. Die optimale Delay-Zeit hängt von Reader, Netzwerk, Sender und den tatsächlichen ECM-Zeiten ab.
Code:
[streamrelay]
stream_relay_enabled = 1
stream_relay_delay_buffer = 1
stream_relay_buffer_time = 0
stream_relay_delay_time = 500
stream_relay_cw_timeout = 5000
stream_relay_resync_grace = 1000
stream_relay_log = 1
stream_tcp_waitall = 1
Nach dem Speichern sollten die Stream-Clients neu verbunden werden. Ein OSCam-Neustart ist die sicherste Methode, damit alle Verbindungen garantiert mit dem neuen Modus und einem leeren Zustand beginnen.
Abstimmung der Werte
- Mit stream_relay_delay_time = 500, stream_relay_cw_timeout = 5000 und stream_relay_resync_grace = 1000 beginnen.
- stream_relay_log = 1 während der Tests aktivieren.
- Treten Meldungen wie KeyOld, no Key oder wiederholte resync drop-Ereignisse auf, zuerst Reader- und ECM-Probleme prüfen. Bei normaler Reader-Funktion kann stream_relay_delay_time in Schritten von etwa 250-500 ms erhöht werden.
- Bei kurzen CW-Lücken kann stream_relay_resync_grace vorsichtig erhöht werden, jedoch nie über stream_relay_cw_timeout.
- Läuft der Stream stabil, kann stream_relay_delay_time schrittweise reduziert werden, bis ein guter Kompromiss aus Stabilität und Umschaltzeit erreicht ist.
- Erst danach bei Bedarf stream_tcp_waitall = 0 testen und dabei CPU-Last sowie Stabilität beobachten.
- Nach Abschluss der Tests stream_relay_log = 0 setzen, sofern die zusätzlichen Statistiken nicht dauerhaft benötigt werden.
Legacy-Betrieb
Wer das bisherige Verhalten beibehalten möchte, verwendet:
Code:
[streamrelay]
stream_relay_delay_buffer = 0
stream_relay_buffer_time = 0
In diesem Modus sind stream_relay_delay_time, stream_relay_cw_timeout und stream_relay_resync_grace für den erweiterten Writer-Pfad nicht aktiv.
Hinweis für Updates von älteren Patch-Versionen
In v08 wurden zwei Optionsnamen geändert:
Code:
stream_relay_delay_time_min -> stream_relay_delay_time
stream_relay_delay_time_max -> stream_relay_cw_timeout
Für die alten Namen gibt es keine Compatibility Aliases. Vor dem Start mit v08 müssen vorhandene Einträge in oscam.conf deshalb auf die neuen Namen geändert werden.
Anhänge
Sie müssen registriert sein, um die Liste der Anhänge zu sehen
Zuletzt bearbeitet:

