Documentation

Put the Player on your screen

Install the screenRIG Player on the screen, keep it running, and let your agent publish the content. The same Player shows ordinary content and paid advertising for accounts that opt in; buyers pair nothing.

Which Players are available?

Players: the Player web app (PWA), Android on Google Play, Amazon Signage Stick, Apple TV, macOS, Windows, Linux and Raspberry Pi packages, BrightSign, and Samsung Smart Signage (Tizen). Install a native Player for the fastest, most reliable playback.

The Player web app (PWA) at play.screenrig.ai/player/ runs on any screen with a modern browser: a smart TV or commercial display with a built-in browser, a managed ChromeOS device in kiosk mode, a tablet, or a computer plugged into the screen. A status-only embed of the Player is at play.screenrig.ai/player/embed/status/.

Every Player shows a pairing code. Give it to your agent, and it takes it from there.

Primitive support by platform

Compare the six content primitives across Player platforms.

Six content types, compared across Player platforms
Player platformImageVideoStreamIframeApplicationCard
Web / PWAYesYesHLSYesYesYes
Android (standard)YesYesHLS + RTSP + multicast¹YesYesYes
Android (amazon flavor)YesYesHLS + RTSP + multicast¹YesYesYes
Linux (Qt, x86_64 artifact)YesYesHLS + RTSP + multicast¹YesYesYes
macOSYesYesHLSYesYesYes
Apple TV / tvOSYesYesHLSNoNoYes
WindowsYesYesHLSYesYesYes
BrightSignYesYesHLSYesYesYes

¹ Direct UDP/MPEG-TS multicast is optional and must be enabled on Android or Qt. It requires a network that carries the multicast group to the Player. Other Players use HLS; a multicast source can include an HLS alternative.

Apple TV supports images, video, HLS streams, and cards. It cannot display iframe web pages or packaged web applications. A playlist containing either web primitive is rejected; the last accepted playlist stays active.

Every Player platform above also plays the playlist soundtrack. The Player web app starts it once the browser allows sound; see Soundtracks.

Eventual sync

Android, Amazon Signage Stick, macOS, Windows, Linux and Raspberry Pi Players gradually align page changes with nearby Players showing the same playlist revision. Assign the same playlist to screens on one IPv4 subnet. Use fixed page durations of at least one second, cut transitions and no entrance animations. Each Player broadcasts one small page-start beacon and makes a tiny adjustment to its wait before the next page. Timing adjustments activate only after a second Player on that same playlist revision is discovered. Screens on different playlists do not influence one another. A lone screen keeps its normal playback timing; the group follows the median playback position once peers join.

The network must allow device-to-device UDP broadcast on port 49817. Allow local-network access when the device asks. Screens keep playing through packet loss, power cycles and network partitions, and converge again as page beacons arrive. Each added wait is capped at 40 milliseconds. Long pages and large timing differences take longer to converge; this synchronizes page changes rather than video frames or soundtracks.

To bring a location close together quickly, ask your agent to restart playback on its screens with screen reload --tag LOCATION, replacing LOCATION with their shared tag. The Players restart eligible playlists at the first page and finish alignment through their regular beacons. Pairing and downloaded content stay in place.

Install a native Player

Where to get each native Player
PlatformGet the Player
Android TVs, tablets, and signage boxes (Android 9 or later)Google Play or the Android APK
Amazon Signage Stick and Fire TV SticksAmazon Appstore
Apple TVApp Store
macOSMac App Store
iPhone and iPadApp Store
WindowsMicrosoft Store
Linux (x86_64)Linux package from screenrig.ai/linux/
Raspberry Pi (64-bit)Linux aarch64 package from screenrig.ai/linux/
Samsung Smart Signage (Tizen)Native Player
BrightSignscreenrig.ai/brightsign/

Every download is also on the Downloads page.

  1. 01

    Install the Player for your screen device.

  2. 02

    Launch it. It opens full screen and shows a pairing code.

  3. 03

    Give the pairing code to your agent. It pairs the screen and publishes to it.

Each native Player downloads media once, caches it, and replays it from local storage.

Install the Android APK

Use the APK on Android TVs, Google TV devices, tablets, and signage boxes on Android 9 or later that do not use Google Play. Use it when you install by ADB.

The APK is signed and public. It is the same Player as the Google Play build. Its file name carries the version, so use https://screenrig.ai/android/manifest.json as the only pointer to the current file.

