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
Postupak dijagnostike i popravke
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.
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, servisomdevice-runtime.servicei 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.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 vrijeme Uporedite ih s trenutnim lokalnim vremenom i vremenskom zonom. Netačno vrijeme može utjecati na odabir kampanja i povezivanje. Slobodan prostor u koloni Avail Ako 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,failedili datoteke koje nedostajuNastavite provjerom zapisa u koraku 5. Nemojte primjenjivati privremenu popravku dok ne provjerite instalaciju i uzrok. /storage/playlistsadrži trenutno prihvaćenu listu za reprodukciju./storage/playlist_newsadrž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.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) PYAko 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.
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 120ili proširite vremenski raspon.Naredba za kopiranje:
sudo journalctl -u device-runtime.service --since "20 minutes ago" --no-pager -n 120 -o catPrimjer 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.mp4Received 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 404 Server ne pruža medij na traženoj adresi. Pronađite njegovu kampanju u koraku 6 i ispravite je u koraku 7. HTTP 401 / 403 Server je odbio pristup. S podrškom provjerite ovlaštenja i konfiguraciju servisa. HTTP 5xx Greš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-a Postupite 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 podaci Test 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 curlu Server 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. Pronađite kampanju prema ID-ju medija.
Prvo unesite ID medija. Crveno označena vrijednost
000samo je zamjenska vrijednost. Blok traži tačnu vrijednost poljaresourceId, 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.') PYAko 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.
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.
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 izplaylist_newi 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 kopiranjaSvaki 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) PYUspješ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.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 -50Ponovo 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.
Š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-pagerSvom 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.
Povezane teme i naredni koraci
← Nazad na pregled rješavanja problema
Obratite se svom pružaocu softvera.
