Uređaj prikazuje samo jednu ili neke kampanje
Uvod i orijentacija
Na zaslonu se prikazuje samo jedna ili nekoliko kampanja, iako u pojedinostima uređaja na kartici Objavljene kampanje vidite i druge. Ni ponovno pokretanje nije pomoglo. Ovaj vas vodič vodi kroz provjeru postavki, usporedbu popisa za reprodukciju i pronalaženje medija koji možda blokira ažuriranje sadržaja.
Popis za reprodukciju sadrži kampanje i pravila njihove reprodukcije. Ako uređaj ne uspije pripremiti neku medijsku datoteku za novi popis, može nastaviti koristiti prethodni. No postoje i drugi mogući uzroci: raspored, dodjela kampanja, veza ili slobodan prostor.
Provjera i rješavanje problema
Postupak dijagnostike i popravka
Provjerite kampanje na portalu.
Otvorite pojedinosti zahvaćenog uređaja 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 uvjete reprodukcije, uključujući dane i vrijeme. Usporedite ih sa stvarnim vremenom na uređaju u koraku 3.
Ako kampanja prema rasporedu trenutačno 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 s poslužiteljem. Udaljena konzola zahtijeva ovlasti Server Administrator ili više. Otvorite je prema vodiču Udaljena konzola. Zalijepite naredbu u polje za unos i pošaljite je gumbom ✓. Višeredni blok zalijepite u cijelosti, uključujući završni redak
PY.Sam udaljeni pregled zaslona ne omogućuje pristup konzoli. Ako uređaj nije na mreži, najprije slijedite vodič Provjera veze uređaja. Nemate potrebnu ulogu? Proslijedite postupak ovlaštenom administratoru; pregled je u odjeljku Korisnici i ovlasti.
Naredbe u nastavku namijenjene su Linux uređajima sa reproduktorom, 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Što vidite Što to znači i kako nastaviti Datum i vrijeme Usporedite ih s trenutačnim lokalnim vremenom i vremenskom zonom. Netočno vrijeme može utjecati na odabir kampanja i povezivanje. Slobodan prostor u stupcu 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 zapisnika u koraku 5. Nemojte primjenjivati privremeni popravak dok ne provjerite instalaciju i uzrok. /storage/playlistsadrži trenutačno prihvaćeni popis za reprodukciju./storage/playlist_newsadrži novoprimljeni popis č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. Tijekom uobičajenog preuzimanja datoteke se mogu privremeno razlikovati.Usporedite kampanje na oba popisa za reprodukciju.
Sljedeći blok čita obje datoteke i ispisuje brojčani ID uređaja, broj kampanja, njihove ID-jeve, nazive i razdoblje valjanosti. 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('POGREŠKA:', e) PYAko novi popis sadrži očekivane kampanje, a trenutačni samo stariji izbor, u sljedećem koraku potražite pogrešku pri pripremi medija. Ako kampanje nedostaju i u novoj datoteci, provjerite postavke i dostavu promjena s portala. Pogreška pri čitanju JSON-a može upućivati na nepotpunu ili oštećenu datoteku; nemojte je ručno prepisivati bez dodatne provjere.
Pronađite pogrešku preuzimanja i provjerite odgovor poslužitelja.
Prikažite posljednjih 120 zapisa servisa iz proteklih 20 minuta. Potražite pogreške koje se ponavljaju, URL medija i njegov ID. Ako vidite samo kraj pogreš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 pogreš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 točan URL iz vlastitog zapisnika.U istaknuto polje u nastavku zalijepite točnu adresu iz zapisnika; automatski će se umetnuti u naredbu. Ostavite navodnike. Test odbacuje preuzete podatke i ne mijenja medije ni popise za reprodukciju. Nemojte automatski koristiti adresu iz primjera za drugi uređaj.
Unesite točnu adresu koja počinje s https:// ili http://. Nemojte kopirati cijelu poruku pogreš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 prilagodbu 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'Što vidite Što to znači i kako nastaviti HTTP 404 Poslužitelj ne pruža medij na traženoj adresi. Pronađite njegovu kampanju u koraku 6 i ispravite je u koraku 7. HTTP 401 / 403 Poslužitelj je odbio pristup. S podrškom provjerite ovlasti i konfiguraciju servisa. HTTP 5xx Pogreška poslužitelja. Provjerite servis koji pruža datoteke; brisanje popisa za reprodukciju neće popraviti poslužitelj. Pogreška DNS-a, veze, isteka vremena ili TLS-a Postupite prema konkretnoj pogrešci: provjerite mrežu, razrješavanje naziva, dostupnost poslužitelja, 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 pogrešaka u zapisniku. Ograničenje veličine u curlu Poslužitelj je možda zanemario zahtjev za prvih 1 024 bajta. Test je ograničen na 1 MiB i 30 sekundi; dosegnuto ograničenje samo po sebi ne znači da je medij neispravan. Pronađite kampanju prema ID-ju medija.
Najprije unesite ID medija. Crveno označena vrijednost
000samo je zamjenska vrijednost. Blok traži toč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 redak pa kopirajte cijelu naredbu. Nakon unosa valjanog ID-ja vrijednost se automatski umeće u naredbu i omogućuje se gumb Kopiraj.
Naredba za prilagodbu i kopiranje:
python3 - <<'PY' import json RESOURCE_ID = 000 # OVDJE MORA BITI VAŠ ID MEDIJA if RESOURCE_ID <= 0: raise SystemExit('Najprije 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 novom popisu. Provjerite najnoviji zapisnik i ID.') PYAko medij nije pronađen, datoteka se možda u međuvremenu promijenila. Ponovno provjerite najnoviji zapisnik i novi popis za reprodukciju. Ako medij koristi više kampanja, ispravak samo jedne možda neće biti dovoljan; 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 spremite promjenu. Pogledajte vodiče Mediji i Kampanje.
Pričekajte dostavu ažuriranog popisa za reprodukciju i preuzimanje njegovih medija. Potrebno vrijeme ovisi o vezi i veličini datoteka. Ponovite provjere iz koraka 3 i 4: novi popis 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 izvorni odabir, ažurirani popis još nije stigao. Provjerite je li uređaj na mreži i je li promjena spremljena na portalu. Samo ponovno pokretanje ne može obnoviti datoteku za koju poslužitelj i dalje vraća HTTP 404. Ako trebate privremeno vratiti ostale oglase, nastavite na korak 8; inače provjerite rezultat u koraku 9.
Privremeni lokalni popravak sa sigurnosnom kopijom.
Servisni zahvat – kratko prekida reprodukciju. Primijenite ga tek nakon potvrde konkretnog nedostupnog medija i njegove kampanje. Skripta uklanja cijelu jednu kampanju s novog popisa, a ne samo njezin 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 obiju datoteka u direktoriju/storage/playlist-backup-DATUM-CAS, uklanja navedenu kampanju izplaylist_newi ponovno pokreće servis. Ne prepisuje izravno trenutačni popis i ne briše medije. Sigurnosna kopija nastaje prije zapisivanja; ako izmjena ne uspije, skripta pokušava vratiti izvornu novu datoteku. Pokušava ponovno pokrenuti servis i pri pogreš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 u nastavku:
DEVICE_ID: brojčani ID uređaja iz koraka 4.CAMPAIGN_ID: ID kampanje iz koraka 6.RESOURCE_ID: ID nedostupnog medija iz zapisnika.
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 kratko prekida reprodukciju. Skripta dodatno provjerava odgovaraju li ID-jevi uređaja, kampanje i medija sadržaju popisa za reprodukciju.
Naredba za prilagodbu 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('Najprije 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. Spremite 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 novi popis preko trenutačnog.
Ovaj privremeni popravak vrijedi samo za taj uređaj. Ne mijenja postavke na poslužitelju. Sljedeće ažuriranje može ponovno dostaviti neispravnu kampanju. Zato dovršite i ispravak na portalu prema koraku 7. Aktivaciju može i dalje blokirati neki drugi medij koji nedostaje.Provjerite aktivaciju popisa i stvarnu reprodukciju.
Nakon otprilike jedne minute provjerite servis i zapisnik; za veće medije pričekajte dulje. 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 -50Ponovno ispišite kampanje naredbom iz koraka 4. Trenutačni popis treba sadržavati očekivani novi izbor, servis treba biti aktivan, a aktualni zapisnik ne bi trebao ponavljati istu pogrešku preuzimanja. Sama jednaka veličina datoteka nije dovoljan dokaz.
Na kraju promatrajte zaslon uređaja ili njegov udaljeni pregled dovoljno dugo da prođe cijeli ciklus oglasa. Provjerite prikazuju li se sve kampanje koje prema trenutačnim uvjetima trebaju biti aktivne. Za kampanje s rasporedom ili razmacima između prikazivanja prilagodite trajanje provjere njihovim postavkama.
Što učiniti ako problem i dalje postoji.
- Pojavio se drugi ID medija: ponovite korake 5 i 6 za novu datoteku. Prethodna je prepreka možda prikrivala drugu.
- Novi popis za reprodukciju nije stigao: provjerite je li uređaj na mreži, je li odabran pravi ciljni uređaj i je li promjena kampanje spremljena. Lokalna izmjena ne dokazuje ispravnu dostavu promjena s poslužitelja.
- Popis je aktiviran, ali oglas i dalje nedostaje: provjerite njegove vremenske uvjete i druge pogreš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-pagerSvojem pružatelju softvera pošaljite ID uređaja, lokalno vrijeme problema s vremenskom zonom, nazive očekivanih kampanja, oba popisa kampanja, relevantnu pogrešku iz zapisnika i rezultat testa URL-a. Ako ste primijenili lokalni popravak, priložite njegov ispis i putanju sigurnosne kopije. Nemojte slati lozinke ni podatke za prijavu.
Povezane teme i sljedeći koraci
← Natrag na pregled rješavanja problema
Obratite se svojem pružatelju softvera.
