Dokumentation / Fehlerbehebung / Das Gerät spielt nur eine oder einige Kampagnen ab

Das Gerät spielt nur eine oder einige Kampagnen ab

Einführung und Überblick

Der Bildschirm spielt nur eine oder wenige Kampagnen ab, obwohl in den Gerätedetails unter Veröffentlichte Kampagnen mehr angezeigt werden. Ein Neustart hat nicht geholfen. Dieser Leitfaden führt Sie durch die Einstellungsprüfung, den Vergleich der Wiedergabelisten und die Suche nach Medien, die eine Inhaltsaktualisierung blockieren können.

Wiedergabeliste bezeichnet die Liste der Kampagnen und ihrer Wiedergaberegeln. Kann der Player eine für die neue Wiedergabeliste benötigte Mediendatei nicht vorbereiten, verwendet er möglicherweise weiter die vorherige Liste. Weitere mögliche Ursachen sind Zeitplanung, Kampagnenzuordnung, Verbindung und verfügbarer Speicher.

Prüfungen und Fehlerbehebung

Diagnostizieren Sie das Problem vor Änderungen. Die Schritte 1–6 prüfen nur den aktuellen Zustand. Schritt 7 ändert die Kampagne im Portal; Schritt 8 unterbricht kurz die Wiedergabe und ändert eine Datei. Löschen Sie Wiedergabelisten, Medien oder die Datenbank nicht pauschal.