Before you start, turn on developer options and USB debugging or network debugging on the device. You also need adb on your computer.

  1. Connect to the device. For a network device, run adb connect DEVICE_IP:5555.

  2. Download, check, and install the APK:

    Download, check, and install the APK
    curl -fsSL https://screenrig.ai/android/manifest.json -o manifest.json
    path=$(jq -r .player.path manifest.json); sha=$(jq -r .player.sha256 manifest.json)
    curl -fsSLO "https://screenrig.ai$path"
    echo "$sha  ${path##*/}" | sha256sum -c -
    adb install -r "${path##*/}"
    adb shell am start ai.screenrig.player
  3. The Player opens full screen and shows a pairing code. Give the code to your agent.

Start at boot

Start on boot is on by default. It is a switch in the Player operator settings: once the screen is paired, press OK on the remote to open the menu and choose Settings. On Android 9, no permission is needed. On Android 10 and later, grant Display over other apps unless the device is device-owner managed: select Start on boot and follow its prompt. Where a permission screen is available, the Player asks when it first shows its pairing code: select Open settings and allow Display over other apps. Until the permission is granted the row reads Permission required and the Player does not start at boot. You can also grant it with ADB:

Start at boot
adb shell cmd appops set ai.screenrig.player SYSTEM_ALERT_WINDOW allow

On Fire OS 8, use ADB to grant this permission; its settings screen does not provide it.

Screensaver

On Android TV and Google TV, screenRIG is one of the TV's screensavers. Open Screen saver in the TV's Settings and select screenRIG. When the TV would start its screensaver, the Player comes to the front and plays your content. No permission is needed.

Updating

Run the install steps again. Android installs the higher version over the installed one and keeps your pairing. Only a higher version replaces the installed one.

Google Play

The APK and the Google Play build share package ai.screenrig.player. If the Google Play build is installed, uninstall it first. Pair the Player again after you install the APK.

Linux and Raspberry Pi

The Linux Player is one self-contained package for 64-bit Linux, built for x86_64 PCs and for aarch64 boards such as the Raspberry Pi. Qt, Qt WebEngine and GStreamer are inside the package. The machine needs the glibc version listed for its architecture at screenrig.ai/linux/, a Wayland session or the cage kiosk compositor, and its own GPU drivers, fonts, CA certificates and audio service.

Install it with the installer, which picks the build for the machine and verifies it against SHA256SUMS:

Quick install
curl -fsSL https://screenrig.ai/linux/install.sh | sh

On a dedicated screen, add --kiosk (sh -s -- --kiosk) to start the Player at boot inside cage under a systemd service. Run the installer again to upgrade, or with --uninstall to remove it. Manual install: download screenrig-player-linux-x86_64.tar.gz or screenrig-player-linux-aarch64.tar.gz and SHA256SUMS from screenrig.ai/linux/, check them with sha256sum --ignore-missing -c SHA256SUMS, extract to /opt/screenrig-player, and run /opt/screenrig-player/screenrig-player.

Debian 13, Raspberry Pi OS (trixie, 64-bit), Ubuntu, Fedora and Arch Linux run the Player when they meet the package's glibc requirement. Debian 12 and Raspberry Pi OS bookworm ship an older glibc; upgrade them first. Per-distribution packages for a kiosk install are in the Linux download notes.

Raspberry Pi

Use Raspberry Pi OS (64-bit) based on trixie; the 32-bit and bookworm images cannot run the Player. Raspberry Pi 5 decodes HEVC in hardware up to 4K, so upload 4K video with screenrig media upload --codec hevc; H.264 suits 1080p. Raspberry Pi 4 plays 1080p. Raspberry Pi OS Lite with --kiosk boots straight into the Player.

Video walls

One Linux Player drives two or three displays as one wall. A Raspberry Pi 5 drives two; an Intel mini PC such as the Quieter 4C drives two or three. The wall needs the --kiosk install and wlr-randr (sudo apt install wlr-randr).

screen show lists the screen's outputs, for example HDMI-A-1. Name them in physical order, left to right for a row and top to bottom for a column. --rotation turns every display clockwise by 0 (the default), 90, 180 or 270 degrees; 90 and 270 are portrait panels.

Set and clear a wall
screenrig screen wall set SCREEN_ID --outputs HDMI-A-1,HDMI-A-2 --arrangement row [--rotation 0|90|180|270]
screenrig screen wall clear SCREEN_ID

After a wall change each display shows its number and output name for 20 seconds, so you can check the order.

