Zařízení přehrává pouze jednu nebo některé kampaně
Úvod a orientace
Na obrazovce se přehrává pouze jedna nebo několik kampaní, přestože v detailu zařízení v záložce Zveřejněné kampaně vidíte další. Ani restart nepomohl. Tento návod vás provede kontrolou nastavení, porovnáním playlistů a hledáním média, které může blokovat aktualizaci obsahu.
Playlist je seznam kampaní a pravidel jejich přehrávání. Pokud se nepodaří připravit některé médium nového playlistu, přehrávač může dál používat původní sestavu. Nejde však o jedinou možnou příčinu: roli hraje také časový plán, přiřazení kampaní, připojení nebo volné místo.
Postup kontroly a řešení
Postup diagnostiky a opravy
Zkontrolujte kampaně v portálu.
Otevřete detail dotčeného zařízení a záložku Zveřejněné kampaně. U chybějících kampaní ověřte přiřazení k tomuto zařízení, aktivní stav, datum začátku a konce i podmínky přehrávání včetně dnů a času. Porovnejte je se skutečným časem zařízení v kroku 3.
Pokud kampaň podle plánu právě běžet nemá, nejde samo o sobě o poruchu. Pokud běžet má a restart nepomohl, pokračujte. Pomohou také návody Kampaně a Zařízení.
Otevřete Vzdálenou konzoli.
Zařízení musí být online a komunikovat se serverem. Vzdálená konzola vyžaduje oprávnění Server Administrator nebo vyšší. Otevřete ji podle návodu ke vzdálené konzoli. Příkaz vložte do vstupního pole a odešlete tlačítkem ✓. Víceřádkový blok vkládejte celý včetně posledního řádku
PY.Samotný vzdálený náhled obrazovky nenahrazuje přístup ke konzole. Pokud je zařízení offline, nejprve použijte návod Kontrola připojení zařízení. Nemáte potřebnou roli? Předejte postup oprávněnému správci; přehled je v části Uživatelé a oprávnění.
Příkazy níže jsou pro linuxový přehrávač se služboudevice-runtime.servicea pracovním adresářem/storage. Pythonové bloky potřebují Python 3; test URL potřebuje curl. Pokud konzola hlásí neexistující příkaz, službu nebo cestu, nepokračujte změnou souborů a obraťte se na podporu.Ověřte čas, místo na disku a službu přehrávače.
Příkaz ke zkopírování:
date df -h / /storage systemctl is-active device-runtime.service ls -lh --time-style=long-iso /storage/playlist /storage/playlist_newCo vidíte Co to znamená a jak pokračovat Datum a čas Porovnejte je s aktuálním místním časem a časovým pásmem. Nesprávný čas může ovlivnit výběr kampaní i spojení. Volné místo ve sloupci Avail Při zaplněném úložišti postupujte podle návodu Nedostatek místa na disku. Zkontrolujte i oddíl připojený jako /storage. activeSlužba běží. To ještě nepotvrzuje správné přehrávání ani úspěšnou aktualizaci. inactive,failednebo chybějící souboryPokračujte kontrolou deníku v kroku 5. Nouzovou úpravu nepoužívejte, dokud neověříte správnou instalaci a příčinu. /storage/playlistobsahuje aktuálně přijatou sestavu./storage/playlist_newobsahuje nově doručenou sestavu, jejíž média přehrávač připravuje před aktivací. Novější čas a jiná velikost druhého souboru jsou důležitou stopou, nikoli samostatným důkazem závady. Při běžném stahování se mohou dočasně lišit.Porovnejte kampaně v obou playlistech.
Následující blok přečte oba soubory a vypíše číselné ID zařízení, počet kampaní, jejich ID, názvy a platnost. Nic nemění. Poznamenejte si číselné ID zařízení; v konzole může být v záhlaví také jiný identifikátor, který do pozdějšího pole DEVICE_ID nepatří.
Příkaz ke zkopírování:
python3 - <<'PY' import json for path in ['/storage/playlist', '/storage/playlist_new']: print('\nSOUBOR:', path) try: with open(path) as f: data = json.load(f) print('Zařízení:', data.get('deviceId')) campaigns = data.get('campaigns', []) print('Počet kampaní:', 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('CHYBA:', e) PYPokud nový playlist obsahuje očekávané kampaně, ale aktuální pouze starší výběr, hledejte v dalším kroku chybu jejich přípravy. Pokud kampaně chybějí i v novém souboru, vraťte se k nastavení a doručení změn z portálu. Chyba čtení JSON může znamenat neúplný nebo poškozený soubor; nepřepisujte jej ručně bez dalšího ověření.
Najděte chybu stahování a ověřte odpověď serveru.
Zobrazte posledních 120 záznamů služby z uplynulých 20 minut. Hledejte opakované chyby, URL média a jeho ID. Pokud vidíte jen konec chyby, zvětšete hodnotu
-n 120nebo časové období.Příkaz ke zkopírování:
sudo journalctl -u device-runtime.service --since "20 minutes ago" --no-pager -n 120 -o catUkázka výpisu – nevkládejte ji do konzole. Příklad chyby, kterou jsme tímto postupem skutečně vyřešili:
https://files.screensoft.org/api/video/H265/1790935600695 java.lang.IllegalStateException: Received 0 bytes ... /storage/video/1790935600695.mp4Received 0 bytes znamená, že přehrávač nepřijal použitelný obsah souboru. Samotná zpráva ještě neurčuje, proč. V tomto příkladu je ID média
1790935600695; pro vlastní případ si zapište ID a přesnou URL ze svého výpisu.Do zvýrazněného pole níže vložte přesnou adresu ze svého deníku; do příkazu se doplní automaticky. Uvozovky ponechte. Test zahodí stažená data a nezmění média ani playlisty. Ukázkovou adresu nepoužívejte automaticky pro jiné zařízení.
Vložte přesnou adresu začínající https:// nebo http://. Nekopírujte celou zprávu chyby ani cestu /storage/video/…
URL není vyplněná. Kopírování příkazu je zatím vypnuté.
2. Zkontrolujte adresu v příkazu a zkopírujte celý blok. Adresa se doplní automaticky.
Příkaz k úpravě a zkopírování:
curl -sS -L --connect-timeout 10 --max-time 30 \ --range 0-1023 --max-filesize 1048576 \ -D - -o /dev/null \ -w '\nHTTP: %{http_code}\nStaženo: %{size_download} bajtů\n' \ 'SEM_VLOZTE_URL_Z_DENIKU'Co vidíte Co to znamená a jak pokračovat HTTP 404 Server na požadované adrese médium neposkytuje. Najděte jeho kampaň v kroku 6 a opravte ji v kroku 7. HTTP 401 / 403 Server odmítl přístup. Ověřte oprávnění a konfiguraci služby s podporou. HTTP 5xx Chyba na serveru. Řešte službu poskytující soubory; mazání playlistu není opravou serveru. Chyba DNS, spojení, timeout nebo TLS Postupujte podle konkrétní chyby: síť, překlad názvů, dostupnost serveru, čas nebo certifikát. Nevypínejte ověřování certifikátu. HTTP 200 / 206 a nenulová data Test získal data. Nepotvrzuje úplnost ani přehratelnost celého videa; zkontrolujte další chyby v deníku. Limit velikosti curl Server mohl ignorovat požadavek na prvních 1 024 bajtů. Test je omezen na 1 MiB a 30 sekund; dosažení tohoto limitu samo neznamená vadné médium. Najděte kampaň podle ID média.
Nejdříve doplňte ID média. Červeně označené
000je pouze zástupná hodnota. Blok hledá přesnou hodnotu poleresourceId, včetně alternativních vizuálů, a vypíše odpovídající kampaně. Zapište si jejich názvy a ID. Neupravený blok s hodnotou 000 se bezpečně ukončí a nic nezmění.Použijte číslo za posledním lomítkem v URL média z kroku 5. Nejde o ID kampaně ani zařízení. Zadejte ho bez přípony .mp4.
ID není vyplněné. Příkaz zatím nekopírujte.
2. Zkontrolujte červeně zvýrazněný řádek a potom zkopírujte celý příkaz. Po zadání platného ID se hodnota v příkazu doplní automaticky a tlačítko Kopírovat se zpřístupní.
Příkaz k úpravě a zkopírování:
python3 - <<'PY' import json RESOURCE_ID = 000 # ZDE MUSÍ BÝT VAŠE ID MÉDIA if RESOURCE_ID <= 0: raise SystemExit('Nejprve doplňte ID média do 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('Kampaň:', c.get('nameCampaign')) print('ID kampaně:', c.get('campaignId')) print('Hlavní vizuál:', c.get('primary')) print('Alternativní vizuály:', c.get('alternative')) if not found: print('Médium se v novém playlistu nenašlo. Ověřte aktuální deník a ID.') PYPokud se médium nenajde, soubor se mohl mezitím změnit. Zopakujte kontrolu aktuálního deníku a nového playlistu. Pokud ho používá více kampaní, oprava jediné nemusí stačit; ověřte všechny nalezené výskyty.
Opravte kampaň v portálu.
Otevřete nalezenou kampaň podle názvu a ID. Nedostupné médium nahraďte nově nahraným souborem, případně kampaň dočasně pozastavte, a změnu uložte. Orientujte se podle návodů Média a Kampaně.
Počkejte na doručení upraveného playlistu a stažení jeho médií. Rychlost závisí na připojení a velikosti souborů. Znovu spusťte kontroly z kroků 3 a 4: nový playlist už nesmí odkazovat na vadný soubor, pokud jste kampaň pozastavili nebo médium nahradili.
Pokud soubor zůstává stejný a stále obsahuje původní odkaz, upravená sestava zatím nedorazila. Ověřte online stav a uložení změny v portálu. Samotný restart nemůže obnovit soubor, pro který server dál vrací HTTP 404. Pokud potřebujete dočasně obnovit ostatní reklamy, pokračujte krokem 8; jinak ověřte výsledek v kroku 9.
Nouzová lokální oprava se zálohou.
Servisní zásah – krátce přeruší přehrávání. Použijte až po potvrzení konkrétního nedostupného média a jeho kampaně. Skript odstraní z nového playlistu celou jednu kampaň, nikoli pouze její video. Používejte jej na správném zařízení a v době, kdy lze krátce přerušit zobrazování.Skript ověří všechna ID, zastaví pouze
device-runtime.service, zazálohuje oba soubory do adresáře/storage/playlist-backup-DATUM-CAS, vyřadí určenou kampaň zplaylist_newa znovu spustí službu. Aktuální playlist přímo nepřepisuje a média nemaže. Záloha vzniká před zápisem; při chybě úpravy se pokusí obnovit původní nový playlist. Opětovné spuštění služby se provede i při chybě v tomto bloku, pokud samotný proces doběhne; výpadek napájení nebo násilné ukončení skriptu nelze tímto ošetřit.Před spuštěním vyplňte všechna tři pole níže:
DEVICE_ID: číselné ID zařízení z kroku 4.CAMPAIGN_ID: ID kampaně z kroku 6.RESOURCE_ID: ID nedostupného média z deníku.
Nepřebírejte ID z příkladu, pokud neřešíte přesně tento případ. Červené hodnoty 000 jsou pojistkou: bez doplnění všech ID se kopírování nezpřístupní a neupravený skript nic nezmění. Na zařízení musí zůstat alespoň jedna další kampaň.
1. Doplňte všechna tři ID před kopírovánímKaždé číslo patří jinému údaji. Zkontrolujte je podle kroků 4 a 6; nepoužívejte automaticky čísla z příkladu.
Z kroku 4; ne identifikátor v záhlaví konzole.
Z výsledku kroku 6; nejde o ID média.
Stejné ID média, které jste ověřili v kroku 6.
Doplňte všechna tři ID. Kopírování příkazu je zatím vypnuté.
2. Zkontrolujte tři červeně zvýrazněné hodnoty a zkopírujte celý blok. Po spuštění se přehrávání krátce přeruší. Skript ještě samostatně ověří, že ID zařízení, kampaně a média odpovídají obsahu playlistu.
Příkaz k úpravě a zkopírování:
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('Nejprve doplňte všechna tři ID. Nic se nezměnilo.') 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('Nesouhlasí ID zařízení.') 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('Kampaň nebo médium neodpovídají zadaným ID.') data['campaigns'] = [c for c in data['campaigns'] if c.get('campaignId') != CAMPAIGN_ID] if not data['campaigns']: raise RuntimeError('Po vyřazení by nezůstala žádná kampaň.') 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('Záloha:', backup) print('Počet ponechaných kampaní:', len(data['campaigns'])) except Exception: if saved: shutil.copy2(backup / 'playlist_new', path) raise finally: subprocess.run(['systemctl', 'start', service], check=True) PYÚspěšný výpis obsahuje cestu k záloze a počet ponechaných kampaní. Cestu si uložte pro podporu. Pokud skript ohlásí nesoulad ID, neopravujte ho odstraněním kontrol: vraťte se ke kroku 4 nebo 6. Pokud dojde k chybě zápisu, obnovy či spuštění služby, předejte celý výpis podpoře a nepřesouvejte ručně nový playlist na místo aktuálního.
Toto je dočasná oprava pouze daného zařízení. Nemění nastavení na serveru. Další aktualizace může vadnou kampaň znovu doručit. Dokončete proto také opravu v portálu podle kroku 7. Pokud některé jiné médium také chybí, může aktivaci dále blokovat ono.Ověřte aktivaci playlistu a skutečné přehrávání.
Po přibližně minutě zkontrolujte službu a deník; při větších médiích dopřejte stahování více času. Tento blok už nic nemění.
Příkaz ke zkopírování:
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 -50Znovu vypište kampaně příkazem z kroku 4. Aktuální playlist má obsahovat očekávanou novou sestavu, služba má být aktivní a aktuální deník nemá opakovat stejnou chybu stahování. Samotná shodná velikost souborů není dostatečný důkaz.
Nakonec sledujte fyzickou obrazovku nebo její vzdálený náhled dostatečně dlouho, aby proběhl celý cyklus reklam. Ověřte střídání všech kampaní, které podle aktuálních podmínek mají běžet. U kampaní s časovým plánem nebo rozestupy přehrání přizpůsobte délku kontroly jejich nastavení.
Co dělat, pokud problém trvá.
- Objevilo se jiné ID média: zopakujte kroky 5 a 6 pro nový soubor. Předchozí překážka mohla zakrývat další.
- Nový playlist nedorazil: ověřte online stav, správné cílové zařízení a uloženou změnu kampaně. Lokální úprava nedokazuje funkční doručování změn ze serveru.
- Playlist se aktivoval, ale reklama stále chybí: zkontrolujte její časové podmínky a další chyby přehrávání. Tento postup neřeší automaticky všechny poruchy videa nebo plánování.
- Služba neběží: zkontrolujte její stav následujícím příkazem a předejte výsledek podpoře.
Příkaz ke zkopírování:
sudo systemctl status device-runtime.service --no-pagerSvému poskytovateli softwaru pošlete ID zařízení, místní čas problému včetně časového pásma, názvy očekávaných kampaní, seznam kampaní z obou playlistů, relevantní chybu z deníku a výsledek testu URL. Pokud jste provedli lokální opravu, přiložte její výpis a cestu k záloze. Neposílejte hesla ani přihlašovací údaje.
Související témata a další kroky
← Zpět na přehled řešení problémů
Obraťte se na svého poskytovatele softwaru.
