Enlaces de flota
Un enlace de flota es una URL de Player que coloca en un administrador de dispositivos, como una app kiosco en la consola de Google Admin. Cada dispositivo que la abre se convierte en su propia pantalla en este proyecto, sin código de vinculación. Una organización tiene como máximo 50 enlaces de flota en todos sus proyectos.
Cada nueva pantalla recibe las etiquetas, los campos y la lista de reproducción del enlace, y una etiqueta del dispositivo: su ID de activo de administrador, luego su ubicación, de lo contrario la siguiente etiqueta predeterminada. Un dispositivo mantiene su única pantalla a través de recargas y reinicios. Después de un restablecimiento total o reinstalación, un dispositivo que informa el número de serie o DUID de una pantalla creada por un enlace de flota de este proyecto recupera esa pantalla en lugar de crear otra, una vez que su clave anterior ha estado inactiva durante diez minutos. screen show devuelve fleet_link_id para una pantalla creada por un enlace de flota, y --human imprime Created by fleet link: flk_…. El id. permanece después de eliminar el enlace.
Un enlace puede terminar a la hora que elija: --expires-at le impide crear y recuperar pantallas a partir de entonces, como hace un enlace desactivado, y un dispositivo que lo abre muestra su código de emparejamiento. Las pantallas que creó siguen reproduciendo. fleet-links show --android-provisioning imprime la carga que aprovisiona un dispositivo Android restablecido de fábrica como propietario del dispositivo; consulte Propietario del dispositivo Android con un código QR.
La URL, https://play.screenrig.ai/player/#fleet=srfl_…, es una credencial que crea pantallas. Proporciónela solo al administrador del dispositivo. El secreto viaja en el fragmento de la URL, que los navegadores nunca envían a un servidor. Una credencial solo lectura recibe data.url vacía con url_redacted: true, y la salida humana dice URL: withheld from a Read only credential. De lo contrario, la salida humana imprime la URL bajo una etiqueta Sensitive fleet link URL, y fleet-links list --human nunca la imprime. El CLI verifica una URL devuelta antes de imprimirla: HTTPS, la ruta /player/ y el secreto solo en #fleet=. Retiene una URL que falla la verificación, con la advertencia fleet_link_url_withheld, y mantiene las respuestas de enlace de flota fuera de su registro de operaciones.
| Código de problema | Salir | Significado |
|---|---|---|
fleet_link_limit_reached | 5 | La organización ya tiene 50 enlaces de flota. No se creó nada. Elimine uno primero. |
invalid_request | 8 | Se rechazó un campo, como un --playlist-id que no nombra ninguna lista de reproducción en este proyecto. error.next es playlist list para una lista de reproducción desconocida. |
not_found | 4 | Ningún enlace de flota tiene este ID en el proyecto. |
revision_conflict | 6 | La revisión --expect-rev estaba obsoleta. Ejecute fleet-links show y luego intente de nuevo. |
fleet_link_secret_unavailable | 3 | fleet-links show --android-provisioning no recibió ninguna URL utilizable, como ocurre con una credencial de solo lectura. Un inicio de sesión Manage la recibe. |
fleet-links create#
Crear un enlace de flota y recibir su URL de Player.
fleet-links create --name NAME [--tag TAG]... [--field NAME=VALUE]... [--playlist-id ID] [--max-screens N]
[--expires-at TIME] [--disabled]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--name NAME | string | sí | ninguno | El nombre del enlace, de 1 a 80 caracteres sin caracteres de control. |
--tag TAG | string | no | sin etiquetas | Una etiqueta para cada pantalla nueva, de 1 a 32 letras o dígitos. Repítala o liste etiquetas separadas por comas; máximo 16. |
--field NAME=VALUE | string | no | sin campos | Un campo para cada pantalla nueva, que las tarjetas leen como {screen.field.NAME}. NAME son de 1 a 32 letras minúsculas, dígitos o guiones bajos, y VALUE de 1 a 200 caracteres. Repítalo; como máximo 32. |
--playlist-id ID | string | no | ninguno | La lista de reproducción pl_ asignada a cada pantalla nueva. |
--max-screens N | integer | no | sin límite | El máximo de pantallas que crea el enlace, de 1 a 10000. |
--expires-at TIME | string | no | nunca | Cuándo el enlace deja de crear y recuperar pantallas: una hora RFC 3339 con segundos y zona, como 2026-12-31T23:59:59Z. Una hora ya pasada hace caducar el enlace de inmediato. |
--disabled | boolean | no | apagado | Créelo deshabilitado. No crea pantallas hasta fleet-links update --enable. |
screenrig fleet-links create --name "Lobby displays" --tag Lobby --tag Floor2 --playlist-id pl_01EXAMPLEPLAYLIST000000screenrig fleet-links create --name "Trade show" --field booth=A12 --expires-at 2026-12-31T23:59:59ZEl sobre es el enlace de la flota con su URL de Player en data.url. Ponga esa URL en el administrador de dispositivos. Después de una creación interrumpida o ambigua, vuelva a ejecutar el mismo comando dentro de 24 horas: reutiliza la clave de idempotencia guardada, y el servidor devuelve el mismo enlace en lugar de crear otro.
fleet-links list#
Listar los enlaces de flota de este proyecto, los más antiguos primero.
fleet-links listscreenrig fleet-links listUna credencial de solo lectura recibe cada data.items[].url vacío con url_redacted: true. --human imprime ID, LABEL, ENABLED, SCREENS, TAGS y LAST_USED, añade EXPIRES mientras un enlace listado tiene caducidad y marca con (expired) el que la ha superado, y nunca imprime la URL. SCREENS es el número de pantallas que creó el enlace, o creado/máximo con --max-screens; las recuperaciones no se cuentan.
fleet-links show#
Inspeccionar un enlace de flota y recibir su URL de Player.
fleet-links show <id> [--android-provisioning]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de enlace de flota flk_. |
--android-provisioning | boolean | no | apagado | Imprime el JSON de aprovisionamiento como propietario del dispositivo Android de este enlace en lugar de sus detalles, para codificarlo como código QR en un dispositivo restablecido de fábrica. Contiene el secreto del enlace, así que requiere un inicio de sesión Manage. |
screenrig fleet-links show flk_01EXAMPLELINK0000screenrig fleet-links show flk_01EXAMPLELINK0000 --android-provisioningscreens_created cuenta las pantallas que creó el enlace, y last_used_at es la última vez que creó o recuperó una. expires_at está presente cuando el enlace tiene caducidad, y la salida legible la marca con (expired) una vez pasada.
Con --android-provisioning, data.id y data.provisioning sustituyen los detalles del enlace. El JSON contiene el secreto del enlace: muestre su código QR solo a la persona que está junto al dispositivo. Una credencial de solo lectura no recibe ninguna URL con la que construirlo y obtiene fleet_link_secret_unavailable (salida 3). Propietario del dispositivo Android con un código QR lista la carga.
fleet-links update#
Cambiar lo que un enlace de flota da a las pantallas que crea a partir de ahora.
fleet-links update <id> [--name NAME] [--enable | --disable] [--tag TAG]... [--clear-tags]
[--field NAME=VALUE]... [--clear-fields]
[--playlist-id ID | --clear-playlist] [--max-screens N | --clear-max-screens]
[--expires-at TIME | --clear-expires-at] [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de enlace de flota flk_. |
--name NAME | string | al menos un cambio | sin cambios | De 1 a 80 caracteres. |
--enable | boolean | al menos un cambio | apagado | El enlace crea y recupera pantallas nuevamente. |
--disable | boolean | al menos un cambio | apagado | El enlace no crea ni recupera pantallas; un dispositivo que lo abre muestra su código de asociación en su lugar. |
--tag TAG | string | al menos un cambio | sin cambios | Reemplaza todo el conjunto de etiquetas. Repítalo o liste etiquetas separadas por comas; máximo 16. |
--clear-tags | boolean | al menos un cambio | apagado | Las nuevas pantallas no reciben etiquetas. |
--field NAME=VALUE | string | al menos un cambio | sin cambios | Reemplaza todo el conjunto de campos, como en fleet-links create. Repítalo; como máximo 32. |
--clear-fields | boolean | al menos un cambio | apagado | Las pantallas nuevas no reciben campos. |
--playlist-id ID | string | al menos un cambio | sin cambios | La lista de reproducción pl_ para pantallas nuevas. |
--clear-playlist | boolean | al menos un cambio | apagado | Las nuevas pantallas no reciben lista de reproducción. |
--max-screens N | integer | al menos un cambio | sin cambios | La mayoría de pantallas que el enlace crea en total, de 1 a 10000. |
--clear-max-screens | boolean | al menos un cambio | apagado | Eliminar el límite. |
--expires-at TIME | string | al menos un cambio | sin cambios | Establece o mueve la caducidad: una hora RFC 3339 con segundos y zona. Una hora ya pasada hace caducar el enlace de inmediato. |
--clear-expires-at | boolean | al menos un cambio | apagado | Quita la caducidad; el enlace nunca caduca. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. |
screenrig fleet-links update flk_01EXAMPLELINK0000 --playlist-id pl_01EXAMPLEPLAYLIST000000update cambia solo los campos que pase, y solo para pantallas que el enlace cree a partir de ahora. Las pantallas ya creadas mantienen sus etiquetas, lista de reproducción y etiqueta. Un enlace caducado se comporta como uno desactivado hasta que su caducidad se mueva o se elimine. La URL no cambia; use rotate para reemplazarla.
fleet-links rotate#
Reemplazar la URL de un enlace de flota y recibir la nueva.
fleet-links rotate <id> [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de enlace de flota flk_. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. |
screenrig fleet-links rotate flk_01EXAMPLELINK0000El sobre lleva la nueva URL en data.url. La URL antigua deja de funcionar de inmediato: un dispositivo que la abre muestra su código de vinculación. Las pantallas que ya crearon el enlace siguen reproduciéndose, porque un Player vinculado nunca presenta el enlace de nuevo. Ponga la nueva URL en el administrador de dispositivos. Tras una rotación interrumpida o ambigua, vuelva a ejecutar el mismo comando: reutiliza la clave de idempotencia guardada, y el servidor devuelve la rotación que ya ocurrió en lugar de rotar de nuevo.
fleet-links delete#
Eliminar un enlace de flota. Su URL deja de funcionar de inmediato y las pantallas que creó permanecen.
fleet-links delete <id> [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de enlace de flota flk_. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. |
screenrig fleet-links delete flk_01EXAMPLELINK0000Las pantallas cuyo enlace se creó mantienen sus listas de reproducción y etiquetas.
Migración
migrate traslada al proyecto los medios, las listas de reproducción, los diseños, las programaciones y las pantallas de su plataforma de señalización anterior. Se ejecuta en el CLI de su equipo: la clave de la plataforma se lee de un --credentials FILE de líneas NAME=VALUE, va solo a esa plataforma y nunca se almacena, imprime, registra ni envía a screenRIG, que ve escrituras ordinarias de medios, listas de reproducción, enlaces de flota, campañas y pantallas. migrate vendors lista las plataformas que lee, y la alternativa files lee una carpeta o .zip de medios de cualquier otra plataforma.
Siga los pasos en orden: migrate vendors (lo que admite una plataforma), migrate scan (lee la cuenta e informa de lo que se puede y no se puede migrar; no requiere inicio de sesión en screenRIG), migrate apply --dry-run (el plan), migrate apply (requiere acceso Manage), y luego migrate pair para cada pantalla.
--dir DIR es el directorio de migración, ./screenrig-migration-VENDOR por defecto, creado con el modo 0700. Contiene scan.json (el escaneo y su informe), map.json (en qué objeto se convirtió cada elemento anterior, vinculado a esta URL de API, proyecto, proveedor y cuenta de origen) y staging/ (descargas en curso). apply y pair usan el único directorio screenrig-migration-* del directorio de trabajo, o aceptan --dir; solo una de ellas se ejecuta a la vez en un directorio.
| Código de problema | Salir | Significado |
|---|---|---|
migration_dir_mismatch | 2 | El directorio se creó para otro proyecto, URL de API, proveedor o cuenta de origen. Use otro --dir. |
vendor_refused | 3 | La plataforma rechazó la clave. Cree una clave de solo lectura (migrate vendors VENDOR indica cómo), corrija el archivo --credentials y ejecute el mismo comando de nuevo. |
vendor_not_found | 4 | La plataforma respondió 404. Lo habitual es que --url sea incorrecto. |
vendor_rate_limited | 7 | La plataforma está limitando la frecuencia de la clave. Ejecute el comando de nuevo más tarde. |
vendor_file_gone | 8 | La dirección de un archivo multimedia caducó o está protegida. Ejecutar migrate scan de nuevo la renueva, y --files proporciona un archivo que sigue fallando. |
vendor_file_stalled | 8 | Una descarga de medios dejó de responder. Ejecute apply de nuevo. |
vendor_bad_response | 9 | La plataforma envió una respuesta que el CLI no puede usar. |
vendor_unavailable | 9 o 10 | No se pudo acceder a la plataforma o siguió fallando. |
migrate vendors#
Lista las plataformas que lee migrate, lo que admite cada una y cómo crear su clave de solo lectura.
migrate vendors [VENDOR]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
VENDOR | string | no | cada plataforma | El id de una plataforma. Un id que no figura en la lista es usage_error (salida 2), que nombra los ids que existen. |
screenrig migrate vendors
screenrig migrate vendors filesFunciona sin conexión y no requiere inicio de sesión. data.vendors contiene, para cada plataforma, su id y name; inputs, con las flags que admite (cada una con flag y required, y values para una región) y las líneas credentials que contiene su archivo de clave (name, secret, required y help); connect, los pasos para crear una clave de solo lectura; maps, lo que se migra; skips, lo que no; docs; y example, un comando migrate scan que funciona. Las plataformas se ordenan por id con files al final. files acepta una carpeta o .zip y una zona horaria opcional, y no necesita clave.
migrate scan#
Lee una cuenta de señalización e informa de lo que se puede y no se puede migrar. Escribe scan.json y no envía nada a screenRIG.
migrate scan --from VENDOR [--url ADDRESS] [--region REGION] [--timezone ZONE] [--files PATH]
[--credentials FILE] [--dir DIR]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--from VENDOR | string | sí | ninguno | La plataforma que se lee: un id de migrate vendors, o files. |
--url ADDRESS | string | por plataforma | ninguno | La dirección de una plataforma autoalojada. |
--region REGION | string | por plataforma | ninguno | La región de una cuenta alojada, para una plataforma que tiene regiones. |
--timezone ZONE | string | no | ninguno | Un nombre de zona horaria IANA como America/Toronto, que se establece en cada pantalla cuya plataforma antigua no nombra ninguna. Sin él, una pantalla sigue la zona que informa su Player. |
--files PATH | ruta | por plataforma | ninguno | Una carpeta o .zip. Con --from files contiene los medios; con otra plataforma contiene los originales que la API de esa plataforma no puede entregar, emparejados con sus medios por nombre de archivo. |
--credentials FILE | ruta | por plataforma | ninguno | El archivo de clave: líneas NAME=VALUE con los nombres que lista migrate vendors VENDOR. Se omiten las líneas en blanco y los comentarios #, y un valor puede ir entre un par de comillas. Un nombre obligatorio que falta en el archivo es usage_error (salida 2), que lo nombra. |
--dir DIR | ruta | no | ./screenrig-migration-VENDOR | El directorio de migración. |
screenrig migrate scan --from files --files ./signage-media
screenrig migrate scan --from files --files ./signage-media.zip --dir ./old-signage --timezone America/TorontoUna opción que la plataforma no admite, o una que necesita y falta, es usage_error (salida 2) y nombra lo que la plataforma admite. Ninguna opción recibe la clave en sí. Un escaneo nuevo reemplaza scan.json y conserva map.json, y sale con 0 cuando termina, aunque algunos elementos no puedan migrarse.
data es el informe: vendor, label, scanned_at, found y importable (conteos de media, playlists, layouts, schedules, groups y screens), not_imported (cada uno con kind, source_id, name, un reason y normalmente un paso next), lossy (cada uno con kind, source_id, name y el change que ocurre por el camino), notes, dir y scan_file. Un archivo que la plataforma entrega se descarga en apply. Un archivo que no entrega, o que entrega solo como copia recodificada, se empareja por nombre en --files; si no hay coincidencia, o hay varias, aparece en not_imported o lossy con el paso que lo corrige.
--from files no necesita clave. Lee cada archivo de imagen, video y audio por su contenido, no por su extensión. Un playlists.csv opcional en la raíz tiene las columnas playlist, file (una ruta o un nombre de archivo único), duration (segundos) y order; sin él, cada carpeta que contiene medios se convierte en una lista de reproducción en orden natural de nombre de archivo, y los archivos de la raíz forman una que lleva el nombre de la carpeta o del zip. Un screens.csv opcional tiene name, group (varios separados por ;), playlist y timezone, y cada fila se convierte en una pantalla en espera con sus grupos como etiquetas. Los demás archivos y las entradas de zip cifradas están en not_imported. Un escaneo de files no tiene programaciones: créelas con campaign create cuando existan las listas de reproducción.
migrate apply#
Importa lo que encontró el escaneo: medios, listas de reproducción y diseños, pantallas en espera y campañas. Se puede volver a ejecutar sin riesgo.
migrate apply [--dir DIR] [--dry-run] [--only KINDS] [--folder ID] [--canvas WIDTHxHEIGHT]
[--credentials FILE] [--concurrency N] [--no-transcode]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--dir DIR | ruta | no | el único directorio ./screenrig-migration-* | El directorio de migración que contiene scan.json. |
--dry-run | boolean | no | apagado | Lee el proyecto e imprime el plan. No escribe nada y no necesita clave. |
--only KINDS | string | no | los cuatro | Separados por comas, cada uno como máximo una vez: media, playlists, screens, schedules. |
--folder ID | string | no | una carpeta de medios nueva llamada Imported from y el nombre de la plataforma | Una carpeta de medios existente (mfd_…) para los medios importados. |
--canvas WIDTHxHEIGHT | string | no | 1920x1080 | El lienzo de las listas de reproducción simples, con cada lado de al menos 16 píxeles. Un diseño conserva su propio tamaño. |
--credentials FILE | ruta | no | ninguno | El archivo de clave, que se lee solo cuando se descarga un archivo multimedia de la plataforma. |
--concurrency N | integer | no | 4 | Medios importados a la vez, de 1 a 8. |
--no-transcode | boolean | no | apagado | Suba los bytes de origen sin cambios, como hace media upload. |
screenrig migrate apply --dry-run
screenrig migrate apply --dir ./screenrig-migration-files
screenrig migrate apply --only media,playlists --concurrency 2apply importa en orden: los medios en una carpeta, las listas de reproducción y los diseños, una pantalla en espera por cada pantalla anterior y una campaña por cada programación que las campañas pueden expresar. Solo vuelve a leer la plataforma para descargar archivos multimedia. Una lista de reproducción tiene una página por elemento: las imágenes y los videos llenan el lienzo, una dirección web se convierte en una página iframe, el audio se convierte en la banda sonora y una lista de reproducción anidada se incorpora en línea. Un diseño se convierte en una lista de reproducción en su propio lienzo, con una página por cada elemento de su zona principal. Una programación que se repite por mes, año, hora o minuto, o en un día de la semana numerado del mes, no puede convertirse en campaña: scan la lista en not_imported.
--dry-run lee solo el proyecto y responde data.plan (para media, playlists, layouts, screens y schedules: conteos create, reuse, recreate, waiting y fail), data.items, data.bytes por descargar, conteos data.placeholders y data.project, los enlaces de flota y las campañas en uso frente a sus máximos de 50 y 100. El progreso va a stderr como líneas JSON (migrate_progress con phase, done y total), o como texto con --human. Una nueva ejecución reutiliza lo que aún existe, vuelve a crear lo que haya eliminado y nunca cambia lo que creó. Una ejecución real responde data.applied (los mismos conteos), data.waiting (elementos que esperan a un medio o a una lista de reproducción que no está importada, cada uno con un reason), data.failed, data.placeholders (una entrada por pantalla anterior con su source_id, name y state: linked, unlinked, paired, finished o waiting), data.tags y data.folder_id.
Un grupo se convierte en una etiqueta formada por letras y dígitos, numerada cuando coincide con una etiqueta que lleva otra pantalla. Una campaña apunta a las etiquetas de los grupos y las pantallas que nombra su programación, con sus fechas, días, horas y prioridad. Una campaña lee sus fechas y horas en la zona horaria propia de cada pantalla y necesita una lista de reproducción predeterminada (no_default_playlist): scan indica las pantallas que carecen de ella, y screen assign la establece tras la vinculación.
Una pantalla en espera es un enlace de flota de una sola pantalla que lleva el nombre anterior, los grupos como etiquetas y la lista de reproducción. Una organización tiene como máximo 50 enlaces de flota entre todos sus proyectos; el resto aparece como unlinked en data.placeholders y espera un código de Player (migrate pair). Un Player que abre un enlace se convierte en una pantalla, y volver a ejecutar apply le da el nombre anterior y la zona horaria y elimina el enlace. apply nunca imprime la URL de un enlace de flota: fleet-links show sí.
Un elemento que falla conserva ok true con data.failed (cada uno con key, name, code, status y detail) y la advertencia migration_items_failed; los elementos que dependen de él esperan, y el código de salida sigue el estado del último fallo. Un archivo multimedia que falla por sí solo (una dirección caducada, una respuesta que no es un archivo, una descarga que deja de responder) hace fallar únicamente ese medio; para una dirección caducada, ejecute migrate scan de nuevo. Un rechazo que se repetiría en todos los elementos (quota_exceeded, campaign_limit_reached, insufficient_access, pending_review, la plataforma que rechaza la clave, una conexión perdida) termina la ejecución con data.stopped (code, detail y next) y el código de salida de ese problema. Corrija la causa y ejecute el mismo comando de nuevo: continúa donde se detuvo.
migrate pair#
Vincula un código de Player a una pantalla en espera, con su nombre anterior, lista de reproducción, zona horaria y etiquetas.
migrate pair <CODE...> --screen ID_OR_NAME [--dir DIR]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<CODE...> | string | sí | ninguno | El código que muestra el Player, como ABC 234: seis caracteres de 23456789ABCDEFGHJKMNPQRSTUVWXYZ, en mayúsculas o minúsculas. Los espacios y guiones entre ellos se ignoran, así que no necesita comillas. |
--screen ID_OR_NAME | string | sí | ninguno | La pantalla en espera: su id de origen o su nombre anterior exacto. Un nombre que comparten dos pantallas lista sus ids. |
--dir DIR | ruta | no | el único directorio ./screenrig-migration-* | El directorio de migración. |
screenrig migrate pair ABC 234 --screen "Front desk"
screenrig migrate pair ABC234 --screen 3 --dir ./old-signageEjecute primero migrate apply: la vinculación necesita el mapa y la lista de reproducción que creó. pair reclama el código para la pantalla con su nombre anterior, establece su lista de reproducción, zona horaria y campo migrated_from, establece sus etiquetas, elimina el enlace de la pantalla en espera y registra el resultado. data contiene source_id, name, screen_id, steps (paired, updated, tagged, link deleted, recorded), next y, cuando esta ejecución reclamó el código, public_url. Cada paso se registra al completarse, así que una nueva ejecución termina lo que dejó una vinculación interrumpida. Una pantalla que ya está vinculada es resource_conflict (salida 5), que la nombra. El Player termina de vincularse la próxima vez que contacta con el servicio; screen show informa entonces state active.