A playlist built for the wall carries a format (displays, arrangement and orientation) and one page canvas, in 1080p design units per display. A 4K panel needs nothing different. A screen plays a wall playlist only when its wall has the same shape.

Wall canvas by displays, arrangement and orientation
DisplaysArrangementLandscape canvasPortrait canvas
2row3840 × 10802160 × 1920
2column1920 × 21601080 × 3840
3row5760 × 10803240 × 1920
3column1920 × 32401080 × 5760

Place an item with displays: [1,2,3] spans the wall, [2] sits on one display and [1,2] spans two. Or give a free rect on the wall canvas. A card lays out inside its displays, so center on [2] sits in the middle of display 2; without displays it uses every display. On a screen with a wall, an ordinary playlist (no format) plays mirrored on every display.

Render wall video at the wall's aspect ratio within 4K, such as 3840 × 720 for three landscape displays in a row and 3840 × 1080 for two, and place it with content_fit: fill. Keep text and faces off the seams between displays.

json
{
  "name": "Lobby wall",
  "format": { "displays": 3, "arrangement": "row", "orientation": "landscape" },
  "pages": [
    {
      "id": "welcome",
      "canvas": { "width": 5760, "height": 1080, "background": "#000000FF" },
      "transition": { "type": "crossfade", "duration_ms": 500 },
      "advance": { "mode": "media_end" },
      "primitives": [
        {
          "id": "film",
          "primitive": "video",
          "selector": { "by": "id", "media_id": "med_01EXAMPLEWALL000000000" },
          "displays": [1, 2, 3],
          "layer": 0,
          "content_fit": "fill"
        },
        {
          "id": "menu",
          "primitive": "card",
          "card": "crd_01EXAMPLEMENU000000000",
          "layout": "center",
          "displays": [2],
          "content_fit": "fill"
        }
      ]
    }
  ]
}

Install the Player web app

  1. 01

    Open play.screenrig.ai/player/ on the screen device.

  2. 02

    On iOS, use Safari: Share → Add to Home Screen. On Android, use Chrome: Install app or Add to Home Screen.

  3. 03

    Open the installed PWA and follow its displayed setup instructions.

  4. 04

    Keep the PWA in the foreground on the screen device.

A Player pairs with the API of its own environment: play.screenrig.ai with api.screenrig.ai. When the CLI uses another API origin, --api-url https://api.DOMAIN, open https://play.DOMAIN/player/ instead.

Your agent needs the official plugin to publish content to the Player.

ChromeOS kiosk

Managed ChromeOS devices, such as a Chromebox, a Chromebase or a ChromeOS Flex PC, run the Player web app as a kiosk app from the Google Admin console. The device boots straight into the Player, keeps it full screen, and starts it again if it closes.

  1. 01

    In the Google Admin console, open Devices → Chrome → Apps & extensions → Kiosks and select the organizational unit for your screens.

  2. 02

    Add the app by URL: your project's fleet link, or https://play.screenrig.ai/player/ with the trailing slash to pair each device by its code.

  3. 03

    Set it to auto-launch, and turn on Allow app to manage power.

  4. 04

    In the device's kiosk power settings, set the idle action to Do nothing, so the screen never dims or sleeps.

  5. 05

    Restart the device. With a fleet link, the Player joins your project as a new screen on its own. Without one, it shows its pairing code: give the code to your agent.

In the kiosk session the Player reads the device's serial number and the asset ID and location you annotate on the device in the Admin console. They appear in the screen's host details in the dashboard and in screen show. When a powerwash or reinstall gives the device a new Player identity, the serial lets your agent reconnect it to its existing screen with screen recover instead of pairing a new one.

For the soundtrack, allow autoplay for https://play.screenrig.ai with the AutoplayAllowlist policy.

One URL for the whole fleet

A fleet link is one Player URL that turns every device opening it into its own screen in your project, with no pairing code. Ask your agent for one (screenrig fleet-links create), or create it in the dashboard under Settings → Fleet links, and put its URL in the kiosk app in step 2. Each new device joins with the link's tags and playlist and takes its name from the asset ID, then the location, you annotate on it in the Admin console.

A device that is already a screen stays that screen through restarts and updates. After a powerwash or reinstall it comes back as the same screen, once its old Player identity has been silent for ten minutes. Cap a link with a most-screens limit, turn it off to stop new screens joining, or rotate it to replace a URL that was shared too widely. Screens a link already made keep playing through all three. Keep the URL in the Admin console: it creates screens in your project.

