Medien
Ein Medienobjekt ist ein Standbild, ein Clip oder eine MP3-Audiospur, gespeichert als genau eine Rendition. Es gibt keinen gerätespezifischen Fallback, daher muss jeder Bildschirm genau das dekodieren, was media upload speichert.
Medienordner organisieren die Bibliothek. Eine Ordner-ID beginnt mit mfd_ und eine Datei-ID mit med_. Ein Upload landet im Bibliotheksstamm, sofern --folder keinen Ordner benennt, media move und media folder update den Baum umstrukturieren, und ein Playlist-by:folder-Selektor spielt die Dateien direkt in einem Ordner ab, nicht die seiner Unterordner. Eine Organisation enthält höchstens 1000 Ordner über alle ihre Projekte, die maximal 10 Ebenen tief verschachtelt sind, mit Namen von 1 bis 100 Zeichen.
Ein Medium behält seine ID, wenn sich seine Datei ändert: media replace tauscht die Datei an Ort und Stelle aus, sodass jede Playlist und jeder Zeitplan, die es verwenden, die neue Datei abspielen, und media versions listet alle Dateien auf, die das Element hatte.
media upload#
Eine lokale Datei in Lieferbytes konvertieren, hochladen und warten, bis das Objekt bereit ist.
media upload <file> [--content-type TYPE] [--tag TAG] [--folder ID] [--no-wait] [--poll-ms MS]
[--timeout MS] [--no-transcode] [--codec h264|hevc] [--max-fps N]
[--max-edge PIXELS] [--webp-quality 1-100] [--no-progress]
[--preset signage-1080p30|signage-4k30] [--no-audio]| Parameter | Typ | Erforderlich | Standard | Notizen |
|---|---|---|---|---|
<file> | Pfad | ja | keine | Das Quell-Still, der Clip oder die Audiospur. Der Dateiname wird zum lesbaren Namen in Listen, Playlists und Wiedergabemeldungen, benennen Sie ihn also nach dem, was er zeigt. |
--content-type TYPE | string | nein | der Typ der Dateiendung | Geben Sie den Medientyp der Quelle für eine Datei an, deren Erweiterung ihn nicht nennt. Ein Typ, der nicht zu den Bytes der Datei passt, wird vor jeder Konvertierung abgelehnt (usage_error, Exit 2). |
--tag TAG | string | nein | keine | Ein bis 32 Buchstaben oder Ziffern, passend zu ^[A-Za-z0-9]{1,32}$. Bindestriche werden abgelehnt. Ein Tag ist das, was media list --tag TAG zu einer zuverlässigen Dateiname-zu-ID-Zuordnung macht. |
--folder ID | string | nein | Bibliotheksstamm | Ein vorhandener mfd_ Medienordner, der vor Beginn jeglicher Arbeit überprüft wird. Die Datei landet dort, sobald sie bereit ist, danach wird nichts mehr verschoben, und data.folder_id meldet ihn. Funktioniert mit --no-wait. Ein Uploader muss einen seiner Ordner nennen; siehe Uploader. |
--no-wait | boolean | nein | aus | Gibt zurück, sobald der Commit akzeptiert ist. Das Objekt ist noch nicht bereit; beenden mit operations wait. |
--poll-ms MS | integer | nein | 1000 | Intervall zwischen Abfragen von Operationen während des Wartens. |
--timeout MS | integer | nein | 120000 | Frist für das Warten. Sie begrenzt auch jede zugrunde liegende Anfrage. |
--no-transcode | boolean | nein | aus | Laden Sie die Quelldaten unverändert hoch. ffmpeg, ffprobe und cwebp werden nicht ausgeführt. Die Datei muss bereits ein PNG, JPEG, WebP, GIF, MP4, WebM oder MP3 sein, und verlustfreies WebP wird weiterhin abgelehnt. Nicht kombinierbar mit --codec, --max-fps, --max-edge, --webp-quality, --preset oder --no-audio. |
--codec | string | nein | h264 | h264 oder hevc. Verwenden Sie hevc nur, wenn jeder Bildschirm, der den Clip abspielt, ein nativer Player ist. |
--max-fps N | number | nein | 30 | Konstante Ausgabebildrate. Jedes Video wird genau mit dieser Rate kodiert, unabhängig von seiner Quellrate, sodass aufeinanderfolgende Clips nie die Rate ändern. Größer als 0 und höchstens 240. |
--max-edge PIXELS | integer | nein | 3840 | Grenze wird an jede Kante angewendet, von 16 bis 3840. Das Seitenverhältnis bleibt erhalten und eine kleinere Quelle wird nie hochskaliert. |
--webp-quality | integer | nein | 90 | Standbildqualität für die WebP-Codierung, von 1 bis 100. |
--preset | string | nein | Nicht festgelegt | signage-1080p30 oder signage-4k30. Orientierungssensitives Videoformat und konstante 30 fps. --max-edge und --max-fps können ein Preset verschärfen, aber nicht vergrößern. Nur Video; kann nicht mit --no-transcode kombiniert werden. |
--no-audio | boolean | nein | aus | Die Audiospur bei der Videoübertragung weglassen. Nur Video; kann nicht mit --no-transcode kombiniert werden. |
--no-progress | boolean | nein | aus | Keine Fortschrittsausgabe ausgeben. Fortschritt wird immer an stderr gesendet; stdout bleibt für den einzelnen Ergebnisumschlag reserviert. |
screenrig media upload ./lobby-welcome-loop.mp4 --tag LobbyLoopVideo wird zu MP4: H.264 High Profile mit Level 4.2, 5.1 oder 5.2, jeweils das niedrigste, das zu Größe und Rate passt, oder H.265 Main Profile mit Level 5.1 oder 5.2 mit --codec hevc, in yuv420p getaggtem Rec. 709, höchstens 3840 mal 2160 Pixel pro Bild. Eine HDR-Quelle wird auf Rec. 709 tonemapped. Audio, falls vorhanden, ist AAC mit 192 kbit/s, 48 kHz, Stereo.
Standbilder werden bei Qualität 90 zu verlustbehaftetem WebP, wobei Alpha erhalten bleibt, wenn die Quelle es hat. Eine animierte Quelle läuft endlos. Ein WebP, das bereits die Größenbeschränkung erfüllt, wird durchgereicht statt neu codiert.
Audio wird zu einer MP3 für den Playlist-Soundtrack. Eine MP3-Quelle wird unverändert hochgeladen; WAV-, AAC-, M4A-, OGG- und FLAC-Quellen werden in eine 128 kb/s MP3 konvertiert, wofür ein ffmpeg-Build mit libmp3lame benötigt wird. Ein Track läuft von 1 Sekunde bis 3 Stunden. playlist init wandelt Audioeingaben in Soundtrack-Tracks statt Seiten um. Das fertige Objekt ist ein audio Medienobjekt mit einer Dauer. Es kann nicht auf einer Seite platziert werden; benennen Sie es stattdessen in der Playlist audio soundtrack.
Die fertige Objekt-ID ist data.media_id. Derselbe Wert ist data.id und data.operation.result.media_id. Diese ID nimmt ein Playlist-Selektor.
Ein bereites Medium mit denselben Bytes, demselben Dateinamen und demselben Tag wird zurückgegeben, statt erneut hochgeladen zu werden (data.reused ist true), sodass die Wiederholung eines unterbrochenen Uploads dessen Medien-ID liefert. data.timing meldet Millisekunden pro Phase: prepare_ms (Konvertierung und Hash), declare_ms, transfer_ms, commit_ms und processing_ms (bis bereit, so fein wie --poll-ms; fehlt bei --no-wait).
Ein informationsarmer Dateiname wie video.mp4 fügt dem Umschlag eine beratende generic_filename-Warnung hinzu. Der Upload gelingt trotzdem, und die CLI benennt die Datei nie um; wählen Sie den Namen vor dem Ausführen des Befehls.
Konvertierung führt ffmpeg und ffprobe von PATH aus oder von den absoluten Pfaden in SCREENRIG_FFMPEG und SCREENRIG_FFPROBE. Standbilder bevorzugen den ffmpeg libwebp-Encoder und fallen auf cwebp bei PATH oder SCREENRIG_CWEBP zurück. Führen Sie doctor vor dem ersten Upload einer Sitzung aus.
--preset signage-1080p30 begrenzt die lange Kante auf 1920, die kurze Kante auf 1080 und die Rate auf konstante 30 fps. signage-4k30 begrenzt die lange Kante auf 3840, die kurze Kante auf 2160 und die Rate auf konstante 30 fps. Beide funktionieren mit Landschaft, Hochformat und quadratischen Inhalten. --no-audio lässt die Audio-Codierung für stille Clips weg. Diese Optionen gelten nur für Video.
screenrig media upload ./lobby.mov --preset signage-1080p30 --no-audioscreenrig media upload ./menu.png --folder mfd_01EXAMPLEFOLDER000000000media upload-batch --folder legt jedes hochgeladene Element auf dieselbe Weise im Ordner ab.
Ein Bild oder Video darf bis zu 16383 Pixel breit oder hoch sein und 67.108.864 Pixel (8192 mal 8192) in einem Bild haben; ein größeres wird mit invalid_request abgelehnt. Die Standardkonvertierung passt jede Kante auf 3840 Pixel an; laden Sie daher ein extrabreites Master wie 9216 mal 2160 oder 12000 mal 540 mit --no-transcode hoch. Ein Video-Upload darf höchstens so groß sein wie der größte Video-Upload des Tarifs des Projekts, den project capabilities als media_video_bytes meldet (siehe Preisgestaltung); ein größeres Video wird abgelehnt, bevor es gelesen wird, kürzen Sie den Clip also zuerst. Die CLI kodiert Video mit fester Qualität, daher kann ein langes Video nach der Kodierung noch über dem Limit liegen und wird dann abgelehnt; mit --no-transcode muss die Datei selbst innerhalb des Limits liegen.
Eine unterbrochene Übertragung zum Speicher wird bis zu 4-mal versucht, solange ihre Upload-URL gültig ist. Schlägt sie weiterhin fehl, nennt der Fehler die operation_id des Uploads, und der Upload wird abgebrochen, damit er keinen Speicher belegt; mit --idempotency-key bleibt er für die Wiederholung erhalten. Führen Sie denselben Befehl erneut aus.
Unter Vorschlagszugang oder wenn das Projekt eine Überprüfung für Agentenänderungen erfordert, wartet ein neuer Upload auf die Überprüfung durch eine Person, bevor ein Tag, ein Ordner oder ein all-Selektor ihn abspielt; siehe Überprüfungen.
media upload-batch#
Viele lokale Dateien aus einem Manifest hochladen, Fortsetzung aus einer Statusdatei.
media upload-batch <manifest.json> [--state FILE] [--concurrency N] [--tag TAG] [--folder ID]
[--poll-ms MS] [--timeout MS] [--no-transcode] [--codec h264|hevc]
[--max-fps N] [--max-edge PIXELS] [--webp-quality 1-100] [--no-progress]
[--preset signage-1080p30|signage-4k30] [--no-audio]| Parameter | Typ | Erforderlich | Standard | Notizen |
|---|---|---|---|---|
<manifest.json> | Pfad | ja | keine | { "items": [ { "path": "./a.png", "tag"?: "Lobby", "content_type"?: "image/png" } ] } mit 1 bis 1000 Elementen. Pfade sind relativ zur Manifestdatei. |
--state FILE | Pfad | nein | private Datei neben der Konfiguration | Eine 0600 JSON-Datei, die nach dem SHA-256 der lokalen Bytes jeder Quelldatei indiziert ist; standardmäßig eine Datei pro Projekt, API-Adresse und Manifest. Bereits vorhandene Elemente mit einem media_id werden als resumed gemeldet. Teilen Sie keine Zustandsdatei über Projekte hinweg. |
--concurrency N | integer | nein | 4 | Parallele Uploads, 1 bis 8. |
--no-transcode | boolean | nein | aus | Laden Sie die Quelldaten unverändert hoch, wie media upload es tut. Nicht kombinierbar mit --codec, --max-fps, --max-edge, --webp-quality, --preset oder --no-audio. |
--poll-ms MS | integer | nein | 1000 | Intervall zwischen Abfragen von Operationen während des Wartens. |
--timeout MS | integer | nein | 120000 | Frist für das Warten. Sie begrenzt auch jede zugrunde liegende Anfrage. |
--codec | string | nein | h264 | h264 oder hevc. Verwenden Sie hevc nur, wenn jeder Bildschirm, der den Clip abspielt, ein nativer Player ist. |
--max-fps N | number | nein | 30 | Konstante Ausgabebildrate. Jedes Video wird genau mit dieser Rate kodiert, unabhängig von seiner Quellrate, sodass aufeinanderfolgende Clips nie die Rate ändern. Größer als 0 und höchstens 240. |
--max-edge PIXELS | integer | nein | 3840 | Grenze wird an jede Kante angewendet, von 16 bis 3840. Das Seitenverhältnis bleibt erhalten und eine kleinere Quelle wird nie hochskaliert. |
--webp-quality | integer | nein | 90 | Standbildqualität für die WebP-Codierung, von 1 bis 100. |
--preset | string | nein | Nicht festgelegt | signage-1080p30 oder signage-4k30. Orientierungssensitives Videoformat und konstante 30 fps. --max-edge und --max-fps können ein Preset verschärfen, aber nicht vergrößern. Nur Video; kann nicht mit --no-transcode kombiniert werden. |
--no-audio | boolean | nein | aus | Die Audiospur bei der Videoübertragung weglassen. Nur Video; kann nicht mit --no-transcode kombiniert werden. |
--tag TAG | string | nein | keine | Angewendet, wenn ein Element seinen eigenen Tag weglässt. |
--folder ID | string | nein | Bibliotheksstamm | Ein vorhandener mfd_ Medienordner, der vor Beginn jeglicher Arbeit überprüft wird. Jedes Element landet dort, sobald es bereit ist, und data.folder_id meldet ihn. Ein Uploader muss einen seiner Ordner nennen. |
--no-progress | boolean | nein | aus | Keine Fortschrittsausgabe ausgeben. |
screenrig media upload-batch ./images.json --state ./upload-state.jsonDer Umschlag enthält data.items[] in Manifestreihenfolge, jeweils mit path, source_filename, sha256, outcome (accepted oder resumed) und media_id. data.failed[] enthält Elemente, die nicht angekommen sind, jeweils mit ihrem path und problem; data.accepted, data.resumed, data.attempts, data.rate_limited, data.wait_ms und data.transfer_ms zählen den Lauf. Ein Element wird bis zu 8-mal mit Wartezeit zwischen den Versuchen probiert, solange die Antwort ein Ratenlimit oder ein Serverfehler ist.
Bei Fehlern folgt der Exit-Code dem zuletzt fehlgeschlagenen Element: 7 bei einem Ratenlimit, 9 bei einem Serverfehler, 2 bei einem Verwendungsfehler, sonst 8. Führen Sie denselben Befehl mit demselben Manifest erneut aus, um nur hochzuladen, was nicht angekommen ist.
media replace#
Die Datei eines Mediums an Ort und Stelle ersetzen. Seine ID, Playlists und Zeitpläne funktionieren weiter.
media replace <id> <file> [--expect-rev REVISION] [--note TEXT] [--content-type TYPE] [--no-wait]
[--poll-ms MS] [--timeout MS] [--no-transcode] [--codec h264|hevc] [--max-fps N]
[--max-edge PIXELS] [--webp-quality 1-100] [--no-progress]
[--preset signage-1080p30|signage-4k30] [--no-audio]| Parameter | Typ | Erforderlich | Standard | Notizen |
|---|---|---|---|---|
<id> | string | ja | keine | Die med_ Objekt-ID. |
<file> | Pfad | ja | keine | Das neue Standbild, der neue Clip oder die neue Audiospur. Sie muss dieselbe Art wie das Medium sein: Bild für Bild, Video für Video, Audio für Audio. Wird geprüft, bevor Arbeit beginnt (usage_error, Exit-Code 2). |
--expect-rev REVISION | string | nein | keine | Optionale Revisionsvoraussetzung. Ein übergebener veralteter Wert ist revision_conflict, und der deklarierte Upload wird abgebrochen: Lesen Sie media show ID und führen Sie den Befehl erneut aus. |
--note TEXT | string | nein | keine | Wird mit der neuen Version gespeichert und der Person gezeigt, die sie überprüft. Höchstens 280 Zeichen. |
--content-type TYPE | string | nein | erkannt aus den hochgeladenen Bytes | Geben Sie den Medientyp selbst an, anstatt ihn vom CLI erkennen zu lassen. |
--no-wait | boolean | nein | aus | Gibt zurück, sobald der Austausch akzeptiert ist. Die neue Datei ist noch nicht im Einsatz; beenden mit operations wait. |
--poll-ms MS | integer | nein | 1000 | Intervall zwischen Abfragen von Operationen während des Wartens. |
--timeout MS | integer | nein | 120000 | Frist für das Warten. Sie begrenzt auch jede zugrunde liegende Anfrage. |
--no-transcode | boolean | nein | aus | Laden Sie die Quelldaten unverändert hoch. ffmpeg, ffprobe und cwebp werden nicht ausgeführt. Die Datei muss bereits ein PNG, JPEG, WebP, GIF, MP4, WebM oder MP3 sein, und verlustfreies WebP wird weiterhin abgelehnt. Nicht kombinierbar mit --codec, --max-fps, --max-edge, --webp-quality, --preset oder --no-audio. |
--codec | string | nein | h264 | h264 oder hevc. Verwenden Sie hevc nur, wenn jeder Bildschirm, der den Clip abspielt, ein nativer Player ist. |
--max-fps N | number | nein | 30 | Konstante Ausgabebildrate. Jedes Video wird genau mit dieser Rate kodiert, unabhängig von seiner Quellrate, sodass aufeinanderfolgende Clips nie die Rate ändern. Größer als 0 und höchstens 240. |
--max-edge PIXELS | integer | nein | 3840 | Grenze wird an jede Kante angewendet, von 16 bis 3840. Das Seitenverhältnis bleibt erhalten und eine kleinere Quelle wird nie hochskaliert. |
--webp-quality | integer | nein | 90 | Standbildqualität für die WebP-Codierung, von 1 bis 100. |
--preset | string | nein | Nicht festgelegt | signage-1080p30 oder signage-4k30. Orientierungssensitives Videoformat und konstante 30 fps. --max-edge und --max-fps können ein Preset verschärfen, aber nicht vergrößern. Nur Video; kann nicht mit --no-transcode kombiniert werden. |
--no-audio | boolean | nein | aus | Die Audiospur bei der Videoübertragung weglassen. Nur Video; kann nicht mit --no-transcode kombiniert werden. |
--no-progress | boolean | nein | aus | Keine Fortschrittsausgabe ausgeben. Fortschritt wird immer an stderr gesendet; stdout bleibt für den einzelnen Ergebnisumschlag reserviert. |
screenrig media replace med_01EXAMPLEIMAGE0000000000 ./menu-v2.png
screenrig media replace med_01EXAMPLEVIDEO0000000000 ./intro.mp4 --expect-rev 3 --note "Spring cut"Das Medium behält seine ID, Tags und seinen Ordner, sodass jede Playlist und jeder Zeitplan, die es nennen, beim nächsten Manifest die neue Datei abspielen und Selektoren nach Tag, Ordner und all sie ebenfalls aufnehmen. Nichts wird neu geplant. Der Befehl führt dieselben Schritte aus wie media upload (Konvertierung, das Video-Bytelimit des Plans, die Größenlimits, das Speicherlimit des Plans, die signierte Übertragung) und ersetzt dann, statt neue Medien hinzuzufügen. Er nimmt kein --tag oder --folder an.
Standardmäßig wartet der Befehl auf die Verarbeitung. data.media_id und data.id sind die Medien-ID, data.version ist die Nummer der neuen Datei in media versions und data.revision ist die neue Revision des Mediums. data.warnings, data.operation, data.upload, data.transcode und die Zeitangaben werden wie bei media upload gemeldet, und die Operations-ID steht in der Antwort. Mit --no-wait ist data.operation die akzeptierte Operation, und data.version und data.warnings fehlen.
Ein geändertes Seitenverhältnis ist erlaubt. Die Antwort enthält eine Warnung aspect_ratio_changed, und data.warnings[].playlists nennt die Playlists, die das Medium verwenden; prüfen Sie also, wie sie aussehen. Eine Datei mit denselben Bytes wie die aktuelle wird mit resource_conflict abgelehnt (Exit-Code 13).
Jede frühere Datei bleibt im Verlauf des Mediums und zählt zu den gespeicherten Bytes, bis ihre Version gelöscht wird; siehe media versions.
Unter Propose-Zugang oder wenn das Projekt eine Überprüfung für Agentenänderungen verlangt, wartet der Austausch auf eine Person, und der Befehl ist erfolgreich (Exit-Code 0): data.status ist pending_review, data.review_id nennt die Überprüfung, die Warnung pending_review nennt ihre URL, und data.next ist screenrig reviews show ID. Das Medium spielt seine aktuelle Datei weiter ab, bis eine Person freigibt; sagen Sie ihr also, dass es wartet, und wiederholen Sie den Schreibvorgang nicht. Ein neuerer Austausch desselben Mediums ersetzt den wartenden. Siehe Überprüfungen.
media versions#
Die Dateien auflisten, die ein Medium hatte, die Datei im Einsatz zuerst.
media versions <id> [--limit N] [--cursor CURSOR]| Parameter | Typ | Erforderlich | Standard | Notizen |
|---|---|---|---|---|
<id> | string | ja | keine | Die med_ Objekt-ID. |
--limit N | integer | nein | jede Seite | Eine Seite mit dieser Anzahl von Versionen lesen, 1 bis 100. |
--cursor CURSOR | string | nein | keine | Die Seite nach dem data.next_cursor der vorherigen Seite lesen. |
screenrig media versions med_01EXAMPLEIMAGE0000000000data.items enthält einen Eintrag für jede Datei, die das Medium hatte: number, current, filename, source_filename, content_type, sha256, bytes, width, height, duration_ms, codecs, source (upload, replace, sync oder restore), note, by (Art person, agent, client oder sync, mit ID und Name), restored_from und created_at. Die Datei im Einsatz steht zuerst (current: true), danach die übrigen, neueste zuerst. Version 1 ist der erste Upload; jeder Austausch, jede Wiederherstellung und jede Änderung durch die Mediensynchronisierung vergibt die nächste Nummer.
Ohne --limit und --cursor werden alle Seiten gelesen, und data.next_cursor ist null. Mit einem von beiden wird eine Seite gelesen: Solange data.next_cursor ein String ist, führen Sie den Befehl erneut aus, wobei --cursor darauf gesetzt wird. Schreibgeschützter Zugang genügt. Die Bytes einer früheren Version bleiben gespeichert und zählen zu den gespeicherten Bytes des Projekts, bis media version delete sie entfernt; es gibt kein Limit, wie viele Versionen aufbewahrt werden, und gespeicherte Bytes über dem kostenlosen Speicher des Tarifs werden wie jeder andere Speicher abgerechnet.
media restore#
Eine frühere Version als neue Version wieder in Einsatz bringen.
media restore <id> --number N [--expect-rev REVISION] [--note TEXT]| Parameter | Typ | Erforderlich | Standard | Notizen |
|---|---|---|---|---|
<id> | string | ja | keine | Die med_ Objekt-ID. |
--number N | integer | ja | keine | Die Nummer der wieder in Einsatz zu bringenden Version, wie media versions sie auflistet. |
--expect-rev REVISION | string | nein | keine | Optionale Revisionsvoraussetzung. Ein übergebener veralteter Wert ist revision_conflict: Lesen Sie media show ID und führen Sie den Befehl erneut aus. |
--note TEXT | string | nein | keine | Wird mit der neuen Version gespeichert und der Person gezeigt, die sie überprüft. Höchstens 280 Zeichen. |
screenrig media restore med_01EXAMPLEIMAGE0000000000 --number 2
screenrig media restore med_01EXAMPLEIMAGE0000000000 --number 2 --expect-rev 5 --note "Back to the winter menu"Das Medium behält seine ID und erhält eine neue Revision, und jede Playlist und jeder Zeitplan, die es nennen, spielen diese Datei wieder ab. Die kopierte Version bleibt im Verlauf und teilt ihre Bytes; die neue Version zählt wie jede andere zu den gespeicherten Bytes. data.media ist das Medium, und data.warnings enthält aspect_ratio_changed, das die Playlists nennt, die das Medium verwenden, wenn die wiederhergestellte Datei ein anderes Seitenverhältnis hat.
Die Version im Einsatz kann nicht wiederhergestellt werden (resource_conflict, Exit-Code 5), und eine unbekannte Version ist not_found (Exit-Code 4). Unter Propose-Zugang oder wenn das Projekt eine Überprüfung für Agentenänderungen verlangt, wartet die Wiederherstellung auf eine Person, und der Befehl ist erfolgreich (Exit-Code 0): data.status ist pending_review mit data.review, die Warnung pending_review nennt ihre URL, und data.next ist screenrig reviews show ID. Das Medium spielt seine aktuelle Datei weiter ab, bis eine Person freigibt; wiederholen Sie den Schreibvorgang daher nicht.
media version delete#
Eine frühere Version und ihre gespeicherten Bytes löschen.
media version delete <id> --number N| Parameter | Typ | Erforderlich | Standard | Notizen |
|---|---|---|---|---|
<id> | string | ja | keine | Die med_ Objekt-ID. |
--number N | integer | ja | keine | Die Nummer der zu löschenden Version, wie media versions sie auflistet. |
screenrig media version delete med_01EXAMPLEIMAGE0000000000 --number 2Der Datensatz der Version verschwindet, und ihre Bytes werden sofort von den gespeicherten Bytes des Projekts abgezogen. Das gespeicherte Objekt wird nach 24 Stunden entfernt, sofern nicht eine andere Version oder die Datei im Einsatz dieselbe Datei hält. Eine gelöschte Version kann nicht wiederhergestellt werden. Die Version im Einsatz kann nicht gelöscht werden, und keine Version kann gelöscht werden, solange ein Austausch des Mediums auf Überprüfung wartet; beides ist resource_conflict (Exit-Code 5), und media versions ID zeigt, welche Version im Einsatz ist. Eine unbekannte Version ist not_found (Exit-Code 4). Das Löschen erfordert Manage-Zugang: Ein Propose-Zugangsdatensatz wird mit insufficient_access abgelehnt, und das Löschen wird nie zur Überprüfung vorgeschlagen.
media show#
Ein Medienobjekt lesen, einschließlich seiner aktuellen Revision.
media show <id>| Parameter | Typ | Erforderlich | Standard | Notizen |
|---|---|---|---|---|
<id> | string | ja | keine | Die med_ Objekt-ID. |
screenrig media show med_01EXAMPLEIMAGE0000000000media download#
Schreiben Sie eine gespeicherte Wiedergabe auf die Festplatte zur Inspektion. Drucken Sie niemals die Bytes aus.
media download <id> [--output FILE]| Parameter | Typ | Erforderlich | Standard | Notizen |
|---|---|---|---|---|
<id> | string | ja | keine | Die med_ Objekt-ID. |
--output FILE | Pfad | nein | ./<id>.<ext> im aktuellen Verzeichnis | Ein Dateipfad, kein Verzeichnis. Eine vorhandene Datei wird überschrieben. Die Erweiterung folgt dem Inhaltstyp. |
screenrig media download med_01EXAMPLEIMAGE0000000000 --output ./lobby.webpDie Antwort meldet media_id, path, bytes, sha256, content_type, primitive, filename, optional source_filename sowie width / height. Sie enthält nie Pixel. Nutzen Sie sie, um ein Bild zu prüfen, bevor es auf den Bildschirm kommt.
media list#
Medienobjekte auflisten, optional gefiltert nach Tag, Typ und Ordner.
media list [--tag TAG] [--primitive image|video|audio] [--folder ID|root] [--library]| Parameter | Typ | Erforderlich | Standard | Notizen |
|---|---|---|---|---|
--tag TAG | string | nein | keine | Übereinstimmung ^[A-Za-z0-9]{1,32}$. Nicht markierte Objekte werden ausgelassen, wenn dieser Filter vorhanden ist. |
--primitive | string | nein | alle | image, video oder audio. Beschränken Sie die Auflistung auf Standbilder, Clips oder Soundtrack-Spuren. |
--folder ID|root | string | nein | jeder Ordner | Nur Dateien direkt in diesem mfd_ Ordner, nicht in seinen Unterordnern, oder mit root nur Dateien im Bibliotheksstamm. Die API wendet den Filter an. |
--library | boolean | nein | aus | Listet stattdessen die Medien der Bibliothek der Organisation auf, schreibgeschützt: Die Zeilen tragen library: true. Verwenden Sie ihre IDs in Playlist-Seiten; ändern Sie sie nur im Bibliotheksprojekt. |
screenrig media list --tag LobbyLoop --primitive video
screenrig media list --folder mfd_01EXAMPLEFOLDER000000000
screenrig media list --libraryJede Zeile trägt folder_id, das an der Bibliothekswurzel fehlt.
media selector-preview#
Vorschau, welche bereiten Dateien ein dynamischer Medienselektor jetzt trifft, ohne eine Playlist zu veröffentlichen oder einen Player weiterzuschalten.
media selector-preview <selector.json> --primitive image|video [--rect WxH] [--timezone IANA]| Parameter | Typ | Erforderlich | Standard | Notizen |
|---|---|---|---|---|
<selector.json> | Pfad | ja | keine | Eine JSON-Datei mit einem Medienselektor all, tag oder folder oder - für stdin. Ein Tag mit einem Bildschirm-Token lässt sich nicht in der Vorschau anzeigen. |
--primitive | string | ja | keine | image oder video: die Art der Datei, die der Selektor trifft. |
--rect WxH | string | mit fit: "aspect" | keine | Die Größe des Rechtecks des Primitives, etwa 1080x1920, beide Zahlen größer als 0. |
--timezone IANA | string | nein | UTC | Die Zeitzone, in der die Verfügbarkeitsregeln der Dateien gelesen werden, etwa America/New_York. |
screenrig media selector-preview selector.json --primitive video
screenrig media selector-preview selector.json --primitive image --timezone America/New_YorkDie Selektor-Schlüssel (order, batch_size, one_at_a_time, weights und fit) sind unter Tag-Filter und Wiedergabe-Batches und Gewichtete Rotation und Seitenverhältnis-Anpassung beschrieben.
Die Antwort enthält matched_count, die nach Dateinamen sortierten candidates (media_id, filename, tags, width, height), den normalisierten selector und in excluded die ausgeschlossenen Dateien mit ihrem reason: aspect_mismatch für fit: "aspect" und outside_window für eine Datei, deren Verfügbarkeitsregel jetzt nicht gilt. Mit order: "weighted" enthält jeder Kandidat weight und share_percent, und cycle ist die Anzahl der Wiedergaben, nach der jedes Element genau sein Gewicht gespielt hat. Mehr als 1024 Treffer ergeben invalid_request. Lesezugriff genügt. Die Vorschau liest das authentifizierte Projekt, schaltet nie einen Cursor weiter und ändert kein Manifest, und eine Katalogänderung danach wird an der nächsten Schleifengrenze jedes Players übernommen.
media update#
Die Tags eines Objekts ersetzen oder löschen. Seine Verfügbarkeitsregel setzen Sie mit media availability.
media update <id> (--tag TAG | --tags TAG1,TAG2 | --clear-tag) [--expect-rev REVISION]| Parameter | Typ | Erforderlich | Standard | Notizen |
|---|---|---|---|---|
<id> | string | ja | keine | Die med_ Objekt-ID. |
--tag TAG | string | eines von dreien | keine | Das Ersatz-Tag, ein bis 32 Buchstaben oder Ziffern. Es wird das einzige Tag des Objekts. |
--tags TAG1,TAG2 | string | eines von dreien | keine | Der Ersatz-Tag-Satz: 1 bis 32 eindeutige Tags, durch Kommas getrennt, jeweils ein bis 32 Buchstaben oder Ziffern. |
--clear-tag | boolean | eines von dreien | aus | Entfernt alle Tags und lässt das Objekt ohne Tag. |
--expect-rev REVISION | string | nein | keine | Optionale Revisionsvoraussetzung. Weglassen, um die aktuelle Ressource zu schreiben. Ein übergebener veralteter Wert ist revision_conflict: erneut abrufen, erneut anwenden, erneut versuchen. |
screenrig media update med_01EXAMPLEIMAGE0000000000 --tag LobbyLoop
screenrig media update med_01EXAMPLEIMAGE0000000000 --tags Summer,DrinksUnter Vorschlagszugang oder wenn das Projekt eine Überprüfung für Agentenänderungen erfordert, beantwortet das erneute Taggen genehmigter Medien ok mit der Warnung media_review_pending: Bildschirme spielen es mit seinen genehmigten Tags weiter ab, bis eine Person die Änderung genehmigt, und eine Ablehnung setzt die Tags zurück. Die Überprüfung erscheint innerhalb weniger Sekunden in reviews list; ein erneutes Taggen, das keine genehmigte Playlist und keine Playlist, die auf Überprüfung wartet, ändert, wird automatisch angewendet. Siehe Überprüfungen.
media availability#
Legt fest oder löscht, wann dynamische Selektoren eine Datei auswählen dürfen.
media availability <id> (--file FILE | --clear) [--expect-rev REVISION]| Parameter | Typ | Erforderlich | Standard | Notizen |
|---|---|---|---|---|
<id> | string | ja | keine | Die med_ Objekt-ID. |
--file FILE | Pfad | eines von beiden | keine | Eine JSON-Verfügbarkeitsregel oder - für stdin. |
--clear | boolean | eines von beiden | aus | Entfernt die Regel; die Datei ist immer verfügbar. |
--expect-rev REVISION | string | nein | aktuelle Revision | Optionale Revisionsvoraussetzung. Wird sie weggelassen, liest der Befehl zuerst die aktuelle Revision des Mediums. Ein übergebener veralteter Wert ist revision_conflict: erneut abrufen, erneut anwenden, erneut versuchen. |
screenrig media availability med_01EXAMPLEIMAGE0000000000 --file rule.jsonDie Bestandteile und das Verhalten der Regel stehen unter Medienverfügbarkeit. Eine Datei, die auf die Überprüfung durch eine Person wartet, wird mit media_pending_review abgelehnt: Entscheiden Sie zuerst über diese Überprüfung.
media delete#
Ein Medienobjekt löschen.
media delete <id> [--expect-rev REVISION]| Parameter | Typ | Erforderlich | Standard | Notizen |
|---|---|---|---|---|
<id> | string | ja | keine | Die med_ Objekt-ID. |
--expect-rev REVISION | string | nein | keine | Optionale Revisionsvoraussetzung. Weglassen, um die aktuelle Ressource zu schreiben. Ein übergebener veralteter Wert ist revision_conflict: erneut abrufen, erneut anwenden, erneut versuchen. |
screenrig media delete med_01EXAMPLEIMAGE0000000000media move#
Mediendateien und Ordner in einen Ordner verschieben oder zurück zum Bibliotheksstamm.
media move <id>... (--folder ID | --root)| Parameter | Typ | Erforderlich | Standard | Notizen |
|---|---|---|---|---|
<id>... | string | ja | keine | Eine oder mehrere med_ Datei-IDs und mfd_ Ordner-IDs, insgesamt höchstens 1000. |
--folder ID | string | eines von beiden | keine | Der Ziel-mfd_-Ordner. |
--root | boolean | eines von beiden | aus | Zum Bibliotheksstamm verschieben. |
screenrig media move med_01EXAMPLEIMAGE0000000000 med_01EXAMPLEVIDEO0000000000 --folder mfd_01EXAMPLEFOLDER000000000
screenrig media move mfd_01EXAMPLEFOLDER000000000 --rootDer Vorgang ist eine Alles-oder-Nichts-Anfrage. Ein Ordner kann nicht in sich selbst oder einen darin enthaltenen Ordner verschoben werden, und Ordner verschachteln sich höchstens 10 Ebenen tief. Elemente, die sich bereits im Ziel befinden, bleiben unverändert. data.media und data.folders zählen, was verschoben wurde.
Das Verschieben von Dateien ändert, was die by:folder-Selektoren ihrer alten und neuen Ordner abspielen, ab der nächsten Auflösung des Selektors jedes Bildschirms; das Verschieben eines Ordners ändert keine Dateien des Ordners selbst. Unter Vorschlag Zugriff oder wenn das Projekt eine Überprüfung für Agentenänderungen erfordert, wartet jede verschobene Datei auf die Überprüfung durch eine Person (reviews list) und genehmigte Playlists spielen sie weiterhin über den Ordner ab, mit dem sie genehmigt wurden; siehe Reviews.
media folder list#
Medienordner des Projekts auflisten.
media folder list [--library]| Parameter | Typ | Erforderlich | Standard | Notizen |
|---|---|---|---|---|
--library | boolean | nein | aus | Listet stattdessen die Ordner der Bibliothek der Organisation auf, schreibgeschützt: Die Zeilen tragen library: true, und ein by:folder-Selektor kann einen davon benennen, um seine Dateien abzuspielen. |
screenrig media folder list
screenrig media folder list --libraryGibt jeden Ordner des Projekts zurück, höchstens 1000, sortiert nach Name: data.items mit id, name, parent_id (null im Bibliotheksstamm) und revision. Bauen Sie den Baum aus parent_id auf. Der Ordner einer Datei ist folder_id auf media list und media show; er fehlt im Bibliotheksstamm.
media folder show#
Einen Medienordner lesen.
media folder show <id>| Parameter | Typ | Erforderlich | Standard | Notizen |
|---|---|---|---|---|
<id> | string | ja | keine | Die mfd_ Ordner-ID. |
screenrig media folder show mfd_01EXAMPLEFOLDER000000000Der Umschlag enthält die name, parent_id und revision des Ordners.
media folder create#
Erstellen Sie einen Medienordner im Bibliotheksstamm oder in einem anderen Ordner.
media folder create --name NAME [--parent ID]| Parameter | Typ | Erforderlich | Standard | Notizen |
|---|---|---|---|---|
--name NAME | string | ja | keine | 1 bis 100 Zeichen, gekürzt. Namen können sich wiederholen. |
--parent ID | string | nein | Bibliotheksstamm | Der mfd_ Ordner, in dem sie erstellt wird. |
screenrig media folder create --name Menus
screenrig media folder create --name Lunch --parent mfd_01EXAMPLEFOLDER000000000Eine Organisation enthält höchstens 1000 Ordner über alle ihre Projekte, verschachtelt bis zu 10 Ebenen tief. Eine Playlist spielt die Dateien eines Ordners mit einem by:folder-Selektor ab.
media folder update#
Einen Medienordner umbenennen oder ihn mit allem Inhalt in einen anderen Ordner verschieben.
media folder update <id> [--name NAME] [--parent ID | --root] [--expect-rev REVISION]| Parameter | Typ | Erforderlich | Standard | Notizen |
|---|---|---|---|---|
<id> | string | ja | keine | Die mfd_ Ordner-ID. |
--name NAME | string | Mindestens eine von --name, --parent, --root | Unverändert | Der neue Name, 1 bis 100 Zeichen. |
--parent ID | string | Mindestens eine von --name, --parent, --root | Unverändert | Verschieben Sie den Ordner mit allem Inhalt in diesen mfd_ Ordner. Nicht mit --root. |
--root | boolean | Mindestens eine von --name, --parent, --root | aus | Verschieben Sie den Ordner zum Bibliotheksstamm. Nicht mit --parent. |
--expect-rev REVISION | string | nein | keine | Optionale Revisionsvoraussetzung. Weglassen, um die aktuelle Ressource zu schreiben. Ein übergebener veralteter Wert ist revision_conflict: erneut abrufen, erneut anwenden, erneut versuchen. |
screenrig media folder update mfd_01EXAMPLEFOLDER000000000 --name Archive
screenrig media folder update mfd_01EXAMPLEFOLDER000000000 --rootEin Ordner kann nicht in sich selbst oder einen darin enthaltenen Ordner verschoben werden, und ein Verschieben muss alle Ordner innerhalb von 10 Ebenen halten. Das Senden der aktuellen Werte ist eine No-Op.
media folder delete#
Einen Medienordner löschen. Seine Dateien und Ordner werden eine Ebene höher verschoben.
media folder delete <id> [--expect-rev REVISION]| Parameter | Typ | Erforderlich | Standard | Notizen |
|---|---|---|---|---|
<id> | string | ja | keine | Die mfd_ Ordner-ID. |
--expect-rev REVISION | string | nein | keine | Optionale Revisionsvoraussetzung. Weglassen, um die aktuelle Ressource zu schreiben. Ein übergebener veralteter Wert ist revision_conflict: erneut abrufen, erneut anwenden, erneut versuchen. |
screenrig media folder delete mfd_01EXAMPLEFOLDER000000000Löscht nur den Ordner. Seine Dateien und Ordner werden in den übergeordneten Ordner oder in die Bibliothekswurzel verschoben, wenn keiner vorhanden ist. Ein by:folder-Selector, der ihn benennt, trifft dann auf nichts, also weisen Sie diese Playlists zuerst neu zu.
Tag-Filter und Wiedergabe-Batches
Medien tragen bis zu 32 eindeutige Tags, jeweils 1–32 Buchstaben oder Ziffern. Ersetzen Sie den gesamten Satz mit screenrig media update med_ID --tags Summer,Drinks. --tag Summer ersetzt ihn durch ein Tag; --clear-tag löscht alle Tags. media list --tag Summer stimmt mit Mitgliedschaft irgendwo im Satz überein. Tags sind case-sensitiv und niemals Autorisierung.
Ein dynamischer Selektor kann ein tag oder ein tags Filterobjekt verwenden:
{
"by": "tag",
"tags": { "all": ["Summer", "Drinks"], "any": ["Lobby", "Patio"], "none": ["Expired"] },
"order": "random",
"one_at_a_time": false,
"batch_size": 3
}
all erfordert alle aufgelisteten Tags, any erfordert mindestens einen, und none schließt alle aufgelisteten Tags aus. Vorhandene Gruppen werden mit UND kombiniert; ausgelassene Gruppen setzen keine Bedingung. Mindestens eine nicht-leere Gruppe angeben. Jede Gruppe akzeptiert bis zu 32 eindeutige Tags. tag und tags schließen sich gegenseitig aus. Ein none-nur-Filter wählt alle bereiten Medien dieses Primitivs außer den ausgeschlossenen Tags aus. Bildselektoren wählen Bilder und Videoselektoren Videos aus.
Ein folder-Selektor, { "by": "folder", "folder_id": "mfd_…" }, spielt die bereiten Dateien direkt in einem Medienordner ab und keine aus dessen Unterordnern; media folder list zeigt die IDs. Er akzeptiert dieselben order, one_at_a_time und batch_size wie all und tag, und beim Löschen eines Ordners rücken seine Dateien eine Ebene nach oben und der Selektor bleibt leer.
Der Kandidatenpool enthält bis zu 1.024 bereite Medien pro Selektor, mit 1.024 Medienverweisen im gesamten Schleifen-Snapshot. Ein Schreibvorgang zählt jeden all-, tag- oder folder-Selektor als 32 dieser Verweise und einen ids-Selektor als seine Länge. Eine größere Übereinstimmung gibt einen Fehler zurück; schränken Sie die Filter ein. batch_size ist ein separates Limit von 1–1.024 Elementen pro Seitenbesuch. Auf einer media_end-Seite spielt one_at_a_time: false den nächsten Batch der Reihe nach ab; das Weglassen von batch_size spielt den verbleibenden Durchgang ab. one_at_a_time: true spielt ein Element pro Erscheinen ab und erlaubt nur eine weggelassene Batch-Größe oder batch_size: 1. Auf Dauer-, Anwendungs- und audio_end-Seiten erfordert jeder all-, tag-, folder- und ids-Selektor mit mehreren IDs one_at_a_time: true, und dwell_ms wird abgelehnt. Bilder auf media_end erfordern außerdem dwell_ms; Videos können auf dieser Seite nicht in einer Schleife laufen.
Der Player löst bei jedem Start der Playlist und an jeder Schleifenbegrenzung alle dynamischen Medienprimitive in einer Anfrage auf. Die Mitgliedschaft ist während der Schleife eingefroren. Hochladungen, Entfernungen, Tagging-Änderungen und Verfügbarkeitsgrenzen erzeugen das Manifest nicht neu. Beim nächsten Aktualisieren verlassen entfernte oder neu ausgeschlossene Elemente die Warteschlange; neue Übereinstimmungen treten bei Abschluss des aktuellen Durchlaufs bei. Eine letzte Charge kann weniger als die angeforderte Anzahl enthalten; sie füllt nicht aus dem nächsten Durchlauf auf. Die Dateinamenreihenfolge sortiert nach Dateiname, dann Medien-ID. Die Zufallsreihenfolge mischt einmal pro vollständigem Durchlauf und erhält die verbleibende Reihenfolge über Schleifenaktualisierungen. Die gewichtete Reihenfolge folgt ihren Gewichten, siehe unten. Der Cursor ist lokal für Bildschirm, Playlist, Seite und Primitive, bleibt über Neustarts erhalten und wird bei Änderung von Filter, Reihenfolge oder Batch-Policy zurückgesetzt. Die Offline-Wiedergabe verwendet den letzten erfolgreichen Schnappschuss. Leere Übereinstimmungen überspringen das Primitive und jede resultierende leere Seite.
Speichern Sie das obige Selector-Objekt als selector.json und prüfen Sie dann den aktuellen Kandidatenkatalog vor der Veröffentlichung:
screenrig media selector-preview selector.json --primitive video
Die Vorschau gibt matched_count zurück, dateinamegeordnet candidates mit Medien-IDs und Tags sowie die normalisierte selector-Richtlinie. Bei zufälliger Reihenfolge zeigt sie den Pool und die Shuffle-Richtlinie; sie wählt nicht das Shuffle des Players, setzt keinen Cursor vor, erstellt keine Wiedergabeberechtigung und ändert kein Manifest. Bei gewichteter Reihenfolge gibt sie für jeden Kandidaten weight und share_percent sowie cycle zurück. --rect WxH (API rect: {width, height}) ist die Größe des Slots und ist mit fit: "aspect" erforderlich; die ausgeschlossenen Treffer stehen in excluded mit dem Grund aspect_mismatch. Bildselektoren übergeben --primitive image. Die API ist POST /api/selectors/preview mit { "primitive": "video", "selector": ... }. Sie verwendet das authentifizierte Projekt und dieselben Übereinstimmungsregeln wie die Wiedergabe. Katalogänderungen nach der Vorschau werden beim nächsten Schleifenende der Wiedergabe berücksichtigt.
Der statische Bundle-Export friert dynamische Übereinstimmungen als exakte IDs ein und mischt einen random-Selektor einmal. Er bewahrt die Wiedergabe einzeln oder komplett; eine begrenzte Laufzeitsequenz mit batch_size und one_at_a_time: false erfordert vor dem Export das Entfernen dieses Feldes oder die Auswahl expliziter IDs. Dies verhindert das stille Verlieren eines Laufzeit-Batch-Cursors in einem statischen Bundle.
Gewichtete Rotation und Seitenverhältnis-Anpassung
order: "weighted" rotiert die Creatives eines Slots nach Gewicht, sodass jeder Sponsor seinen Anteil an den Wiedergaben behält. weights ordnet einer Medien-ID (med_...) oder tag:NAME eine ganze Zahl von 1 bis 1.000 zu, mit höchstens 64 Schlüsseln. Es funktioniert mit by von all, tag oder folder:
{
"by": "all",
"order": "weighted",
"one_at_a_time": true,
"weights": { "tag:Acme": 50, "tag:Globex": 30, "tag:Initech": 20 },
"fit": "aspect"
}
Gewichte von 50, 30 und 20 liefern in jedem Zyklus genau 5, 3 und 2 von 10 Wiedergaben, und ein Neustart setzt mitten im Zyklus fort. Das Gewicht eines Elements ist sein Medien-ID-Schlüssel, falls vorhanden; sonst der alphabetisch erste Schlüssel tag:NAME unter den Tags, die es trägt, gleichmäßig aufgeteilt auf die Elemente der Auswahl, die ihn tragen, sodass der Anteil eines Sponsors unabhängig von der Anzahl seiner Creatives gleich bleibt; sonst zählt das Element als eigene Gruppe mit Gewicht 1. Ein Zyklus hat höchstens 4.096 Wiedergaben; Anteile werden nur dann darauf gerundet, wenn das exakte Verhältnis einen längeren Zyklus erfordert.
Die gewichtete Reihenfolge spielt pro Besuch ein Element ab, setzen Sie also one_at_a_time: true oder batch_size: 1. weights ist mit gewichteter Reihenfolge erforderlich und nur dort erlaubt; andernfalls gibt das Schreiben invalid_request zurück. Gewichtete Rotation ist eine Plus-Funktion: Ohne sie erhält ein Schreibvorgang, der einem Element ein Gewicht gibt, das es noch nicht hat, feature_not_in_plan, während gleichmäßige Rotation, das Behalten gespeicherter Gewichte und ihr Entfernen offen bleiben. Jeder Player spielt die gewichtete Reihenfolge ab. Ein Player, der die Host-Fähigkeit selector.weighted nicht deklariert, erhält random, und die Manifest-Diagnosen enthalten selector_order_downgraded.
fit: "aspect" an einem dynamischen Selektor behält nur Dateien, deren Verhältnis von Breite zu Höhe innerhalb von 5 % des Rechtecks des Slots liegt, auch bei einer Videowand oder einem Anzeigerahmen, gelesen beim Auflösen des Selektors. Ein Hochformat-Slot spielt nie eine Querformat-Datei ab. Am Player ändert sich nichts.
screenrig media selector-preview gibt den erwarteten Anteil jeder Datei eines gewichteten Selektors aus und listet mit fit: aspect die Dateien auf, die es weglässt; der Seiteneditor des Dashboards zeigt dieselbe Tabelle im Inspektor. Der statische Bundle-Export friert einen gewichteten Selektor als exakte IDs in Dateinamenreihenfolge ein; Gewichte bleiben nicht erhalten.
Bildschirm-Token in Tag-Selektoren
Das tag eines Tag-Selektors und jeder Eintrag seines tags-Filters darf {screen.field.NAME} oder {screen.id} sein, die Kennung des Bildschirms ohne das Präfix scr_, die ein Tag ist. Ein Token darf in einer Vorlage mit bis zu 128 Zeichen neben Buchstaben und Ziffern stehen. Der Server füllt den Token für jeden Bildschirm, wenn er dessen Manifest und Selektor-Snapshot erstellt, sodass eine Playlist die eigenen Medien jedes Bildschirms abspielt. Versehen Sie die Medien mit dem Tag Lobby oder Garage, setzen Sie das Feld jedes Bildschirms mit screenrig screen update scr_ID --field zone=Lobby und geben Sie dem Slot diesen Selektor:
{ "by": "tag", "tag": "{screen.field.zone}", "one_at_a_time": true }
Der eingesetzte Wert folgt den Tag-Regeln: 1 bis 32 Buchstaben oder Ziffern. Ein Bildschirm ohne das Feld oder mit einem Wert, der kein Tag ist, wählt nichts aus: Er spielt aus diesem Slot keine Datei ab, und die Manifest-Diagnosen enthalten screen_fact_missing oder screen_fact_invalid. Eine Änderung eines Felds erstellt das Manifest dieses Bildschirms neu. Ein Selektor mit einem Token lässt sich nicht in der Vorschau anzeigen (media selector-preview erwartet ein konkretes Tag) und wird von playlist export nicht eingefroren.
Bildschirm-Token in Iframe-Adressen und Anwendungsparametern
src und fallback_src einer iframe können Bildschirm-Token im Pfad, in der Query oder im Fragment einer http- oder https-Adresse tragen, ebenso das optionale params eines application-Primitivs: bis zu 16 Namen aus 1 bis 32 Kleinbuchstaben, Ziffern oder Unterstrichen (ticket und policy sind reserviert) mit Werten von bis zu 512 Zeichen. Der Server füllt sie für jeden Bildschirm:
| Token | Wert |
|---|---|
{screen.id} | Die Kennung des Bildschirms ohne sein Präfix scr_. |
{screen.name} | Der Name des Bildschirms. |
{screen.timezone} | Die wirksame IANA-Zeitzone des Bildschirms: seine Überschreibung, sonst die Zone, die sein Player meldet, sonst UTC. |
{screen.field.NAME} | Das Feld NAME des Bildschirms, 1 bis 32 Kleinbuchstaben, Ziffern oder Unterstriche. |
{screen.location.lat}, {screen.location.lon} | Sein Standort in Dezimalgrad. |
{screen.location.name}, {screen.location.address} | Sein Ortsname und seine Straßenadresse. |
{
"primitive": "iframe",
"src": "https://maps.example.com/directory?kiosk={screen.field.kiosk_id}&level={screen.field.level}",
"title": "Directory"
}
Der Schreibvorgang speichert die Vorlage wie geschrieben, geschweifte Klammern eingeschlossen. Das Manifest jedes Bildschirms trägt seine eigene Adresse, jeder Wert prozentkodiert für seine Stelle in der URL: Ein kiosk_id von B 2&3 wird zu B%202%263. Ein Token im Schema, in den Zugangsdaten, im Host oder im Port oder in einem YouTube-Link, einem Google- oder Microsoft-Dokumentlink oder einer BI-Ansichtsadresse ist invalid_request bei src (oder fallback_src). Das Veröffentlichen überspringt die Framing-Prüfung für eine src mit Token, und Vorschauen zeigen die Vorlage wie geschrieben.
Ein Bildschirm, dem ein Wert fehlt (ein nicht gesetztes Feld, kein Standort), oder dessen Werte sich zu einer Adresse über 2048 Zeichen oder zu einer mit einem Pfadsegment . oder .. füllen, erhält kein solches Iframe und keine solche Anwendung, und seine Manifest-Diagnosen enthalten screen_fact_missing oder screen_fact_invalid; eine leer gebliebene Seite wird verworfen. Jeder Schreibvorgang, der einen solchen Bildschirm erreicht (ein Playlist-Schreibvorgang, screen assign, screen update, eine Flottenzuweisung, eine genehmigte Prüfung), antwortet mit einer screen_fact_missing-Warnung, die die Tokens, die ersten 20 Bildschirm-IDs und deren Anzahl nennt. Das Ändern eines Felds oder Standorts erstellt das Manifest der betroffenen Bildschirme neu.
Für eine Anwendung erreichen die gefüllten Parameter, zusammen höchstens 4096 Zeichen nach der Prozentkodierung, sie auf jedem Player in context.params (SDK). Die Player-Web-App und die Player, die sie ausführen (Samsung Tizen, BrightSign, LG webOS und Vega), hängen außerdem jeden einzelnen prozentkodiert nach ticket an die Startadresse an, sodass die Anwendung location.search lesen kann. Das Feld url einer Vorlage kann ein ganzes Iframe-src sein, und sein Wert kann selbst Bildschirm-Token tragen, die beim Erstellen des Manifests gefüllt werden. Ein Tag-Selektor verwendet {screen.id} und {screen.field.NAME} auf dieselbe Weise (oben). Karten behalten ihre eigenen {screen.…}-Token.
Anwendungs-Primitive in derselben Playlist, die dieselbe Version festlegen, tragen dieselben params.
Medienverfügbarkeit
screenrig media availability med_ID --file rule.json legt fest, wann die dynamischen Selektoren (all, tag und folder) eine Datei auswählen dürfen. --clear entfernt die Regel und --expect-rev N schützt die Medienrevision. Die API ist PATCH /api/media/{id}/availability mit If-Match und { "availability": {...} | null }. Zum Setzen einer Regel ist Manage-Zugriff nötig; eine Propose-Anmeldeinformation erhält insufficient_access. Ohne --expect-rev liest der Befehl zuerst die aktuelle Revision des Mediums. Eine Datei, die auf die Überprüfung durch eine Person wartet, wird mit media_pending_review abgelehnt.
Die Regel ist die Uhrzeit-Grammatik des Zeitplans, gelesen in der Zeitzone jedes Bildschirms, und enthält mindestens ein Element: from und until (zivil YYYY-MM-DDTHH:MM, until exklusiv), windows (wöchentlich {days, start, end}), monthly ({day} oder {nth, weekday}, jeweils mit optionalem start und end), dates ({date, start, end}) und except (Daten, die ein Vorkommen entfernen, einschließlich über Mitternacht reichender Enden), mit bis zu 16 windows, 16 monthly-Einträgen, 100 dates und 100 except-Daten. Sie enthält weder data noch interaction. Der Creative eines Sponsors für das lange Wochenende, nur an Werktagabenden innerhalb des Zeitraums verfügbar:
{
"from": "2026-11-27T00:00",
"until": "2026-11-30T23:59",
"windows": [{ "days": ["mon", "tue", "wed", "thu", "fri"], "start": "17:00", "end": "22:00" }]
}
Nur Selektoren lesen die Regel: Ein expliziter Selektor mit id oder ids ignoriert sie, ebenso die Medienverweise von Karten, Soundtrack-Audio und Anzeigen-Creatives. Eine Datei verlässt die Auswahl und kehrt bei der nächsten Playlist-Schleife jedes Bildschirms zurück, innerhalb von etwa einer Minute nach der Grenze. Keine Playlist- oder Manifest-Revision ändert sich, und ein Offline-Player behält seine letzte Auswahl, bis er sich wieder verbindet. media selector-preview mit --timezone ZONE (Standard UTC) liest die Regeln in dieser Zone und listet die Dateien, die jetzt außerhalb ihrer Regel liegen, in excluded mit dem Grund outside_window auf.