设备组链接
车队链接是一个播放器 URL,你可以将其放入设备管理器,如 Google 管理控制台中的自助服务应用。每个打开它的设备都会成为此项目中的独立屏幕,无需配对码。每个组织跨其所有项目最多有 50 个车队链接。
每个新屏幕会继承链接的标签、字段和播放列表,并从设备获取标签:优先管理员资产 ID,其次为位置,否则使用下一个默认标签。设备在重新加载和重启时保持其唯一屏幕。恢复出厂或重装后,设备如报告序列号或 DUID 且该屏幕为本项目批量链接创建,则在旧密钥静默十分钟后恢复该屏幕,不会新建。screen show 为批量链接创建的屏幕返回 fleet_link_id,--human 打印 Created by fleet link: flk_…。删除链接后 id 仍保留。
链接可以在您选定的时间结束:--expires-at 会让它从该时间起不再创建和恢复屏幕,与已停用的链接相同,打开它的设备会显示配对码。它已创建的屏幕继续播放。fleet-links show --android-provisioning 会打印用于将恢复出厂设置的 Android 设备配置为设备所有者的载荷;参见通过二维码设置 Android 设备所有者。
URL https://play.screenrig.ai/player/#fleet=srfl_… 是创建屏幕的凭据。仅提供给设备管理员。密钥在 URL 片段中,浏览器不会发送给服务器。只读凭据接收空的 data.url 和 url_redacted: true,随后人工输出显示 URL: withheld from a Read only credential。否则人工输出在 Sensitive fleet link URL 标签下打印 URL,fleet-links list --human 不打印。CLI 在打印前检查返回 URL:HTTPS、/player/ 路径,密钥仅在 #fleet=。检查失败则不打印 URL,显示警告 fleet_link_url_withheld,并将车队链接答案排除在操作日志外。
| 问题代码 | 退出 | 含义 |
|---|---|---|
fleet_link_limit_reached | 5 | 组织已有 50 个车队链接。未创建任何内容。请先删除一个。 |
invalid_request | 8 | 字段被拒绝,例如 --playlist-id,该字段在此项目中未命名播放列表。error.next 对于未知播放列表为 playlist list。 |
not_found | 4 | 项目中无此 ID 的车队链接。 |
revision_conflict | 6 | --expect-rev 版本已过时。运行 fleet-links show,然后重试。 |
fleet_link_secret_unavailable | 3 | fleet-links show --android-provisioning 未收到可用的 URL,只读凭据也是如此。Manage 登录可以收到。 |
fleet-links create#
创建车队链接并获取其播放器 URL。
fleet-links create --name NAME [--tag TAG]... [--field NAME=VALUE]... [--playlist-id ID] [--max-screens N]
[--expires-at TIME] [--disabled]| 参数 | 类型 | 必填 | 默认 | 备注 |
|---|---|---|---|---|
--name NAME | string | 是 | 无 | 链接名称,1至80字符,无控制字符。 |
--tag TAG | string | 否 | 无标签 | 每个新屏幕的标签,1 到 32 个字母或数字。重复或逗号分隔标签;最多 16 个。 |
--field NAME=VALUE | string | 否 | 无字段 | 每个新屏幕的一个字段,卡片通过 {screen.field.NAME} 读取。NAME 为 1 到 32 个小写字母、数字或下划线,VALUE 为 1 到 200 个字符。可重复;最多 32 个。 |
--playlist-id ID | string | 否 | 无 | 分配给每个新屏幕的 pl_ 播放列表。 |
--max-screens N | integer | 否 | 无限制 | 链接最多创建的屏幕数,1至10000。 |
--expires-at TIME | string | 否 | 永不 | 链接停止创建和恢复屏幕的时间:带秒和时区的 RFC 3339 时间,例如 2026-12-31T23:59:59Z。已经过去的时间会让链接立即过期。 |
--disabled | boolean | 否 | 关闭 | 创建时禁用。直到 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:59Z信封是舰队链接,包含其播放器 URL 于 data.url。请将该 URL 放入设备管理器。中断或模糊创建后,24 小时内重新运行相同命令:它会重用保存的幂等键,服务器返回相同链接而非创建新链接。
fleet-links list#
列出该项目的车队链接,最旧优先。
fleet-links listscreenrig fleet-links list只读凭据接收每个 data.items[].url 为空,带 url_redacted: true。--human 打印 ID、LABEL、ENABLED、SCREENS、TAGS 和 LAST_USED;只要列表中有链接设有到期时间就会增加 EXPIRES 列,并将已过期的标记为 (expired),且从不打印 URL。SCREENS 是链接创建的屏幕数,或创建数/最大数带 --max-screens;恢复不计数。
fleet-links show#
检查车队链接并获取其播放器 URL。
fleet-links show <id> [--android-provisioning]| 参数 | 类型 | 必填 | 默认 | 备注 |
|---|---|---|---|---|
<id> | string | 是 | 无 | flk_ 车队链接 ID。 |
--android-provisioning | boolean | 否 | 关闭 | 不打印此链接的详细信息,而是打印其 Android 设备所有者配置 JSON,可编码为二维码供恢复出厂设置的设备使用。其中包含链接的密钥,因此需要 Manage 登录。 |
screenrig fleet-links show flk_01EXAMPLELINK0000screenrig fleet-links show flk_01EXAMPLELINK0000 --android-provisioningscreens_created 统计该链接已创建的屏幕数量,last_used_at 是其最近一次创建或恢复屏幕的时间。链接设有到期时间时会出现 expires_at,到期后人类可读输出会将其标记为 (expired)。
使用 --android-provisioning 时,data.id 和 data.provisioning 会取代该链接的详细信息。该 JSON 包含链接的密钥:二维码只能展示给设备旁边的人。只读凭据收不到用于构建它的 URL,会得到 fleet_link_secret_unavailable(退出码 3)。载荷见通过二维码设置 Android 设备所有者。
fleet-links update#
更改从现在起 fleet 链接为其创建的屏幕提供的内容。
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]| 参数 | 类型 | 必填 | 默认 | 备注 |
|---|---|---|---|---|
<id> | string | 是 | 无 | flk_ 车队链接 ID。 |
--name NAME | string | 至少有一处更改 | 未更改 | 1 到 80 个字符。 |
--enable | boolean | 至少有一处更改 | 关闭 | 链接再次创建和恢复屏幕。 |
--disable | boolean | 至少有一处更改 | 关闭 | 链接不创建或恢复屏幕;打开设备显示其配对码。 |
--tag TAG | string | 至少有一处更改 | 未更改 | 替换整个标签集。重复操作或用逗号分隔标签;最多16个。 |
--clear-tags | boolean | 至少有一处更改 | 关闭 | 新屏幕无标签。 |
--field NAME=VALUE | string | 至少有一处更改 | 未更改 | 替换整个字段集,方式与 fleet-links create 相同。可重复;最多 32 个。 |
--clear-fields | boolean | 至少有一处更改 | 关闭 | 新屏幕没有字段。 |
--playlist-id ID | string | 至少有一处更改 | 未更改 | 新屏幕的 pl_ 播放列表。 |
--clear-playlist | boolean | 至少有一处更改 | 关闭 | 新屏幕无播放列表。 |
--max-screens N | integer | 至少有一处更改 | 未更改 | 链接最多创建的屏幕数,1至10000。 |
--clear-max-screens | boolean | 至少有一处更改 | 关闭 | 移除限制。 |
--expires-at TIME | string | 至少有一处更改 | 未更改 | 设置或调整到期时间:带秒和时区的 RFC 3339 时间。已经过去的时间会让链接立即过期。 |
--clear-expires-at | boolean | 至少有一处更改 | 关闭 | 移除到期时间;该链接永不过期。 |
--expect-rev REVISION | string | 否 | 无 | 可选修订前提条件。 |
screenrig fleet-links update flk_01EXAMPLELINK0000 --playlist-id pl_01EXAMPLEPLAYLIST000000update 只会更改您传递的字段,并且仅对之后通过该链接创建的屏幕生效。已创建的屏幕会保留其标签、播放列表和标签名。已过期的链接在其到期时间被调整或清除之前,表现与已停用的链接相同。URL 不变;如需替换请使用 rotate。
fleet-links rotate#
替换车队链接的URL并接收新链接。
fleet-links rotate <id> [--expect-rev REVISION]| 参数 | 类型 | 必填 | 默认 | 备注 |
|---|---|---|---|---|
<id> | string | 是 | 无 | flk_ 车队链接 ID。 |
--expect-rev REVISION | string | 否 | 无 | 可选修订前提条件。 |
screenrig fleet-links rotate flk_01EXAMPLELINK0000信封在 data.url 中携带新 URL。旧 URL 立即失效:打开它的设备会显示其配对码。已创建链接的屏幕继续播放,因为配对的播放器不会再次展示该链接。请在设备管理器中更新新 URL。轮换被中断或结果不明时,请重新运行相同命令:它会重用已保存的幂等键,服务器返回已经发生的那次轮换,而不是再轮换一次。
fleet-links delete#
删除车队链接。其 URL 立即停止工作,且其创建的屏幕保持不变。
fleet-links delete <id> [--expect-rev REVISION]| 参数 | 类型 | 必填 | 默认 | 备注 |
|---|---|---|---|---|
<id> | string | 是 | 无 | flk_ 车队链接 ID。 |
--expect-rev REVISION | string | 否 | 无 | 可选修订前提条件。 |
screenrig fleet-links delete flk_01EXAMPLELINK0000通过链接创建的屏幕保留其播放列表和标签。
Migrate
migrate 将你之前的标牌平台的媒体、播放列表、布局、排程和屏幕迁入项目。它在你机器上的 CLI 中运行:平台的密钥从 --credentials FILE(由 NAME=VALUE 行组成)中读取,只发送给该平台,绝不会被存储、打印、记录或发送给 screenRIG;screenRIG 看到的只是普通的媒体、播放列表、车队链接、活动和屏幕写入。migrate vendors 列出它所读取的平台,files 后备方式则读取来自任何其他平台的媒体文件夹或 .zip。
按顺序运行这些步骤:migrate vendors(平台接受的内容)、migrate scan(读取账号并报告哪些内容可以迁入、哪些不能;无需登录 screenRIG)、migrate apply --dry-run(计划)、migrate apply(需要 Manage 访问权限),然后对每块屏幕运行 migrate pair。
--dir DIR 是迁移目录,默认为 ./screenrig-migration-VENDOR,以模式 0700 创建。其中包含 scan.json(扫描及其报告)、map.json(每个旧项目变成了哪个对象,绑定到此 API URL、项目、服务商和源账号)和 staging/(进行中的下载)。apply 和 pair 使用工作目录中唯一的 screenrig-migration-* 目录,或接受 --dir;同一时间一个目录中只运行其中一个。
| 问题代码 | 退出 | 含义 |
|---|---|---|
migration_dir_mismatch | 2 | 该目录是为另一个项目、API URL、服务商或源账号创建的。请使用另一个 --dir。 |
vendor_refused | 3 | 平台拒绝了该密钥。请生成只读密钥(migrate vendors VENDOR 会说明方法),修正 --credentials 文件,然后再次运行同一命令。 |
vendor_not_found | 4 | 平台返回了 404。通常是 --url 有误。 |
vendor_rate_limited | 7 | 平台正在对该密钥限速。请稍后再次运行该命令。 |
vendor_file_gone | 8 | 媒体文件地址已过期或受保护。再次运行 migrate scan 会刷新它,--files 可为仍然失败的文件提供文件。 |
vendor_file_stalled | 8 | 媒体下载无响应。再次运行 apply。 |
vendor_bad_response | 9 | 平台返回了 CLI 无法使用的响应。 |
vendor_unavailable | 9 或 10 | 无法连接平台,或平台持续失败。 |
migrate vendors#
列出 migrate 读取的平台、每个平台接受的内容,以及如何生成其只读密钥。
migrate vendors [VENDOR]| 参数 | 类型 | 必填 | 默认 | 备注 |
|---|---|---|---|---|
VENDOR | string | 否 | 所有平台 | 一个平台的 id。它未列出的 id 会返回 usage_error(退出码 2),并指明存在的 id。 |
screenrig migrate vendors
screenrig migrate vendors files它离线工作,无需登录。data.vendors 为每个平台列出其 id 和 name;inputs,含其接受的 flags(每个带有 flag 和 required,区域另带 values)以及其密钥文件包含的 credentials 行(name、secret、required 和 help);connect,即生成只读密钥的步骤;maps,即可迁入的内容;skips,即无法迁入的内容;docs;以及 example,一条可用的 migrate scan 命令。平台按 id 排序,files 排在最后。files 接受文件夹或 .zip 以及可选的时区,无需密钥。
migrate scan#
读取数字标牌账号,并报告哪些内容可以迁入、哪些不能。它写入 scan.json,不向 screenRIG 发送任何内容。
migrate scan --from VENDOR [--url ADDRESS] [--region REGION] [--timezone ZONE] [--files PATH]
[--credentials FILE] [--dir DIR]| 参数 | 类型 | 必填 | 默认 | 备注 |
|---|---|---|---|---|
--from VENDOR | string | 是 | 无 | 要读取的平台:来自 migrate vendors 的 id,或 files。 |
--url ADDRESS | string | 每个平台 | 无 | 自托管平台的地址。 |
--region REGION | string | 每个平台 | 无 | 托管账号的区域,适用于有区域划分的平台。 |
--timezone ZONE | string | 否 | 无 | IANA 时区名称,例如 America/Toronto,为旧平台未指明时区的每个屏幕设置。未设置时,屏幕沿用其播放器报告的时区。 |
--files PATH | 路径 | 每个平台 | 无 | 文件夹或 .zip。使用 --from files 时,它包含媒体;使用其他平台时,它包含该平台 API 无法提供的原始文件,并按文件名与其媒体匹配。 |
--credentials FILE | 路径 | 每个平台 | 无 | 密钥文件:带有 migrate vendors VENDOR 所列名称的 NAME=VALUE 行。空行和 # 注释会被跳过,值可以放在一对引号中。文件中缺少必需的名称会返回 usage_error(退出码 2),并指明该名称。 |
--dir DIR | 路径 | 否 | ./screenrig-migration-VENDOR | 迁移目录。 |
screenrig migrate scan --from files --files ./signage-media
screenrig migrate scan --from files --files ./signage-media.zip --dir ./old-signage --timezone America/Toronto平台不接受的标志,或平台需要却缺失的标志,会返回 usage_error(退出码 2),并指明平台接受什么。没有任何标志接受密钥本身。新的扫描会替换 scan.json 并保留 map.json,完成时退出 0,即使某些项目无法迁入。
data 是报告:vendor、label、scanned_at、found 和 importable(media、playlists、layouts、schedules、groups 和 screens 的计数)、not_imported(每项含 kind、source_id、name、一个 reason,通常还有一个 next 步骤)、lossy(每项含 kind、source_id、name 以及途中发生的 change)、notes、dir 和 scan_file。平台提供的文件在 apply 下载。平台不提供的文件,或只提供重新编码副本的文件,会在 --files 中按名称匹配;没有匹配或匹配到多个时,它会连同修复步骤列在 not_imported 或 lossy 中。
--from files 不需要密钥。它按内容而非扩展名识别每个图片、视频和音频文件。根目录下可选的 playlists.csv 含有列 playlist、file(路径或唯一的文件名)、duration(秒)和 order;没有它时,每个包含媒体的文件夹成为一个播放列表,按文件名自然顺序排列,根目录下的文件组成一个以该文件夹或 zip 命名的播放列表。可选的 screens.csv 含有 name、group(多个以 ; 分隔)、playlist 和 timezone,每一行成为一个待配对屏幕,其分组成为标签。其他文件和加密的 zip 条目列在 not_imported 中。files 扫描没有排程:播放列表存在后,用 campaign create 创建排程。
migrate apply#
导入扫描发现的内容:媒体、播放列表和布局、待配对屏幕和活动。可安全地重新运行。
migrate apply [--dir DIR] [--dry-run] [--only KINDS] [--folder ID] [--canvas WIDTHxHEIGHT]
[--credentials FILE] [--concurrency N] [--no-transcode]| 参数 | 类型 | 必填 | 默认 | 备注 |
|---|---|---|---|---|
--dir DIR | 路径 | 否 | 唯一的 ./screenrig-migration-* 目录 | 包含 scan.json 的迁移目录。 |
--dry-run | boolean | 否 | 关闭 | 读取项目并打印计划。它不写入任何内容,也不需要密钥。 |
--only KINDS | string | 否 | 全部四项 | 以逗号分隔,每个至多出现一次:media、playlists、screens、schedules。 |
--folder ID | string | 否 | 以 Imported from 和平台名称命名的新文件夹 | 用于导入媒体的现有媒体文件夹(mfd_…)。 |
--canvas WIDTHxHEIGHT | string | 否 | 1920x1080 | 普通播放列表的画布,每边至少 16 像素。布局保持其自身尺寸。 |
--credentials FILE | 路径 | 否 | 无 | 密钥文件,仅在从平台下载媒体文件时读取。 |
--concurrency N | integer | 否 | 4 | 同时导入的媒体数量,1 到 8。 |
--no-transcode | boolean | 否 | 关闭 | 上传源字节,不做更改,如 media upload 所示。 |
screenrig migrate apply --dry-run
screenrig migrate apply --dir ./screenrig-migration-files
screenrig migrate apply --only media,playlists --concurrency 2apply 按顺序导入:媒体导入同一个文件夹,然后是播放列表和布局,每个旧屏幕对应一个待配对屏幕,每个 活动能够表达的排程对应一个活动。它只在下载媒体文件时再次读取该平台。播放列表的每个项目对应一个页面:图片和视频铺满画布,网页地址变为 iframe 页面,音频变为配乐,嵌套的播放列表会被内联展开。布局变为位于其自身画布上的播放列表,其主区域的每个项目对应一个页面。按月、年、小时或分钟重复的排程,或按当月第几个星期几重复的排程,无法成为活动:scan 将其列在 not_imported 中。
--dry-run 只读取项目,并返回 data.plan(对于 media、playlists、layouts、screens 和 schedules:create、reuse、recreate、waiting 和 fail 计数)、data.items、待下载的 data.bytes、data.placeholders 计数和 data.project,即正在使用的车队链接和活动与其上限 50 和 100 的对比。进度以 JSON 行的形式输出到 stderr(带有 phase、done 和 total 的 migrate_progress),使用 --human 时则为文本。重新运行会复用仍然存在的内容,重新创建你删除的任何内容,并且绝不会更改它已创建的内容。真正运行时返回 data.applied(相同的计数)、data.waiting(等待尚未导入的媒体或播放列表的项目,每项带有一个 reason)、data.failed、data.placeholders(每个旧屏幕一条,含其 source_id、name 和 state:linked、unlinked、paired、finished 或 waiting)、data.tags 和 data.folder_id。
分组变为由字母和数字组成的标签,与其他屏幕已有的标签冲突时会加编号。活动以其排程所指名的分组和屏幕的标签为目标,并带有其日期、星期、小时和优先级。活动按每个屏幕自己的时区读取其日期和小时,并需要默认播放列表(no_default_playlist):scan 会注明缺少它的屏幕,配对后用 screen assign 设置。
待配对屏幕是一块屏幕的车队链接,携带旧名称、作为标签的分组和播放列表。一个组织在其所有项目中最多持有 50 个车队链接;其余的在 data.placeholders 中为 unlinked,等待播放器代码(migrate pair)。打开链接的播放器会成为屏幕,再次运行 apply 会赋予它旧名称和时区并删除该链接。apply 从不打印车队链接 URL:fleet-links show 会打印。
失败的项目保留 ok true,带有 data.failed(每项含 key、name、code、status 和 detail)以及警告 migration_items_failed;依赖它的项目会等待,退出码取决于最后一次失败的状态。单独失败的媒体文件(地址过期、响应不是文件、下载无响应)只会使该媒体失败;地址过期时请再次运行 migrate scan。对每个项目都会重复出现的拒绝(quota_exceeded、campaign_limit_reached、insufficient_access、pending_review、平台拒绝密钥、连接中断)会以 data.stopped(code、detail 和 next)以及该问题的退出码结束运行。修复原因后再次运行同一命令:它会从停止处继续。
migrate pair#
将播放器代码与一个待配对屏幕配对,沿用其旧名称、播放列表、时区和标签。
migrate pair <CODE...> --screen ID_OR_NAME [--dir DIR]| 参数 | 类型 | 必填 | 默认 | 备注 |
|---|---|---|---|---|
<CODE...> | string | 是 | 无 | 播放器显示的代码,例如 ABC 234:来自 23456789ABCDEFGHJKMNPQRSTUVWXYZ 的六个字符,大小写均可。其间的空格和短横线会被忽略,因此无需加引号。 |
--screen ID_OR_NAME | string | 是 | 无 | 待配对屏幕:其源 id 或其确切的旧名称。两块屏幕共用的名称会列出它们的 id。 |
--dir DIR | 路径 | 否 | 唯一的 ./screenrig-migration-* 目录 | 迁移目录。 |
screenrig migrate pair ABC 234 --screen "Front desk"
screenrig migrate pair ABC234 --screen 3 --dir ./old-signage请先运行 migrate apply:配对需要它生成的映射和播放列表。pair 以旧名称为屏幕认领该代码,设置其播放列表、时区和 migrated_from 字段,设置其标签,删除待配对屏幕的链接并记录结果。data 包含 source_id、name、screen_id、steps(paired、updated、tagged、link deleted、recorded)、next,以及本次运行认领了该代码时的 public_url。每个步骤落地时即被记录,因此重新运行会完成被中断的配对所遗留的部分。已配对的屏幕会返回 resource_conflict(退出码 5),并指明该屏幕。播放器在下次联系服务时完成配对;screen show 随后报告 state active。