Diagnose- und Reparaturablauf

  1. Prüfen Sie die Kampagnen im Portal.

    Öffnen Sie die Details des betroffenen Geräts und die Registerkarte Veröffentlichte Kampagnen. Prüfen Sie bei fehlenden Kampagnen, ob sie diesem Gerät zugeordnet und aktiv sind und ob Beginn, Ende sowie Wiedergabebedingungen einschließlich Tagen und Uhrzeiten passen. Vergleichen Sie dies in Schritt 3 mit der tatsächlichen Gerätezeit.

    Eine Kampagne ist nicht unbedingt fehlerhaft, wenn sie für diesen Zeitpunkt nicht geplant ist. Sollte sie laufen und ein Neustart hat nicht geholfen, fahren Sie fort. Beachten Sie auch die Anleitungen zu Kampagnen und Geräte.

  2. Öffnen Sie die Remote-Konsole.

    Das Gerät muss online sein und mit dem Server kommunizieren. Die Remote-Konsole erfordert die Rolle Serveradministrator oder höher. Öffnen Sie sie wie in der Anleitung Remote-Konsole beschrieben. Fügen Sie den Befehl in das Eingabefeld ein und senden Sie ihn mit ✓ ab. Fügen Sie jeden mehrzeiligen Block vollständig ein, einschließlich der letzten Zeile PY.

    Eine Fernvorschau des Bildschirms gewährt keinen Konsolenzugriff. Ist das Gerät offline, folgen Sie zunächst der Anleitung Geräteverbindung prüfen. Wenn Ihre Rolle keinen Zugriff erlaubt, bitten Sie einen berechtigten Administrator, diese Schritte auszuführen. Siehe Benutzer und Berechtigungen.

    Die folgenden Befehle gelten für Linux-basierte Player mit dem Dienst device-runtime.service und dem Arbeitsverzeichnis /storage. Die Python-Blöcke benötigen Python 3, der URL-Test benötigt curl. Meldet die Konsole einen nicht vorhandenen Befehl, Dienst oder Pfad, nehmen Sie keine Dateiänderungen vor. Wenden Sie sich an den Support.
  3. Prüfen Sie Uhrzeit, Speicherplatz und Player-Dienst.

    Befehl zum Kopieren:

    date
    df -h / /storage
    systemctl is-active device-runtime.service
    ls -lh --time-style=long-iso /storage/playlist /storage/playlist_new
    
    AnzeigeBedeutung und nächster Schritt
    Datum und UhrzeitVergleichen Sie sie mit der aktuellen Ortszeit und Zeitzone. Eine falsche Uhrzeit kann Kampagnenauswahl und Verbindung beeinträchtigen.
    Freier Speicher in der Spalte AvailIst der Speicher voll, folgen Sie der Anleitung Nicht genügend Speicherplatz. Prüfen Sie auch die unter /storage eingehängte Partition.
    activeDer Dienst läuft. Das bestätigt noch keine korrekte Wiedergabe oder erfolgreiche Aktualisierung.
    inactive, failed oder fehlende DateienPrüfen Sie die Protokolle in Schritt 5. Nutzen Sie die vorübergehende Reparatur erst, nachdem Sie Installation und Ursache geprüft haben.

    /storage/playlist enthält die aktuell vom Player übernommene Wiedergabeliste. /storage/playlist_new enthält die neu empfangene Wiedergabeliste, deren Medien der Player vor der Aktivierung vorbereitet. Ein neuerer Zeitstempel oder eine andere Größe ist ein nützlicher Hinweis, belegt allein aber noch keinen Fehler. Während eines normalen Downloads können die Dateien vorübergehend voneinander abweichen.

  4. Vergleichen Sie die Kampagnen beider Wiedergabelisten.

    Der folgende Block liest beide Dateien und zeigt die numerische Geräte-ID, Kampagnenanzahl, Kampagnen-IDs, Namen und Gültigkeitsdaten. Er ändert nichts. Notieren Sie die numerische Geräte-ID: Der Konsolenkopf kann eine andere Kennung anzeigen, die später nicht im Feld DEVICE_ID verwendet werden darf.

    Befehl zum Kopieren:

    python3 - <<'PY'
    import json
    for path in ['/storage/playlist', '/storage/playlist_new']:
        print('\nDATEI:', path)
        try:
            with open(path) as f:
                data = json.load(f)
            print('Gerät:', data.get('deviceId'))
            campaigns = data.get('campaigns', [])
            print('Kampagnenanzahl:', len(campaigns))
            for c in campaigns:
                print(c.get('campaignId'), c.get('nameCampaign'),
                      'von:', c.get('start'), 'bis:', c.get('end'))
        except Exception as e:
            print('FEHLER:', e)
    PY
    

    Enthält die neue Liste die erwarteten Kampagnen, die aktuelle aber nur eine ältere Auswahl, suchen Sie im nächsten Schritt nach einem Vorbereitungsfehler. Fehlen die Kampagnen auch in der neuen Datei, prüfen Sie Einstellungen und Übermittlung der Portalaktualisierungen. Ein JSON-Parsefehler kann auf eine unvollständige oder beschädigte Datei hinweisen; überschreiben Sie sie nicht ohne weitere Prüfung manuell.

  5. Suchen Sie den Downloadfehler und prüfen Sie die Serverantwort.

    Zeigen Sie die letzten 120 Protokolleinträge des Dienstes aus den vergangenen 20 Minuten an. Suchen Sie nach wiederkehrenden Fehlern, Medien-URL und ID. Sehen Sie nur das Ende eines Fehlers, erhöhen Sie -n 120 oder erweitern Sie den Zeitraum.

    Befehl zum Kopieren:

    sudo journalctl -u device-runtime.service --since "20 minutes ago" --no-pager -n 120 -o cat
    

    Beispielausgabe – nicht in die Konsole einfügen. Beispiel eines mit diesem Verfahren behobenen Fehlers:

    https://files.screensoft.org/api/video/H265/1790935600695
    java.lang.IllegalStateException: Received 0 bytes ... /storage/video/1790935600695.mp4

    Received 0 bytes bedeutet, dass der Player keinen verwendbaren Dateiinhalt empfangen hat. Die Meldung allein erklärt nicht die Ursache. In diesem Beispiel lautet die Medien-ID 1790935600695. Notieren Sie für Ihren Fall ID und exakte URL aus Ihren Protokollen.

    Fügen Sie die exakte Adresse aus Ihren Protokollen in das hervorgehobene Feld ein. Sie wird automatisch in den Befehl übernommen. Lassen Sie die Anführungszeichen stehen. Der Test verwirft heruntergeladene Daten und ändert weder Medien noch Wiedergabelisten. Übernehmen Sie die Beispieladresse nicht ungeprüft für ein anderes Gerät.

    Fügen Sie die exakte Adresse mit https:// oder http:// am Anfang ein. Fügen Sie nicht die gesamte Fehlermeldung oder einen Pfad wie /storage/video/… ein.

    Die URL fehlt. Das Kopieren des Befehls ist noch deaktiviert.

    2. Adresse im Befehl prüfen und den gesamten Block kopieren. Die Adresse wird automatisch eingefügt.

    Befehl zum Bearbeiten und Kopieren:

    curl -sS -L --connect-timeout 10 --max-time 30 \
      --range 0-1023 --max-filesize 1048576 \
      -D - -o /dev/null \
      -w '\nHTTP: %{http_code}\nHeruntergeladen: %{size_download} Bytes\n' \
      'PASTE_MEDIA_URL_HERE'
    
    AnzeigeBedeutung und nächster Schritt
    HTTP 404Der Server stellt das Medium unter der angeforderten Adresse nicht bereit. Ermitteln Sie die zugehörige Kampagne in Schritt 6 und korrigieren Sie sie in Schritt 7.
    HTTP 401 / 403Der Server hat den Zugriff verweigert. Prüfen Sie Berechtigungen und Dienstkonfiguration gemeinsam mit dem Support.
    HTTP 5xxServerfehler. Untersuchen Sie den Dateidienst. Das Löschen der Wiedergabeliste behebt keinen Serverfehler.
    DNS-, Verbindungs-, Zeitüberschreitungs- oder TLS-FehlerGehen Sie dem konkreten Fehler nach: Prüfen Sie Netzwerk, Namensauflösung, Serververfügbarkeit, Uhrzeit oder Zertifikat. Deaktivieren Sie die Zertifikatsprüfung nicht.
    HTTP 200 / 206 und nicht leere DatenDer Test hat Daten empfangen. Dies bestätigt nicht, dass das gesamte Video vollständig oder abspielbar ist. Prüfen Sie die Protokolle auf weitere Fehler.
    Größenlimit von curlDer Server hat die Anforderung der ersten 1.024 Bytes möglicherweise ignoriert. Der Test ist auf 1 MiB und 30 Sekunden begrenzt. Das Erreichen eines Limits bedeutet allein nicht, dass das Medium fehlerhaft ist.
  6. Ermitteln Sie die Kampagne anhand der Medien-ID.

    Geben Sie zuerst die Medien-ID ein. Der rote Wert 000 ist nur ein Platzhalter. Der Block sucht nach dem exakten Wert des Feldes resourceId, einschließlich alternativer Motive, und listet passende Kampagnen auf. Notieren Sie Namen und IDs. Ein unveränderter Block mit dem Wert 000 wird sicher beendet, ohne etwas zu ändern.

    Verwenden Sie die Zahl nach dem letzten Schrägstrich der Medien-URL aus Schritt 5. Dies ist weder die Kampagnen-ID noch die Geräte-ID. Geben Sie sie ohne die Erweiterung .mp4 ein.

    Die ID fehlt. Kopieren Sie den Befehl noch nicht.

    2. Rot hervorgehobene Zeile prüfen und den gesamten Befehl kopieren. Sobald Sie eine gültige ID eingeben, wird sie automatisch in den Befehl eingesetzt und die Schaltfläche „Kopieren“ aktiviert.

    Befehl zum Bearbeiten und Kopieren:

    python3 - <<'PY'
    import json
    RESOURCE_ID = 000  # HIER IHRE MEDIEN-ID EINTRAGEN
    if RESOURCE_ID <= 0:
        raise SystemExit('Tragen Sie zuerst die Medien-ID in RESOURCE_ID ein.')
    with open('/storage/playlist_new') as f:
        data = json.load(f)
    def contains_resource(value):
        if isinstance(value, dict):
            return value.get('resourceId') == RESOURCE_ID or any(
                contains_resource(v) for v in value.values())
        if isinstance(value, list):
            return any(contains_resource(v) for v in value)
        return False
    found = False
    for c in data.get('campaigns', []):
        if contains_resource(c):
            found = True
            print('Kampagne:', c.get('nameCampaign'))
            print('Kampagnen-ID:', c.get('campaignId'))
            print('Primäres Motiv:', c.get('primary'))
            print('Alternative Motive:', c.get('alternative'))
    if not found:
        print('Medium nicht in der neuen Wiedergabeliste gefunden. Prüfen Sie die neuesten Protokolle und die ID.')
    PY
    

    Wird kein Medium gefunden, hat sich die Datei möglicherweise inzwischen geändert. Prüfen Sie erneut die neuesten Protokolle und die neue Wiedergabeliste. Nutzen mehrere Kampagnen dieses Medium, reicht die Korrektur einer einzigen möglicherweise nicht aus. Prüfen Sie alle Treffer.

  7. Korrigieren Sie die Kampagne im Portal.

    Öffnen Sie die anhand von Name und ID ermittelte Kampagne. Ersetzen Sie das nicht verfügbare Medium durch eine neu hochgeladene Datei oder pausieren Sie die Kampagne vorübergehend und speichern Sie die Änderung. Siehe die Anleitungen zu Medien und Kampagnen.

    Warten Sie, bis die aktualisierte Wiedergabeliste eingetroffen ist und ihre Medien heruntergeladen sind. Die Dauer hängt von Verbindung und Dateigröße ab. Wiederholen Sie die Prüfungen aus Schritt 3 und 4. Nach dem Pausieren der Kampagne oder Ersetzen des Mediums darf die neue Liste nicht mehr auf die fehlerhafte Datei verweisen.

    Ist die Datei unverändert und enthält noch den ursprünglichen Verweis, ist die aktualisierte Liste noch nicht eingetroffen. Prüfen Sie den Onlinestatus und ob die Portaländerung gespeichert wurde. Ein Neustart allein kann keine Datei wiederherstellen, für die der Server weiterhin HTTP 404 liefert. Müssen Sie die übrigen Anzeigen vorübergehend wiederherstellen, fahren Sie mit Schritt 8 fort. Andernfalls prüfen Sie das Ergebnis in Schritt 9.

  8. Vorübergehende lokale Reparatur mit Sicherung.

    Wartungsverfahren – unterbricht kurz die Wiedergabe. Nutzen Sie dies erst nach Bestätigung des konkreten nicht verfügbaren Mediums und seiner Kampagne. Das Skript entfernt eine gesamte Kampagne aus der neuen Liste, nicht nur ihr Video. Führen Sie es auf dem richtigen Gerät zu einem Zeitpunkt aus, zu dem eine kurze Unterbrechung akzeptabel ist.

    Das Skript prüft alle IDs, stoppt ausschließlich device-runtime.service, sichert beide Dateien unter /storage/playlist-backup-DATUM-CAS, entfernt die angegebene Kampagne aus playlist_new und startet den Dienst wieder. Es überschreibt nicht direkt die aktuelle Wiedergabeliste und löscht keine Medien. Vor dem Schreiben wird eine Sicherung erstellt. Scheitert die Änderung, versucht das Skript, die ursprüngliche neue Liste wiederherzustellen. Bei einem Fehler innerhalb dieses Blocks versucht es auch, den Dienst neu zu starten, sofern es zu Ende laufen kann. Ein Stromausfall oder erzwungener Abbruch lässt sich so nicht abfangen.

    Füllen Sie vor der Ausführung alle drei folgenden Felder aus:

    • DEVICE_ID: numerische Geräte-ID aus Schritt 4.
    • CAMPAIGN_ID: Kampagnen-ID aus Schritt 6.
    • RESOURCE_ID: ID des nicht verfügbaren Mediums aus den Protokollen.

    Verwenden Sie die Beispiel-IDs nur, wenn es exakt um diesen Fall geht. Die roten Werte 000 dienen als Schutz: Das Kopieren bleibt deaktiviert, bis alle IDs eingetragen sind; das unveränderte Skript nimmt keine Änderungen vor. Mindestens eine weitere Kampagne muss auf dem Gerät verbleiben.

    1. Vor dem Kopieren alle drei IDs eingeben

    Jede Zahl bezeichnet ein anderes Objekt. Prüfen Sie sie anhand der Schritte 4 und 6. Übernehmen Sie die Beispielwerte nicht ungeprüft.

    Aus Schritt 4; nicht die Kennung im Konsolenkopf.

    Aus Schritt 6; dies ist nicht die Medien-ID.

    Dieselbe Medien-ID, die Sie in Schritt 6 geprüft haben.

    Geben Sie alle drei IDs ein. Das Kopieren des Befehls ist noch deaktiviert.

    2. Drei rot hervorgehobene Werte prüfen und den gesamten Block kopieren. Die Ausführung unterbricht kurz die Wiedergabe. Das Skript prüft außerdem, ob Geräte-, Kampagnen- und Medien-ID zum Inhalt der Wiedergabeliste passen.

    Befehl zum Bearbeiten und Kopieren:

    sudo python3 - <<'PY'
    import json
    import shutil
    import subprocess
    from datetime import datetime
    from pathlib import Path
    
    DEVICE_ID = 000
    CAMPAIGN_ID = 000
    RESOURCE_ID = 000
    
    if min(DEVICE_ID, CAMPAIGN_ID, RESOURCE_ID) <= 0:
        raise SystemExit('Tragen Sie zuerst alle drei IDs ein. Es wurde nichts geändert.')
    
    root = Path('/storage')
    path = root / 'playlist_new'
    service = 'device-runtime.service'
    
    def contains_resource(value):
        if isinstance(value, dict):
            return value.get('resourceId') == RESOURCE_ID or any(
                contains_resource(v) for v in value.values())
        if isinstance(value, list):
            return any(contains_resource(v) for v in value)
        return False
    
    def prepare():
        data = json.loads(path.read_text())
        if data.get('deviceId') != DEVICE_ID:
            raise RuntimeError('Geräte-ID stimmt nicht überein.')
        matches = [c for c in data.get('campaigns', [])
                   if c.get('campaignId') == CAMPAIGN_ID]
        if len(matches) != 1 or not contains_resource(matches[0]):
            raise RuntimeError('Kampagne oder Medium passt nicht zu den angegebenen IDs.')
        data['campaigns'] = [c for c in data['campaigns']
                             if c.get('campaignId') != CAMPAIGN_ID]
        if not data['campaigns']:
            raise RuntimeError('Nach dem Ausschluss würde keine Kampagne verbleiben.')
        return data
    
    prepare()
    backup = root / ('playlist-backup-' + datetime.now().strftime('%Y%m%d-%H%M%S-%f'))
    backup.mkdir()
    subprocess.run(['systemctl', 'stop', service], check=True)
    saved = False
    try:
        for name in ('playlist', 'playlist_new'):
            shutil.copy2(root / name, backup / name)
        saved = True
        data = prepare()
        path.write_text(json.dumps(data, ensure_ascii=False))
        print('Sicherung:', backup)
        print('Beibehaltene Kampagnen:', len(data['campaigns']))
    except Exception:
        if saved:
            shutil.copy2(backup / 'playlist_new', path)
        raise
    finally:
        subprocess.run(['systemctl', 'start', service], check=True)
    PY
    

    Eine erfolgreiche Ausgabe enthält den Sicherungspfad und die Anzahl beibehaltener Kampagnen. Bewahren Sie den Pfad für den Support auf. Meldet das Skript nicht passende IDs, entfernen Sie die Prüfungen nicht, sondern kehren Sie zu Schritt 4 oder 6 zurück. Scheitern Schreiben, Wiederherstellung oder Dienststart, senden Sie die vollständige Ausgabe an den Support. Ersetzen Sie die aktuelle Wiedergabeliste nicht manuell durch die neue.

    Diese vorübergehende Reparatur betrifft nur dieses Gerät. Sie ändert keine Servereinstellungen. Eine spätere Aktualisierung kann die fehlerhafte Kampagne erneut übertragen. Führen Sie daher auch die Portalkorrektur aus Schritt 7 durch. Eine weitere fehlende Mediendatei kann die Aktivierung weiterhin blockieren.
  9. Prüfen Sie Listenaktivierung und tatsächliche Wiedergabe.

    Prüfen Sie nach etwa einer Minute Dienst und Protokolle. Planen Sie bei großen Downloads mehr Zeit ein. Dieser Block nimmt keine Änderungen vor.

    Befehl zum Kopieren:

    systemctl is-active device-runtime.service
    ls -lh --time-style=long-iso /storage/playlist /storage/playlist_new
    sudo journalctl -u device-runtime.service --since "2 minutes ago" --no-pager -o cat | tail -50
    

    Listen Sie die Kampagnen mit dem Befehl aus Schritt 4 erneut auf. Die aktuelle Liste sollte die erwartete neue Auswahl enthalten, der Dienst aktiv sein und die aktuellen Protokolle denselben Downloadfehler nicht mehr wiederholen. Übereinstimmende Dateigrößen allein reichen als Nachweis nicht aus.

    Beobachten Sie abschließend den physischen Bildschirm oder seine Fernvorschau mindestens einen vollständigen Werbezyklus lang. Prüfen Sie, ob alle unter den aktuellen Bedingungen fälligen Kampagnen erscheinen. Passen Sie die Beobachtungsdauer bei zeitgesteuerten Kampagnen oder Wiedergabeintervallen entsprechend an.

  10. Wenn das Problem bestehen bleibt.

    • Eine andere Medien-ID erscheint: Wiederholen Sie Schritt 5 und 6 für die neue Datei. Die vorherige Blockade hat möglicherweise eine weitere verdeckt.
    • Die neue Wiedergabeliste ist nicht eingetroffen: Prüfen Sie Onlinestatus, Zielgerät und gespeicherte Kampagnenänderung. Eine lokale Änderung belegt nicht, dass Serveraktualisierungen korrekt ankommen.
    • Die Liste ist aktiv, aber eine Anzeige fehlt weiterhin: Prüfen Sie Zeitplanbedingungen und weitere Wiedergabefehler. Dieses Verfahren behebt nicht automatisch jeden Video- oder Planungsfehler.
    • Der Dienst läuft nicht: Prüfen Sie seinen Status mit dem folgenden Befehl und senden Sie das Ergebnis an den Support.

    Befehl zum Kopieren:

    sudo systemctl status device-runtime.service --no-pager

    Senden Sie Ihrem Softwareanbieter Geräte-ID, lokale Problemzeit einschließlich Zeitzone, erwartete Kampagnennamen, beide Kampagnenlisten, den betreffenden Protokollfehler und das URL-Testergebnis. Haben Sie die lokale Reparatur durchgeführt, fügen Sie deren Ausgabe und Sicherungspfad bei. Senden Sie keine Passwörter oder Zugangsdaten.

Haben Sie die gesuchte Information nicht gefunden?
Wenden Sie sich an Ihren Softwareanbieter.