El dispositivo solo reproduce una o algunas campañas
Introducción y orientación
La pantalla solo reproduce una o unas pocas campañas, aunque los detalles del dispositivo, en Campañas publicadas, muestran más. Reiniciar no ha ayudado. Esta guía explica cómo revisar los ajustes, comparar las listas de reproducción e identificar archivos que puedan bloquear una actualización del contenido.
Lista de reproducción es la lista de campañas y sus reglas de reproducción. Si el reproductor no puede preparar un archivo necesario para una lista nueva, puede seguir utilizando la anterior. Otras causas posibles son la programación, los dispositivos de destino, la conectividad y el almacenamiento disponible.
Comprobaciones y resolución de problemas
Procedimiento de diagnóstico y reparación
Compruebe las campañas en el portal.
Abra los detalles del dispositivo afectado y la pestaña Campañas publicadas. En las campañas ausentes, compruebe que se dirigen a este dispositivo, están activas y tienen fechas y condiciones de reproducción válidas, incluidos días y horas. Compárelas con la hora real del dispositivo en el paso 3.
Una campaña no programada para este momento no tiene por qué presentar un fallo. Si debería reproducirse y reiniciar no ha ayudado, continúe. Consulte también las guías de Campañas y Dispositivos.
Abra la consola remota.
El dispositivo debe estar en línea y comunicarse con el servidor. La consola remota requiere el rol de Administrador del servidor o superior. Ábrala como se indica en la guía Consola remota. Pegue el comando en el campo de entrada y envíelo con ✓. Pegue cada bloque multilínea completo, incluida la última línea
PY.Una vista previa remota de la pantalla no da acceso a la consola. Si el dispositivo está desconectado, siga primero la guía Comprobación de la conectividad del dispositivo. Si su rol no permite el acceso, solicite a un administrador autorizado que realice estos pasos. Consulte Usuarios y permisos.
Los siguientes comandos son para reproductores Linux con el serviciodevice-runtime.servicey el directorio de trabajo/storage. Los bloques Python requieren Python 3; la prueba de URL requiere curl. Si la consola indica que un comando, servicio o ruta no existe, no continúe con los cambios en archivos. Contacte con soporte.Compruebe la hora, el espacio en disco y el servicio del reproductor.
Comando para copiar:
date df -h / /storage systemctl is-active device-runtime.service ls -lh --time-style=long-iso /storage/playlist /storage/playlist_newQué aparece Qué significa y qué hacer después Fecha y hora Compárelas con la hora local actual y la zona horaria. Una hora incorrecta puede afectar a la selección de campañas y a la conectividad. Espacio libre en la columna Avail Si el almacenamiento está lleno, siga la guía Espacio en disco insuficiente. Compruebe también la partición montada en /storage. activeEl servicio está en ejecución. Esto todavía no confirma que la reproducción sea correcta ni que la actualización haya tenido éxito. inactive,failedo archivos ausentesRevise los registros en el paso 5. No utilice la reparación temporal hasta haber verificado la instalación y la causa. /storage/playlistcontiene la lista de reproducción aceptada actualmente por el reproductor./storage/playlist_newcontiene la nueva lista recibida, cuyos archivos prepara el reproductor antes de activarla. Una fecha más reciente o un tamaño diferente es una pista útil, pero no demuestra por sí solo un fallo. Los archivos pueden diferir temporalmente durante una descarga normal.Compare las campañas de ambas listas de reproducción.
El siguiente bloque lee ambos archivos y muestra el ID numérico del dispositivo, el número de campañas y sus ID, nombres y fechas de validez. No modifica nada. Anote el ID numérico del dispositivo: la cabecera de la consola puede mostrar otro identificador que no debe utilizarse después en DEVICE_ID.
Comando para copiar:
python3 - <<'PY' import json for path in ['/storage/playlist', '/storage/playlist_new']: print('\nARCHIVO:', path) try: with open(path) as f: data = json.load(f) print('Dispositivo:', data.get('deviceId')) campaigns = data.get('campaigns', []) print('Número de campañas:', len(campaigns)) for c in campaigns: print(c.get('campaignId'), c.get('nameCampaign'), 'desde:', c.get('start'), 'hasta:', c.get('end')) except Exception as e: print('ERROR:', e) PYSi la nueva lista contiene las campañas esperadas pero la actual solo contiene una selección antigua, busque un error de preparación en el siguiente paso. Si también faltan en el archivo nuevo, revise los ajustes y la recepción de las actualizaciones del portal. Un error de análisis JSON puede indicar un archivo incompleto o dañado; no lo sobrescriba manualmente sin más comprobaciones.
Localice el error de descarga y compruebe la respuesta del servidor.
Muestre las últimas 120 entradas del registro del servicio de los últimos 20 minutos. Busque errores repetidos, la URL del archivo y su ID. Si solo aparece el final de un error, aumente
-n 120o amplíe el intervalo de tiempo.Comando para copiar:
sudo journalctl -u device-runtime.service --since "20 minutes ago" --no-pager -n 120 -o catSalida de ejemplo: no la pegue en la consola. Ejemplo de un error resuelto con este procedimiento:
https://files.screensoft.org/api/video/H265/1790935600695 java.lang.IllegalStateException: Received 0 bytes ... /storage/video/1790935600695.mp4Received 0 bytes significa que el reproductor no recibió contenido de archivo utilizable. El mensaje por sí solo no explica la causa. En este ejemplo, el ID del archivo es
1790935600695; para su caso, anote el ID y la URL exacta de sus registros.Pegue la dirección exacta de sus registros en el campo resaltado; se insertará automáticamente en el comando. Conserve las comillas. La prueba descarta los datos descargados y no modifica archivos ni listas. No utilice automáticamente la dirección del ejemplo para otro dispositivo.
Pegue la dirección exacta que empieza por https:// o http://. No pegue el mensaje completo ni una ruta /storage/video/…
Falta la URL. La copia del comando está desactivada por ahora.
2. Compruebe la dirección del comando y copie el bloque completo. La dirección se inserta automáticamente.
Comando para editar y copiar:
curl -sS -L --connect-timeout 10 --max-time 30 \ --range 0-1023 --max-filesize 1048576 \ -D - -o /dev/null \ -w '\nHTTP: %{http_code}\nDescargado: %{size_download} bytes\n' \ 'PASTE_MEDIA_URL_HERE'Qué aparece Qué significa y qué hacer después HTTP 404 El servidor no ofrece el archivo en la dirección solicitada. Identifique su campaña en el paso 6 y corríjala en el paso 7. HTTP 401 / 403 El servidor ha denegado el acceso. Revise los permisos y la configuración del servicio con soporte. HTTP 5xx Error del servidor. Investigue el servicio de archivos; eliminar la lista no reparará el servidor. Error de DNS, conexión, tiempo de espera o TLS Siga el error concreto: compruebe la red, la resolución de nombres, la disponibilidad del servidor, la hora o el certificado. No desactive la verificación del certificado. HTTP 200 / 206 y datos no vacíos La prueba ha recibido datos. No confirma que el vídeo completo esté íntegro o pueda reproducirse; busque otros errores en los registros. Límite de tamaño de curl El servidor puede haber ignorado la solicitud de los primeros 1024 bytes. La prueba está limitada a 1 MiB y 30 segundos; alcanzar un límite no significa por sí solo que el archivo sea defectuoso. Localice la campaña por el ID del archivo.
Introduzca primero el ID del archivo. El valor rojo
000es solo un marcador de posición. El bloque busca el valor exacto del camporesourceId, también en las creatividades alternativas, y muestra las campañas coincidentes. Anote sus nombres e ID. Un bloque sin modificar con el valor 000 finaliza de forma segura sin cambiar nada.Utilice el número después de la última barra de la URL del paso 5. No es el ID de campaña ni de dispositivo. Introdúzcalo sin la extensión .mp4.
Falta el ID. No copie todavía el comando.
2. Compruebe la línea resaltada en rojo y copie el comando completo. Al introducir un ID válido, se inserta automáticamente en el comando y se activa el botón Copiar.
Comando para editar y copiar:
python3 - <<'PY' import json RESOURCE_ID = 000 # INTRODUZCA AQUÍ EL ID DEL ARCHIVO if RESOURCE_ID <= 0: raise SystemExit('Introduzca primero el ID del archivo en 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('Campaña:', c.get('nameCampaign')) print('ID de campaña:', c.get('campaignId')) print('Creatividad principal:', c.get('primary')) print('Creatividades alternativos:', c.get('alternative')) if not found: print('Archivo no encontrado en la nueva lista. Compruebe los últimos registros y el ID.') PYSi no se encuentra el archivo, puede haber cambiado entretanto. Vuelva a comprobar los últimos registros y la nueva lista. Si varias campañas utilizan el archivo, corregir una sola puede no bastar; revise todas las coincidencias.
Corrija la campaña en el portal.
Abra la campaña identificada por su nombre e ID. Sustituya el archivo no disponible por uno recién cargado o pause temporalmente la campaña y guarde el cambio. Consulte las guías de Multimedia y Campañas.
Espere a que llegue la lista actualizada y se descarguen sus archivos. El tiempo depende de la conexión y del tamaño. Repita las comprobaciones de los pasos 3 y 4: tras pausar la campaña o sustituir el archivo, la nueva lista ya no debe hacer referencia al archivo defectuoso.
Si el archivo no cambia y mantiene la referencia original, la lista actualizada aún no ha llegado. Compruebe el estado en línea y que se guardó el cambio en el portal. Reiniciar por sí solo no puede recuperar un archivo para el que el servidor sigue devolviendo HTTP 404. Si necesita restablecer temporalmente los demás anuncios, continúe con el paso 8; si no, verifique el resultado en el paso 9.
Reparación local temporal con copia de seguridad.
Procedimiento de mantenimiento: interrumpe brevemente la reproducción. Utilice este procedimiento solo después de confirmar el archivo no disponible y su campaña. El script elimina una campaña completa de la nueva lista, no solo su vídeo. Ejecútelo en el dispositivo correcto cuando sea aceptable una breve interrupción.El script verifica todos los ID, detiene únicamente
device-runtime.service, realiza una copia de ambos archivos en/storage/playlist-backup-DATUM-CAS, elimina la campaña indicada deplaylist_newy vuelve a iniciar el servicio. No sobrescribe directamente la lista actual ni elimina archivos multimedia. Antes de escribir crea una copia; si falla la edición, intenta restaurar la nueva lista original. Si se produce un error dentro del bloque, también intenta reiniciar el servicio, siempre que pueda terminar; no puede gestionar así un corte de alimentación o una finalización forzada.Antes de ejecutarlo, rellene los tres campos siguientes:
DEVICE_ID: ID numérico del dispositivo del paso 4.CAMPAIGN_ID: ID de campaña del paso 6.RESOURCE_ID: ID del archivo no disponible de los registros.
No utilice los ID de ejemplo salvo que se trate exactamente de ese caso. Los valores rojos 000 son una protección: la copia permanece desactivada hasta rellenar todos los ID y el script sin modificar no hace cambios. Debe quedar al menos otra campaña en el dispositivo.
1. Introduzca los tres ID antes de copiarCada número identifica un elemento distinto. Compruébelos con los pasos 4 y 6; no utilice automáticamente los valores de ejemplo.
Del paso 4; no el identificador de la cabecera de la consola.
Del paso 6; no es el ID del archivo.
El mismo ID de archivo comprobado en el paso 6.
Introduzca los tres ID. La copia del comando está desactivada por ahora.
2. Compruebe los tres valores resaltados en rojo y copie el bloque completo. La ejecución interrumpe brevemente la reproducción. El script también comprueba que los ID del dispositivo, la campaña y el archivo coincidan con el contenido de la lista.
Comando para editar y copiar:
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('Introduzca primero los tres ID. No se ha cambiado nada.') 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('El ID del dispositivo no coincide.') 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('La campaña o el archivo no coincide con los ID indicados.') data['campaigns'] = [c for c in data['campaigns'] if c.get('campaignId') != CAMPAIGN_ID] if not data['campaigns']: raise RuntimeError('No quedaría ninguna campaña tras la exclusión.') 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('Copia de seguridad:', backup) print('Campañas conservadas:', len(data['campaigns'])) except Exception: if saved: shutil.copy2(backup / 'playlist_new', path) raise finally: subprocess.run(['systemctl', 'start', service], check=True) PYUna salida correcta incluye la ruta de la copia y el número de campañas conservadas. Guarde la ruta para soporte. Si el script indica que los ID no coinciden, no quite las comprobaciones: vuelva al paso 4 o 6. Si falla la escritura, la restauración o el inicio del servicio, envíe la salida completa a soporte; no sustituya manualmente la lista actual por la nueva.
Esta reparación temporal solo afecta a este dispositivo. No cambia los ajustes del servidor. Una actualización posterior puede volver a enviar la campaña defectuosa. Complete también la corrección del portal del paso 7. Otro archivo ausente puede seguir bloqueando la activación.Verifique la activación de la lista y la reproducción real.
Tras aproximadamente un minuto, compruebe el servicio y los registros; deje más tiempo para archivos grandes. Este bloque no realiza cambios.
Comando para copiar:
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 -50Vuelva a listar las campañas con el comando del paso 4. La lista actual debe contener la nueva selección esperada, el servicio debe estar activo y los registros actuales ya no deben repetir el mismo error de descarga. Que los tamaños coincidan no es prueba suficiente.
Por último, observe la pantalla física o su vista previa remota durante un ciclo publicitario completo. Verifique que se muestran todas las campañas que corresponden según sus condiciones actuales. Ajuste el periodo de observación para campañas programadas o con intervalos entre reproducciones.
Si el problema persiste.
- Aparece otro ID de archivo: repita los pasos 5 y 6 para el nuevo archivo. El bloqueo anterior puede haber ocultado otro.
- La nueva lista no ha llegado: compruebe el estado en línea, el dispositivo de destino y el cambio guardado. Una edición local no demuestra que las actualizaciones del servidor se entreguen correctamente.
- La lista está activa, pero sigue faltando un anuncio: revise las condiciones de programación y otros errores de reproducción. Este procedimiento no soluciona automáticamente todos los fallos de vídeo o programación.
- El servicio no está en ejecución: compruebe su estado con el comando siguiente y envíe el resultado a soporte.
Comando para copiar:
sudo systemctl status device-runtime.service --no-pagerEnvíe a su proveedor el ID del dispositivo, la hora local del problema con la zona horaria, los nombres de las campañas esperadas, ambas listas, el error relevante del registro y el resultado de la prueba de URL. Si realizó la reparación local, incluya su salida y la ruta de la copia. No envíe contraseñas ni credenciales de acceso.
Temas relacionados y siguientes pasos
← Volver a la resolución de problemas
Póngase en contacto con su proveedor de software.