Display power over RS-232

Connect the display's RS-232 control port to the ChromeOS device with a USB serial adapter, and grant the adapter to https://play.screenrig.ai with the SerialAllowUsbDevicesForUrls policy (the adapter's USB vendor and product IDs) or SerialAllowAllPortsForUrls. At start the Player finds a Samsung (MDC), LG, NEC or Philips (SICP) display on the granted port at the factory-default 9600 baud and display ID. It then switches the display's own power, standby and back on, and reports the power state the display reads back. The screen's host capabilities list Display power (RS-232).

Advertising on your screens

The Player you already use is also the ad Player: there is nothing extra to install.

Selling is a choice you make per screen, through the same official plugin and CLI. Opt an owned screen in with screenrig ads inventory update scr_LOBBY --enabled and describe it publicly with the site name, city, region, venue type, and audience tags you choose. Define reusable ad slots with screenrig ads slots create — accepted media (image or video), the longest image and video durations, and an optional rate override for that slot. A slot definition alone changes nothing on the glass; placing its adslot page in one of your playlists is what gives that screen an actual ad break, and every other page keeps playing normally.

Paid ads require a Player that supports adslot playback. The server serves a Player without that support only the ordinary playlist, so that screen plays house content and no paid advertising; a capable Player requests a fill for each adslot page and skips any slot it cannot fill, keeping the playlist moving. Buyers pair nothing — they buy from your inventory through the invitation you send with screenrig invitations create --kind ad-buyer --email ADDRESS --screen-id scr_LOBBY.

Advertising rates and serving fees are on the pricing page; the plugin, project, and first-screen steps are in the Start guide.

Commercial displays

Samsung Smart Signage (Tizen) runs the native screenRIG Player.

BrightSign players running OS 9.1 or newer auto-start the screenRIG Player from an SD card. Extract the package to the card root, insert it, and power on. The player applies its hardware policy and opens the screenRIG Player.

  1. 01

    Set the player's clock and network first. A wrong clock stops the secure connection.

  2. 02

    Extract it to the root of a FAT32 SD card and insert the card.

  3. 03

    Power on the player. It starts the package and shows the pairing code.

  4. 04

    Give the code to your agent.

Other commercial displays with a built-in HTML5 browser or URL launcher can open play.screenrig.ai/player/ directly and follow the web app steps above. The display must keep the page in the foreground and allow it to store data. Android TV and streaming boxes with a full web browser can do the same: open play.screenrig.ai/player/ in the box’s browser, give your agent the pairing code, and keep the page in the foreground.

Streams and fallback images

Use stream for a live feed and video for an uploaded file. A stream needs a ready uploaded image from the same account as its fallback. The image appears while connecting, if playback stalls, or when the Player cannot receive the source.

Prepare a feed

Use a public HTTPS HLS playlist without embedded credentials, or a camera's RTSP URL. For the Web Player, the playlist, segments, and keys must allow cross-origin requests from the Player origin. H.264 video with AAC audio is a practical starting profile; decoding depends on the device. Audio is muted by default, and browser autoplay rules still apply.

Choose timing and transport

Use at most one stream per page and duration-based advance. Supply one or two sources with different protocols, in preference order. A source can give only its url: an https URL is HLS, an rtsp or rtsps URL is RTSP. For multicast, use an administratively scoped IPv4 group in 239/8 and a UDP port; add an HLS alternative for other Players. screenRIG does not convert multicast into HLS. Streams are not cached for offline replay; the fallback image is.

Play a camera directly

Android, Amazon and Linux Players open an rtsp:// or rtsps:// source themselves, from the Player's own network, with no relay. Use the URL the camera or recorder gives, including a user:pass@ login. For a UniFi Protect camera, turn on RTSP for a channel in the camera's Protect settings and copy its URL; the Player needs a route to the Protect console. Other Players play the HLS alternative or show the fallback image.

Enable multicast reception

On Android, open the operator menu, choose Settings and enable Multicast streams; it is off by default. On Qt, enable SCREENRIG_ENABLE_MULTICAST=1 in the Player launch environment and check --capabilities-json. The network must carry the selected multicast group and port. This version does not provide DRM, RTP, custom authentication headers, or stream transcoding.

Soundtracks

A playlist soundtrack plays on every Player. The Player downloads and verifies each MP3 track with the rest of the playlist, then plays the tracks in order while pages change. Page transitions never stop or restart the music, and the soundtrack keeps playing offline from the cached tracks. A cued soundtrack (cued: true) plays a track only when a page cue starts it and is silent after that track ends until the next cue. A page whose advance is audio_end ends when its cued track ends; if the Player cannot play the track, the page lasts the track's length.

