CSTV
CSTV ist die Zuschauer-Übertragung von CS2. Jeder Match-Server bringt seinen eigenen CSTV-Zugang mit. Zuschauer, Stream und Kommentatoren verbinden sich darüber, ohne einen Spielerplatz zu belegen.
Zugang
- Port: immer
CS2_TV_PORT_OFFSET(Standard 100) über dem Spielport, z. B. Spielport 27016 → CSTV 27116. Siehe Steam-LAN-Browser. - Passwort: erzeugt die App pro Match. Den fertigen Befehl
password …; connect …sehen Organisator und Zuschauer (Zuschauercode) auf der Match-Seite, nicht die Spieler. Siehe Rollen und Rechte. - Discord: Beim Match-Start enthält die Meldung den CSTV-Zugang, wenn CSTV an ist.
Verzögerung
CSTV überträgt mit Verzögerung, Standard 90 Sekunden (CS2_TV_DELAY, im Admin-Bereich unter Einstellungen → Gameserver → CSTV). Die Verzögerung schützt vor Ghosting: Wer neben einem Spieler sitzt, soll auf dem Stream nicht live sehen, wo die Gegner stehen.
Eine Änderung im Admin-Bereich schickt die App sofort an alle laufenden Server.
Woher früher tv_delay 0 kam
Bis November 2026 stand CSTV nach jedem Mapwechsel ohne Verzögerung da, obwohl 90 eingestellt waren. Die Ursache lag im Container-Image joedwards32/cs2:
- Das Image kennt die Umgebungsvariable
TV_DELAY(Standard0). - Bei jedem Containerstart schreibt sein Startskript diesen Wert in alle
gamemode_*.cfgim Ordnergame/csgo/cfg. - CS2 führt die Datei des Spielmodus bei jedem Laden einer Map aus und setzt
tv_delaydamit zurück.
Die Dateien liegen im gemeinsamen Spieldateien-Volume des Hosts. Jeder Container, der startet, schreibt sie für alle Server auf diesem Host neu.
Die App setzt die Verzögerung deshalb an zwei Stellen:
- Beim Containerstart gibt sie
TV_DELAYmit dem eingestellten Wert mit, bei Match- wie bei Messer-Servern. - Nach dem Laden jeder Map setzt sie
tv_delayper RCON. Das wirkt auch dann, wenn ein anderer Container die gemeinsamen Dateien inzwischen überschrieben hat.
Prüfen lässt sich der Wert per RCON mit tv_delay (Antwort z. B. tv_delay = 90).
Mapwechsel innerhalb einer Serie
Die Server laufen mit tv_delaymapchange 1: CS2 wechselt die Map erst, wenn CSTV das Ende der alten Map übertragen hat. Nach einem Map-Ende vergeht also mindestens die CSTV-Verzögerung, bis die nächste Map lädt, auch wenn SERIES_AUTO_ADVANCE_SECONDS kürzer ist. Der Ingame-Chat nennt diese Zeit, z. B.:
Nächste Map: Inferno, wird in etwa 90 s geladen (nach der CSTV-Übertragung) - bleibt auf dem Server
Ende der Serie
CSTV läuft im selben Container wie der Spielserver und endet mit ihm. Damit Zuschauer das Ende sehen, stoppt die App den Server am Ende einer Serie nicht sofort:
- Das Match wird wie gewohnt abgeschlossen (automatisch nach
SERIES_AUTO_ADVANCE_SECONDSoder von Hand). Auf der Webseite steht sofort „Abgeschlossen“. - Der Server läuft danach noch CSTV-Verzögerung + 15 Sekunden weiter, bei 90 s also 105 s. Im Ereignisprotokoll steht „Server läuft noch 105 s weiter, damit CSTV das Ende überträgt“.
- Im Ingame-Chat steht:
Der Server bleibt noch etwa 2 Minuten für die CSTV-Übertragung online und schaltet sich dann ab. - Der automatische Aufräum-Lauf wartet in dieser Zeit ebenfalls.
- Ein abgebrochenes Match stoppt seinen Server sofort.
Ohne CSTV oder mit Verzögerung 0 stoppt der Server wie früher direkt nach dem Abschließen.
Trennung mit NETWORK_DISCONNECT_BADDELTATICK
Seit einem CS2-Update vom November 2024 prüft der Server die Reihenfolge der Bestätigungen von Spielern und CSTV streng (sv_deltaticks_enforce 2). Kommen sie außer der Reihe, trennt er die Verbindung mit „Clientseitige Delta-Ticks fehlerhaft“ bzw. NETWORK_DISCONNECT_BADDELTATICK, oft direkt nach einem Runden-Neustart.
Die App setzt deshalb sv_deltaticks_enforce 0: als Startparameter jedes Containers, beim Einrichten jeder Map und auf den Messer-Servern. Die Prüfung soll Manipulationen am Netzwerkverkehr erschweren. Im LAN ist das Abschalten ein vertretbares Risiko.
Messer-Server
Auf den Messer-Servern bleibt CSTV technisch an, weil das Image es beim Start einschaltet. Die App gibt ihnen dieselbe Verzögerung mit, damit sie beim Start die gemeinsamen Spielmodus-Dateien nicht auf 0 zurücksetzen.