Dokumentacija / Rješavanje problema / Uređaj prikazuje samo jednu ili neke kampanje

Uređaj prikazuje samo jednu ili neke kampanje

Uvod i orijentacija

Na ekranu se prikazuje samo jedna ili nekoliko kampanja, iako u detaljima uređaja na kartici Objavljene kampanje vidite i druge. Ni ponovno pokretanje nije pomoglo. Ovaj vodič objašnjava kako provjeriti postavke, uporediti liste za reprodukciju i pronaći medij koji možda blokira ažuriranje sadržaja.

Lista za reprodukciju sadrži kampanje i pravila njihovog prikazivanja. Ako uređaj ne uspije pripremiti neku medijsku datoteku za novu listu, može nastaviti koristiti prethodnu. Ipak, postoje i drugi mogući uzroci: raspored, dodjela kampanja, veza ili slobodan prostor.

Provjera i rješavanje problema

Prvo utvrdite uzrok, zatim otklonite problem. Koraci 1–6 samo provjeravaju stanje. Korak 7 mijenja kampanju na portalu, a korak 8 privremeno zaustavlja reprodukciju i mijenja jednu datoteku. Nemojte odjednom brisati liste za reprodukciju, medije ili bazu podataka.

Postupak dijagnostike i popravke

  1. Provjerite kampanje na portalu.

    Otvorite detalje uređaja na kojem se javlja problem i karticu Objavljene kampanje. Za kampanje koje se ne prikazuju provjerite jesu li dodijeljene tom uređaju i aktivne te imaju li odgovarajući datum početka i završetka i uslove reprodukcije, uključujući dane i vrijeme. Uporedite ih sa stvarnim vremenom na uređaju u koraku 3.

    Ako kampanja prema rasporedu trenutno ne treba biti prikazana, to samo po sebi nije kvar. Ako bi se trebala prikazivati, a ponovno pokretanje nije pomoglo, nastavite. Pogledajte i vodiče Kampanje i Uređaji.

  2. Otvorite udaljenu konzolu.

    Uređaj mora biti online i komunicirati sa serverom. Udaljena konzola zahtijeva ovlaštenja Server Administrator ili viša. Otvorite je prema vodiču Udaljena konzola. Zalijepite naredbu u polje za unos i pošaljite je dugmetom ✓. Višeredni blok zalijepite u cijelosti, uključujući posljednji red PY.

    Sam udaljeni pregled ekrana ne omogućava pristup konzoli. Ako uređaj nije na mreži, prvo slijedite vodič Provjera veze uređaja. Nemate potrebnu ulogu? Proslijedite postupak ovlaštenom administratoru; pregled je u odjeljku Korisnici i ovlaštenja.

    Naredbe u nastavku namijenjene su Linux uređajima sa plejerom, servisom device-runtime.service i radnim direktorijem /storage. Python blokovi zahtijevaju Python 3, a test URL-a zahtijeva curl. Ako konzola prijavi da naredba, servis ili putanja ne postoji, nemojte mijenjati datoteke. Obratite se podršci.
  3. Provjerite vrijeme, prostor na disku i servis za reprodukciju.

    Naredba za kopiranje:

    date
    df -h / /storage
    systemctl is-active device-runtime.service
    ls -lh --time-style=long-iso /storage/playlist /storage/playlist_new
    
    Šta viditeŠta to znači i kako nastaviti
    Datum i vrijemeUporedite ih s trenutnim lokalnim vremenom i vremenskom zonom. Netačno vrijeme može utjecati na odabir kampanja i povezivanje.
    Slobodan prostor u koloni AvailAko je prostor popunjen, slijedite vodič Nedovoljno prostora na disku. Provjerite i particiju montiranu na /storage.
    activeServis je pokrenut. To još ne potvrđuje ispravnu reprodukciju ni uspješno ažuriranje.
    inactive, failed ili datoteke koje nedostajuNastavite provjerom zapisa u koraku 5. Nemojte primjenjivati privremenu popravku dok ne provjerite instalaciju i uzrok.

    /storage/playlist sadrži trenutno prihvaćenu listu za reprodukciju. /storage/playlist_new sadrži novoprimljenu listu čije medije uređaj priprema prije aktivacije. Novija vremenska oznaka i druga veličina datoteke važan su trag, ali sami po sebi nisu dokaz kvara. Tokom uobičajenog preuzimanja datoteke se mogu privremeno razlikovati.

  4. Uporedite kampanje na obje liste za reprodukciju.

    Sljedeći blok čita obje datoteke i ispisuje brojčani ID uređaja, broj kampanja, njihove ID-jeve, nazive i period važenja. Ništa ne mijenja. Zabilježite brojčani ID uređaja: u zaglavlju konzole može biti drugi identifikator koji kasnije ne smijete unijeti u polje DEVICE_ID.

    Naredba za kopiranje:

    python3 - <<'PY'
    import json
    for path in ['/storage/playlist', '/storage/playlist_new']:
        print('\nDATOTEKA:', path)
        try:
            with open(path) as f:
                data = json.load(f)
            print('Uređaj:', data.get('deviceId'))
            campaigns = data.get('campaigns', [])
            print('Broj kampanja:', len(campaigns))
            for c in campaigns:
                print(c.get('campaignId'), c.get('nameCampaign'),
                      'od:', c.get('start'), 'do:', c.get('end'))
        except Exception as e:
            print('GREŠKA:', e)
    PY
    

    Ako nova lista sadrži očekivane kampanje, a trenutna samo stariji izbor, u sljedećem koraku potražite grešku pri pripremi medija. Ako kampanje nedostaju i u novoj datoteci, provjerite postavke i dostavu promjena s portala. Greška pri čitanju JSON-a može ukazivati na nepotpunu ili oštećenu datoteku; nemojte je ručno prepisivati bez dodatne provjere.

  5. Pronađite grešku preuzimanja i provjerite odgovor servera.

    Prikažite posljednjih 120 zapisa servisa iz proteklih 20 minuta. Potražite greške koje se ponavljaju, URL medija i njegov ID. Ako vidite samo kraj greške, povećajte vrijednost -n 120 ili proširite vremenski raspon.

    Naredba za kopiranje:

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

    Primjer ispisa – nemojte ga lijepiti u konzolu. Primjer greške koju smo ovim postupkom uspješno riješili:

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

    Received 0 bytes znači da uređaj nije primio upotrebljiv sadržaj datoteke. Sama poruka još ne otkriva uzrok. U ovom primjeru ID medija je 1790935600695; za svoj slučaj zabilježite ID i tačan URL iz vlastitih zapisa.

    U istaknuto polje ispod zalijepite tačnu adresu iz zapisa; automatski će se umetnuti u naredbu. Ostavite navodnike. Test odbacuje preuzete podatke i ne mijenja medije ni liste za reprodukciju. Nemojte automatski koristiti adresu iz primjera za drugi uređaj.

    Unesite tačnu adresu koja počinje s https:// ili http://. Nemojte kopirati cijelu poruku greške ni putanju /storage/video/…

    URL nije unesen. Kopiranje naredbe zasad je onemogućeno.

    2. Provjerite adresu u naredbi pa kopirajte cijeli blok. Adresa se umeće automatski.

    Naredba za prilagođavanje i kopiranje:

    curl -sS -L --connect-timeout 10 --max-time 30 \
      --range 0-1023 --max-filesize 1048576 \
      -D - -o /dev/null \
      -w '\nHTTP: %{http_code}\nPreuzeto: %{size_download} bajtova\n' \
      'OVDJE_UNESITE_URL_MEDIJA'
    
    Šta viditeŠta to znači i kako nastaviti
    HTTP 404Server ne pruža medij na traženoj adresi. Pronađite njegovu kampanju u koraku 6 i ispravite je u koraku 7.
    HTTP 401 / 403Server je odbio pristup. S podrškom provjerite ovlaštenja i konfiguraciju servisa.
    HTTP 5xxGreška servera. Provjerite servis koji pruža datoteke; brisanje liste za reprodukciju neće popraviti server.
    Greška DNS-a, veze, isteka vremena ili TLS-aPostupite prema konkretnoj grešci: provjerite mrežu, razrješavanje naziva, dostupnost servera, vrijeme ili certifikat. Nemojte isključivati provjeru certifikata.
    HTTP 200 / 206 i primljeni podaciTest je primio podatke. To ne potvrđuje da je cijeli video potpun ili da se može reproducirati; provjerite ima li drugih grešaka u zapisima.
    Ograničenje veličine u curluServer je možda zanemario zahtjev za prvih 1 024 bajta. Test je ograničen na 1 MiB i 30 sekundi; dostizanje ograničenja samo po sebi ne znači da je medij neispravan.
  6. Pronađite kampanju prema ID-ju medija.

    Prvo unesite ID medija. Crveno označena vrijednost 000 samo je zamjenska vrijednost. Blok traži tačnu vrijednost polja resourceId, uključujući alternativne vizuale, i ispisuje odgovarajuće kampanje. Zabilježite njihove nazive i ID-jeve. Neizmijenjeni blok s vrijednošću 000 sigurno se prekida i ništa ne mijenja.

    Upotrijebite broj nakon posljednje kose crte u URL-u medija iz koraka 5. To nije ID kampanje ni uređaja. Unesite ga bez nastavka .mp4.

    ID nije unesen. Nemojte još kopirati naredbu.

    2. Provjerite crveno istaknuti red pa kopirajte cijelu naredbu. Nakon unosa ispravnog ID-ja vrijednost se automatski umeće u naredbu i omogućava se dugme Kopiraj.

    Naredba za prilagođavanje i kopiranje:

    python3 - <<'PY'
    import json
    RESOURCE_ID = 000  # OVDJE MORA BITI VAŠ ID MEDIJA
    if RESOURCE_ID <= 0:
        raise SystemExit('Prvo unesite ID medija u RESOURCE_ID.')
    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('Kampanja:', c.get('nameCampaign'))
            print('ID kampanje:', c.get('campaignId'))
            print('Glavni vizual:', c.get('primary'))
            print('Alternativni vizuali:', c.get('alternative'))
    if not found:
        print('Medij nije pronađen na novoj listi. Provjerite najnovije zapise i ID.')
    PY
    

    Ako medij nije pronađen, datoteka se možda u međuvremenu promijenila. Ponovo provjerite najnovije zapise i novu listu za reprodukciju. Ako medij koristi više kampanja, ispravka samo jedne možda neće biti dovoljna; provjerite sve rezultate.

  7. Ispravite kampanju na portalu.

    Otvorite pronađenu kampanju prema nazivu i ID-ju. Nedostupni medij zamijenite novom učitanom datotekom ili privremeno pauzirajte kampanju i sačuvajte promjenu. Pogledajte vodiče Mediji i Kampanje.

    Sačekajte dostavu ažurirane liste za reprodukciju i preuzimanje njenih medija. Potrebno vrijeme zavisi od veze i veličine datoteka. Ponovite provjere iz koraka 3 i 4: nova lista više ne smije upućivati na neispravnu datoteku ako ste pauzirali kampanju ili zamijenili medij.

    Ako je datoteka ostala ista i još sadrži izvornu referencu, ažurirana lista još nije stigla. Provjerite je li uređaj na mreži i je li promjena sačuvana na portalu. Samo ponovno pokretanje ne može obnoviti datoteku za koju server i dalje vraća HTTP 404. Ako trebate privremeno vratiti ostale oglase, nastavite na korak 8; inače provjerite rezultat u koraku 9.

  8. Privremena lokalna popravka sa sigurnosnom kopijom.

    Servisni zahvat – nakratko prekida reprodukciju. Primijenite ga tek nakon potvrde konkretnog nedostupnog medija i njegove kampanje. Skripta uklanja cijelu jednu kampanju s nove liste, a ne samo njen video. Pokrenite je na pravom uređaju i u vrijeme kada je prihvatljiv kratak prekid prikazivanja.

    Skripta provjerava sve ID-jeve, zaustavlja samo device-runtime.service, izrađuje sigurnosnu kopiju obje datoteke u direktoriju /storage/playlist-backup-DATUM-CAS, uklanja navedenu kampanju iz playlist_new i ponovo pokreće servis. Ne prepisuje direktno trenutnu listu i ne briše medije. Sigurnosna kopija nastaje prije zapisivanja; ako izmjena ne uspije, skripta pokušava vratiti izvornu novu datoteku. Pokušava ponovo pokrenuti servis i pri grešci unutar ovog bloka, ako se izvršavanje skripte može dovršiti; nestanak napajanja ili prisilni prekid skripte time se ne mogu obraditi.

    Prije pokretanja ispunite sva tri polja ispod:

    • DEVICE_ID: brojčani ID uređaja iz koraka 4.
    • CAMPAIGN_ID: ID kampanje iz koraka 6.
    • RESOURCE_ID: ID nedostupnog medija iz zapisa.

    Nemojte preuzimati ID-jeve iz primjera ako ne rješavate upravo taj slučaj. Crvene vrijednosti 000 služe kao zaštita: kopiranje ostaje onemogućeno dok ne unesete sve ID-jeve, a neizmijenjena skripta ništa ne mijenja. Na uređaju mora ostati barem još jedna kampanja.

    1. Unesite sva tri ID-ja prije kopiranja

    Svaki broj označava drugi podatak. Provjerite ih prema koracima 4 i 6; nemojte automatski koristiti brojeve iz primjera.

    Iz koraka 4; nije identifikator iz zaglavlja konzole.

    Iz rezultata koraka 6; nije ID medija.

    Isti ID medija koji ste provjerili u koraku 6.

    Unesite sva tri ID-ja. Kopiranje naredbe zasad je onemogućeno.

    2. Provjerite tri crveno istaknute vrijednosti pa kopirajte cijeli blok. Pokretanje nakratko prekida reprodukciju. Skripta dodatno provjerava odgovaraju li ID-jevi uređaja, kampanje i medija sadržaju liste za reprodukciju.

    Naredba za prilagođavanje i kopiranje:

    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('Prvo unesite sva tri ID-ja. Ništa nije promijenjeno.')
    
    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('ID uređaja se ne podudara.')
        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('Kampanja ili medij ne odgovaraju unesenim ID-jevima.')
        data['campaigns'] = [c for c in data['campaigns']
                             if c.get('campaignId') != CAMPAIGN_ID]
        if not data['campaigns']:
            raise RuntimeError('Nakon isključivanja ne bi ostala nijedna kampanja.')
        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('Sigurnosna kopija:', backup)
        print('Broj preostalih kampanja:', len(data['campaigns']))
    except Exception:
        if saved:
            shutil.copy2(backup / 'playlist_new', path)
        raise
    finally:
        subprocess.run(['systemctl', 'start', service], check=True)
    PY
    

    Uspješan ispis sadrži putanju sigurnosne kopije i broj preostalih kampanja. Sačuvajte putanju za podršku. Ako skripta prijavi nepodudaranje ID-jeva, nemojte uklanjati provjere: vratite se na korak 4 ili 6. Ako zapisivanje, vraćanje datoteke ili pokretanje servisa ne uspije, pošaljite cijeli ispis podršci; nemojte ručno premještati novu listu preko trenutne.

    Ova privremena popravka važi samo za taj uređaj. Ne mijenja postavke na serveru. Sljedeće ažuriranje može ponovo dostaviti neispravnu kampanju. Zato dovršite i ispravku na portalu prema koraku 7. Aktivaciju može i dalje blokirati neki drugi medij koji nedostaje.
  9. Provjerite aktivaciju liste i stvarnu reprodukciju.

    Nakon otprilike jedne minute provjerite servis i zapise; za veće medije sačekajte duže. Ovaj blok ništa ne mijenja.

    Naredba za kopiranje:

    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
    

    Ponovo ispišite kampanje naredbom iz koraka 4. Trenutna lista treba sadržavati očekivani novi izbor, servis treba biti aktivan, a najnoviji zapisi ne bi trebali ponavljati istu grešku preuzimanja. Sama jednaka veličina datoteka nije dovoljan dokaz.

    Na kraju posmatrajte ekran uređaja ili njegov udaljeni pregled dovoljno dugo da prođe cijeli ciklus oglasa. Provjerite prikazuju li se sve kampanje koje prema trenutnim uslovima trebaju biti aktivne. Za kampanje s rasporedom ili razmacima između prikazivanja prilagodite trajanje provjere njihovim postavkama.

  10. Šta učiniti ako problem i dalje postoji.

    • Pojavio se drugi ID medija: ponovite korake 5 i 6 za novu datoteku. Prethodna prepreka možda je prikrivala drugu.
    • Nova lista za reprodukciju nije stigla: provjerite je li uređaj na mreži, je li odabran pravi ciljni uređaj i je li promjena kampanje sačuvana. Lokalna izmjena ne dokazuje ispravnu dostavu promjena sa servera.
    • Lista je aktivirana, ali oglas i dalje nedostaje: provjerite njegove vremenske uslove i druge greške reprodukcije. Ovaj postupak ne rješava automatski svaki kvar videa ili rasporeda.
    • Servis nije pokrenut: provjerite njegovo stanje sljedećom naredbom i pošaljite rezultat podršci.

    Naredba za kopiranje:

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

    Svom pružaocu softvera pošaljite ID uređaja, lokalno vrijeme problema s vremenskom zonom, nazive očekivanih kampanja, obje liste kampanja, relevantnu grešku iz zapisa i rezultat testa URL-a. Ako ste primijenili lokalnu popravku, priložite njen ispis i putanju sigurnosne kopije. Nemojte slati lozinke ni podatke za prijavu.

Niste pronašli ono što ste tražili?
Obratite se svom pružaocu softvera.