When the agent republishes the playlist, the current track keeps playing if it is still in the new soundtrack. The soundtrack volume is multiplied by the Player volume, so the operator volume setting or the display's own volume control still decides how loud the screen is.

Browsers can block sound until someone touches the page. The Player web app keeps showing pages and starts the soundtrack on the first tap or key press. For an unattended kiosk browser, allow autoplay with sound; in Chromium, launch with --autoplay-policy=no-user-gesture-required; on a ChromeOS kiosk, set the AutoplayAllowlist policy. Native Players need no setting.

Device health and display control

Every Player reports device health every fifteen minutes, and at once when its display connection or power changes. It declares the device controls it supports: remote reboot, and the display power methods it can use. What a Player can read and switch depends on the platform and on how the device is set up.

Each screen's actual capabilities appear in screen show as its host capabilities, next to its latest health report, so the agent knows before it acts whether that screen can reboot or switch its display. The table shows what each Player can do.

Device health and display control by Player
PlayerHealth reportedDisplay powerReboot
Web / PWAPlayer uptime, CPU cores, display state, and network type where the browser exposes itRS-232 on a ChromeOS kiosk with a granted serial port; on-screen blackoutNo
Android (Google Play)Device and Player uptime, memory, CPU cores, display connection and power, network and Wi-Fi signal, crashes, and renderer restartsOn-screen blackoutNo
Android (managed, device owner)As Google Play, plus CPU temperatureBacklight; HDMI-CEC on a privileged install; on-screen blackoutYes
Amazon Signage StickAs Google PlayOn-screen blackoutNo
Linux and Raspberry PiDevice and Player uptime, memory, CPU load, temperature, display connection and power, network and Wi-Fi signal, and crashesHDMI-CEC with a CEC device and cec-ctl; DDC/CI where ddcutil finds the monitor; panel backlight; on-screen blackoutYes, after a --kiosk install
macOSDevice and Player uptime, memory, CPU load and cores, display connection and power, and network typeDisplay sleep, once it has worked on that Mac; on-screen blackoutNo
Apple TVDevice and Player uptime, memory, CPU load and cores, display power, and network typeOn-screen blackoutNo
WindowsDevice and Player uptime, memory, CPU cores, display connection and power, network type, and renderer restartsDDC/CI where the monitor answers; monitor off; on-screen blackoutYes, when the account may shut down the PC
BrightSignThe web Player readingsHDMI-CEC through the BrightSign shell; on-screen blackoutYes, through the BrightSign shell

Control a screen on the device

Once the screen is paired, press OK on the remote to open its operator menu. The first screen of the menu holds:

  • Screen name. Select it to rename the screen.
  • Playlist. Its hint is the playlist the screen plays. Select it, or press Right, to list every playlist in the project in alphabetical order, and choose one to switch the screen to it. A takeover or playlist schedule still decides what plays; the hint always names what is playing.
  • Page. Its hint is the name of the page now showing; a page's name is its identifier. The menu opens on this row. Press Left or Right to step to the previous or next page, or select it to list the playlist's pages in playback order and choose one to jump to. The chosen page starts from its beginning.
  • Settings. Brightness, volume and reset, and on Android multicast reception and start on boot.
  • Exit settings closes the menu from any screen.

Back, or Left on a list, returns to the previous screen. The menu closes by itself after 60 seconds without input.

Pause and resume

Press Play/Pause on the remote (K on Windows) to pause the screen; the Paused chip shows. A paused screen holds its page timer, the page's video and the soundtrack. Press the button again and everything continues from where it stopped: a page set to show for 20 seconds, paused at 10 seconds, shows for the remaining 10 seconds, and the music resumes from the same point instead of starting over. Moving to the next or previous page, or choosing one in the menu, keeps the pause: the new page waits at its start until you resume. Cards, web pages and live streams keep running while paused. A pause ends by itself after 60 minutes.

Check your first screen

Give your agent the intended screen and ask it to publish a simple welcome message. Ask for a screenshot when the Player is showing it.

If the screen is absent from the agent's list, confirm that the Player is open and its setup is complete. If content does not update, check the device's connection and ask the agent to inspect screen state and playback evidence.

Once the screen is paired, its operator menu names the screen and shows its playlist and page.

Continue with the agent workflow.