Устройството възпроизвежда само една или част от кампаниите
Въведение и ориентация
Екранът възпроизвежда само една или няколко кампании, въпреки че подробностите на устройството в Публикувани кампании показват повече. Рестартирането не е помогнало. Това ръководство ви води през проверка на настройките, сравняване на плейлистите и откриване на медийни файлове, които може да блокират актуализирането на съдържанието.
Плейлистът е списъкът с кампании и правилата за тяхното възпроизвеждане. Ако плейърът не може да подготви медиен файл, необходим за нов плейлист, той може да продължи да използва предишния. Други възможни причини са графикът, насочването на кампаниите, свързаността и свободното място в хранилището.
Проверки и отстраняване на проблеми
Процедура за диагностика и поправка
Проверете кампаниите в портала.
Отворете подробностите на засегнатото устройство и раздела Публикувани кампании. За липсващите кампании проверете дали са насочени към това устройство, активни ли са и имат ли валидни начални и крайни дати и условия за възпроизвеждане, включително дни и часове. Сравнете ги с действителното време на устройството в стъпка 3.
Кампания, която не е планирана за този момент, не е непременно неизправна. Ако трябва да се възпроизвежда и рестартирането не е помогнало, продължете. Вижте също ръководствата за Кампании и Устройства.
Отворете дистанционната конзола.
Устройството трябва да е онлайн и да комуникира със сървъра. Дистанционната конзола изисква роля на сървърен администратор или по-висока. Отворете я според описанието в ръководството Дистанционна конзола. Поставете командата в полето за въвеждане и я изпратете с ✓. Поставяйте всеки многострочен блок изцяло, включително последния ред
PY.Дистанционният преглед на екрана не осигурява достъп до конзолата. Ако устройството е офлайн, първо следвайте ръководството за Проверка на свързаността на устройството. Ако ролята ви не осигурява достъп, помолете оторизиран администратор да изпълни тези стъпки. Вижте Потребители и права.
Командите по-долу са за плейъри под Linux с услугатаdevice-runtime.serviceи работна директория/storage. Блоковете на Python изискват Python 3, а проверката на URL адреса изисква curl. Ако конзолата съобщи, че команда, услуга или път не съществува, не продължавайте с промени по файловете. Свържете се с поддръжката.Проверете часа, дисковото пространство и услугата на плейъра.
Команда за копиране:
date df -h / /storage systemctl is-active device-runtime.service ls -lh --time-style=long-iso /storage/playlist /storage/playlist_newКакво виждате Какво означава и как да продължите Дата и час Сравнете ги с текущото местно време и часовата зона. Неправилен час може да повлияе на избора на кампании и свързаността. Свободно място в колоната Avail Ако хранилището е пълно, следвайте ръководството за Недостатъчно дисково пространство. Проверете и дяла, монтиран в /storage. activeУслугата работи. Това все още не потвърждава правилно възпроизвеждане или успешна актуализация. inactive,failedили липсващи файловеПроверете логовете в стъпка 5. Не използвайте временната поправка, докато не проверите инсталацията и причината. /storage/playlistсъдържа плейлиста, който плейърът е приел в момента./storage/playlist_newсъдържа новополучения плейлист, чиито медийни файлове плейърът подготвя преди активиране. По-нова времева отметка или различен размер е полезна следа, но сам по себе си не доказва повреда. Файловете може временно да се различават при нормално изтегляне.Сравнете кампаниите в двата плейлиста.
Следният блок прочита двата файла и показва числовия ID на устройството, броя на кампаниите, техните ID, имена и дати на валидност. Не променя нищо. Запишете числовия ID на устройството: заглавната част на конзолата може да показва различен идентификатор, който не трябва да се използва по-късно в полето DEVICE_ID.
Команда за копиране:
python3 - <<'PY' import json for path in ['/storage/playlist', '/storage/playlist_new']: print('\nFILE:', path) try: with open(path) as f: data = json.load(f) print('Device:', data.get('deviceId')) campaigns = data.get('campaigns', []) print('Campaign count:', len(campaigns)) for c in campaigns: print(c.get('campaignId'), c.get('nameCampaign'), 'from:', c.get('start'), 'to:', c.get('end')) except Exception as e: print('ERROR:', e) PYАко новият плейлист съдържа очакваните кампании, а текущият съдържа само по-стар набор, потърсете грешка при подготовката в следващата стъпка. Ако кампаниите липсват и от новия файл, проверете настройките и доставянето на актуализациите от портала. Грешка при разчитане на JSON може да показва непълен или повреден файл; не го презаписвайте ръчно без допълнителни проверки.
Открийте грешката при изтегляне и проверете отговора на сървъра.
Покажете последните 120 записа от лога на услугата за изминалите 20 минути. Потърсете повтарящи се грешки, URL адреса на медийния файл и неговия ID. Ако се вижда само краят на грешка, увеличете
-n 120или разширете времевия диапазон.Команда за копиране:
sudo journalctl -u device-runtime.service --since "20 minutes ago" --no-pager -n 120 -o catПримерен резултат — не го поставяйте в конзолата. Пример за грешка, отстранена с тази процедура:
https://files.screensoft.org/api/video/H265/1790935600695 java.lang.IllegalStateException: Received 0 bytes ... /storage/video/1790935600695.mp4Received 0 bytes означава, че плейърът не е получил използваемо съдържание на файла. Самото съобщение не обяснява причината. В този пример ID на медийния файл е
1790935600695; за вашия случай запишете ID и точния URL адрес от вашите логове.Поставете точния адрес от логовете си в маркираното поле по-долу; той ще бъде вмъкнат автоматично в командата. Запазете кавичките. Проверката отхвърля изтеглените данни и не променя медийни файлове или плейлисти. Не използвайте автоматично примерния адрес за друго устройство.
Поставете точния адрес, започващ с https:// или http://. Не поставяйте цялото съобщение за грешка или път /storage/video/….
Липсва URL адрес. Копирането на командата засега е изключено.
2. Проверете адреса в командата, след което копирайте целия блок. Адресът се вмъква автоматично.
Команда за редактиране и копиране:
curl -sS -L --connect-timeout 10 --max-time 30 \ --range 0-1023 --max-filesize 1048576 \ -D - -o /dev/null \ -w '\nHTTP: %{http_code}\nDownloaded: %{size_download} bytes\n' \ 'PASTE_MEDIA_URL_HERE'Какво виждате Какво означава и как да продължите HTTP 404 Сървърът не предоставя медийния файл на заявения адрес. Открийте кампанията му в стъпка 6 и я поправете в стъпка 7. HTTP 401 / 403 Сървърът е отказал достъп. Проверете правата и конфигурацията на услугата с поддръжката. HTTP 5xx Грешка на сървъра. Проверете файловата услуга; изтриването на плейлиста няма да поправи сървъра. Грешка в DNS, връзката, времето за изчакване или TLS Следвайте конкретната грешка: проверете мрежата, разрешаването на имена, достъпността на сървъра, часа или сертификата. Не изключвайте проверката на сертификата. HTTP 200 / 206 и непразни данни Проверката е получила данни. Това не потвърждава, че цялото видео е пълно или може да се възпроизведе; проверете логовете за допълнителни грешки. Ограничение на размера в curl Сървърът може да е пренебрегнал заявката за първите 1 024 байта. Проверката е ограничена до 1 MiB и 30 секунди; достигането на ограничение само по себе си не означава, че медийният файл е повреден. Намерете кампанията по ID на медийния файл.
Първо въведете ID на медийния файл. Червеното
000е само заместител. Блокът търси точното значение на полетоresourceId, включително в алтернативните визуални материали, и показва съвпадащите кампании. Запишете имената и ID. Непромененият блок със стойност 000 приключва безопасно, без да променя нищо.Използвайте числото след последната наклонена черта в URL адреса на медийния файл от стъпка 5. Това не е ID на кампанията или устройството. Въведете го без разширението .mp4.
Липсва ID. Все още не копирайте командата.
2. Проверете реда, маркиран в червено, след което копирайте цялата команда. След като въведете валиден ID, той се вмъква автоматично в командата и бутонът „Копиране“ става активен.
Команда за редактиране и копиране:
python3 - <<'PY' import json RESOURCE_ID = 000 # YOUR MEDIA ID MUST GO HERE if RESOURCE_ID <= 0: raise SystemExit('Enter the media ID in RESOURCE_ID first.') 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('Campaign:', c.get('nameCampaign')) print('Campaign ID:', c.get('campaignId')) print('Primary visual:', c.get('primary')) print('Alternative visuals:', c.get('alternative')) if not found: print('Media not found in the new playlist. Check the latest logs and ID.') PYАко медийният файл не бъде намерен, файлът може междувременно да се е променил. Проверете отново последните логове и новия плейлист. Ако няколко кампании използват този медиен файл, поправянето само на една може да не е достатъчно; проверете всяко съвпадение.
Поправете кампанията в портала.
Отворете кампанията, която сте открили по име и ID. Заменете недостъпния медиен файл с новокачен файл или временно поставете кампанията на пауза и запазете промяната. Вижте ръководствата за Медийни файлове и Кампании.
Изчакайте да пристигне актуализираният плейлист и да се изтеглят медийните му файлове. Необходимото време зависи от свързаността и размера на файловете. Повторете проверките от стъпки 3 и 4: ако сте поставили кампанията на пауза или сте заменили медийния файл, новият плейлист вече не трябва да съдържа препратка към проблемния файл.
Ако файлът е непроменен и все още съдържа първоначалната препратка, актуализираният плейлист още не е пристигнал. Проверете онлайн състоянието и дали промяната в портала е запазена. Самото рестартиране не може да възстанови файл, за който сървърът продължава да връща HTTP 404. Ако трябва временно да възстановите останалите реклами, продължете към стъпка 8; в противен случай проверете резултата в стъпка 9.
Временна локална поправка с резервно копие.
Сервизна процедура — прекъсва възпроизвеждането за кратко. Използвайте само след потвърждаване на конкретния недостъпен медиен файл и неговата кампания. Скриптът премахва една цяла кампания от новия плейлист, а не само видеото ѝ. Изпълнете го на правилното устройство в момент, когато кратко прекъсване на възпроизвеждането е приемливо.Скриптът проверява всички ID, спира само
device-runtime.service, създава резервни копия на двата файла в/storage/playlist-backup-DATUM-CAS, премахва посочената кампания отplaylist_newи стартира услугата отново. Не презаписва директно текущия плейлист и не изтрива медийни файлове. Преди записване се създава резервно копие; ако редакцията не успее, скриптът се опитва да възстанови оригиналния нов плейлист. При грешка в този блок се опитва и да рестартира услугата, при условие че може да завърши; прекъсване на захранването или принудително прекратяване не могат да бъдат обработени по този начин.Преди изпълнение попълнете и трите полета по-долу:
DEVICE_ID: числовият ID на устройството от стъпка 4.CAMPAIGN_ID: ID на кампанията от стъпка 6.RESOURCE_ID: ID на недостъпния медиен файл от логовете.
Не използвайте примерните ID, освен ако не разглеждате точно този случай. Червените стойности 000 са защитна мярка: копирането остава изключено, докато не бъдат попълнени всички ID, а непромененият скрипт не прави промени. На устройството трябва да остане поне една друга кампания.
1. Въведете и трите ID преди копиранеВсяко число обозначава различен елемент. Проверете ги спрямо стъпки 4 и 6; не използвайте автоматично примерните стойности.
От стъпка 4; не идентификаторът в заглавната част на конзолата.
От стъпка 6; това не е ID на медийния файл.
Същият ID на медийния файл, който проверихте в стъпка 6.
Въведете и трите ID. Копирането на командата засега е изключено.
2. Проверете трите стойности, маркирани в червено, след което копирайте целия блок. Изпълнението прекъсва възпроизвеждането за кратко. Скриптът проверява и дали ID на устройството, кампанията и медийния файл съответстват на съдържанието на плейлиста.
Команда за редактиране и копиране:
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('Enter all three IDs first. Nothing has changed.') 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('Device ID does not match.') 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('Campaign or media does not match the specified IDs.') data['campaigns'] = [c for c in data['campaigns'] if c.get('campaignId') != CAMPAIGN_ID] if not data['campaigns']: raise RuntimeError('No campaigns would remain after exclusion.') 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('Backup:', backup) print('Campaigns retained:', len(data['campaigns'])) except Exception: if saved: shutil.copy2(backup / 'playlist_new', path) raise finally: subprocess.run(['systemctl', 'start', service], check=True) PYПри успешно изпълнение резултатът включва пътя към резервното копие и броя на запазените кампании. Запазете пътя за поддръжката. Ако скриптът съобщи за несъответстващи ID, не премахвайте проверките: върнете се към стъпка 4 или 6. Ако записването, възстановяването или стартирането на услугата не успее, изпратете пълния резултат на поддръжката; не премествайте ръчно новия плейлист върху текущия.
Тази временна поправка засяга само това устройство. Тя не променя настройките на сървъра. Следваща актуализация може отново да достави проблемната кампания. Изпълнете и поправката в портала от стъпка 7. Друг липсващ медиен файл все още може да блокира активирането.Проверете активирането на плейлиста и действителното възпроизвеждане.
След около минута проверете услугата и логовете; предвидете повече време за изтегляне на големи медийни файлове. Този блок не прави промени.
Команда за копиране:
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Покажете отново кампаниите с командата от стъпка 4. Текущият плейлист трябва да съдържа очаквания нов набор, услугата трябва да е активна, а текущите логове вече не трябва да повтарят същата грешка при изтегляне. Еднаквите размери на файловете сами по себе си не са достатъчно доказателство.
Накрая наблюдавайте физическия екран или дистанционния му преглед достатъчно дълго за един пълен рекламен цикъл. Уверете се, че се показват всички кампании, които трябва да се възпроизвеждат според текущите им условия. При кампании с график или интервали между възпроизвежданията съобразете периода на наблюдение с тях.
Ако проблемът продължава.
- Появява се друг ID на медиен файл: повторете стъпки 5 и 6 за новия файл. Предишното блокиране може да е прикривало друго.
- Новият плейлист не е пристигнал: проверете онлайн състоянието, целевото устройство и запазената промяна на кампанията. Локалната редакция не доказва, че актуализациите от сървъра се доставят правилно.
- Плейлистът е активен, но реклама все още липсва: проверете условията на графика ѝ и допълнителни грешки при възпроизвеждане. Тази процедура не отстранява автоматично всеки проблем с видео или график.
- Услугата не работи: проверете състоянието ѝ със следната команда и изпратете резултата на поддръжката.
Команда за копиране:
sudo systemctl status device-runtime.service --no-pagerИзпратете на доставчика на софтуера ID на устройството, местното време на проблема с часовата зона, имената на очакваните кампании, двата списъка с кампании, съответната грешка от лога и резултата от проверката на URL адреса. Ако сте извършили локалната поправка, включете резултата ѝ и пътя към резервното копие. Не изпращайте пароли или данни за вход.
Свързани теми и следващи стъпки
← Назад към отстраняването на проблеми
Свържете се с Вашия доставчик на софтуер.
