OpenGL renderer

Multimedia content is displayed using OpenGL ES to take full advantage of modern mobile graphics hardware. A custom OpenGL graphics rendering engine draws multimedia content onto textured tiles at high speeds. The rendering engine is isolated from multimedia loading and decoding to seamlessly transition between items while maintaining maximum framerate at high resolutions.

A positionable Tile specifies a list of multimedia items and the rendering engine seamlessly transitions between the items using beautiful hardware accelerated GLSL shaders running on graphics hardware (GPU).

Multiple Layers of tiles can be displayed. Each independent layer can use transparency to supplement content with additional information and graphics. For example, custom branding, a clock and captions layer can be displayed on a layer above main content.

Because the preparation of images, videos, web pages and other graphics is separate from the rendering engine, presentation operates at full framerate creating a very professional output, even on low end devices.

Each layer is controlled by a Playlist. The playlist is used to sequentially display items on a tile. A special Composite item can define additional internal tiles. Internal tiles are also positionable and provide a list of items to display. This flexible, hierarchical design makes it possible build complex arrangements of coordinated multimedia.

To display an item on a tile, an internal player is used. A player reads a multimedia resource such as an image, video or web page and generates pixels to draw on a tile. Internal players provide an abstraction between the rendering engine and multimedia loading and decoding.

A tile is updated by a Tile Controller which selects the next item from a playlist, creates a new internal player which then generates pixel data for the tile.

Tile controllers

A tile controller runs on its own execution thread utilizing additional CPU cores available on modern hardware. Loading and preparing multimedia concurrently avoids stalling what is displayed on the screen.

A tile controller prepares the next item before the current item has finished displaying. This overlap makes it possible to transition between media with zero gap or blank screen. Another advantage is that if there are any problems preparing the next item, it can be skipped without visible disruption to playback.

Transition engine

Over 60 transitions are built in to SignageNode. These transitions can be used to blend items of content and enhance the viewing experience. The transition engine supports all media types and can transition between different tile arrangements when multiple tiles are displayed at the same time in a composite item. The list of transitions is configurable along with their duration. Because the transitions are in GLSL they run at 60fps on the GPUs and do not slow down other operations requiring the CPU.

Shader engine

SignageNode gains the hardware accelerated scaling technology incorporated into OpenGL. Additional graphics processing can be applied to tiles displaying multimedia. For example filmgrain can significantly enhance the visual quality of some videos while rendering at the native screen resolution at 60fps. Shaders are also included for color saturation, sharpen and blur.


The latest ExoPlayer library is used for video and audio decoding. ExoPlayer supports advanced streaming features such as HLS, DASH and SmoothStreaming adaptive playbacks. The distributed caching proxy transparently combines HLS requests so that multiple nodes playing the same stream only uses the bandwidth of a single node.


Video Ad Serving Templates are used to insert adverts into a list of multimedia. This standard is supported by SignageNode and can be used to commercialize digital signage deployments.

Our implementation gains the advantage of ahead-of-time media preparation to eliminate a start delay. All callbacks are made directly from SignageNode to support ad server impression counting.

By linking SignageNode to Hivestack, Vistar or PlaceExchange, it is possible to commercialize digital signage solutions.

Node finder

Multimedia can be shared to reduce Internet bandwidth requirements when there are multiple nodes on the same local network. The node finder uses UDP broadcast packets to announce and discover nodes on the local network.

Additional nodes are used to create a large distributed cache that all nodes on the local network can use. The node finder maintains a local database referencing cached multimedia and intelligently directs requests to the fastest nodes containing media.

The node finder dynamically updates the local database when new nodes become available and existing nodes become inaccessible.

Multiple storage and caching strategies are available to support a variety of local networks including fast cable connections and slower WiFi and local LTE networks.

Caching proxy

All multimedia content displayed by SignageNode is transferred through a caching proxy. The caching proxy is designed to store and serve data very efficiently to minimize the data transferred from the Internet. Any node on the local network can access the cached content in any other node without consuming Internet bandwidth.

Caching support includes HLS video streams where each segment can be cached and shared on the local network. This makes it possible to display a live stream on many devices while only consuming the Internet bandwidth of a single stream.

The cache can make use of all storage available on the device in addition to external storage devices. When there is no more storage available, infrequently used items are automatically removed.

Cache primer

When playing large lists of multimedia, SignageNode looks ahead to discover what is going to be displayed in the future. The cache is automatically primed so the data is available before it is needed for playback.

The cache primer eliminates video stalls caused by re-buffering and enables offline operation during network outages.

Internal web server

An internal web server provides core functionality for SignageNode.

The lightweight web server has been designed to handle both simple web page requests and transferring large binary objects such as 4K videos.

Running on port 9097, any web browser on the local network can connect to the web server, control setup using the web-based administration system and monitor the status.

  • Web-based administration
  • API request handling
  • Peer to peer communications
  • Multimedia file sharing

Administration interface

SignageNode can be configured from another device on the local network using the built in web-based administration interface.

Connect to the interface by entering the IP address of the node and the port 9097 into a web browser. For example:

The administration interface includes pages to view the current status including a screenshot and recent messages, a playlist editor, settings page and advanced diagnostic pages.


The status page provides a screenshot of what is displayed on the output screen. The screenshot makes it easy to remotely verify SignageNode is operating correctly especially when making changes to the playlist remotely.

A list of messages, warnings and errors is also included to help confirm operation and diagnose faults such as connectivity problems and media incompatibility. Many errors provide additional details that can be expanded to provide full diagnostic data.

Messages highlight the severity of the problem. SignageNode is designed to recover from most faults silently, this is often achieved by skipping the item causing the problem. Skips are listed on this page.


The playlist page displays the active TDJ used to display content on the screen (see docs). The text area makes it possible to modify the playlist and item properties directly and apply the changes immediately, or when the playlist progresses. The tabs provide access to each of the 4 layers which are rendered to the screen starting with the background and finishing with the second overlay layer.

To help with writing TDJ a number of playlist tools are available on the page. These include a Drag And Drop playlist creator, many examples ranging from simple to complex and options for linking to remotely managed playlists.


The settings page provides access to a large number of configurable settings that affect caching and playback. The page is divided into 3 tabs; General, Transitions and Data.

The general settings tab changes is used to configure how the player transfers multimedia from external sources and caches it for subsequent use. It is important to configure this correctly based on the local area network performance and storage available.

The transitions settings tab allows specific transitions to be enabled and disabled and the transition period to be set. The transitions and period is used when the item does not include its own transition properties.

The data tab provides access to name and value pairs that may be used elsewhere. A macro can reference this data to populate variables in a playlist TDJ.


The monitoring page displays live graphs of internal metrics. This includes:

  • Bandwidth estimate
  • Active transfer rate from Internet
  • Active transfer rate from LAN
  • Active internal transfer rate from cache
  • OpenGL frame rate
  • OpenGL draw time (milliseconds for last frame)
  • Number of texture updates per second
  • Number of active textures
  • Number of active players
  • Number of active video players
  • Number of active image players
  • Number of active WebView players
  • Connections through local cache
  • Transfer rate into local cache
  • Transfer rate out of local cache


The transfers page displays a visualization of data transfers from source to cache to players. When multiple SignageNodes are active on the same LAN, this page illustrates the operation of distributed caching between nodes.

SignageNode displays the amount of data transferred from sources and caches and calculates the overall cache efficiency. The items required in the future are counted by location to identify future dependence on network connectivity.

A list of recent transfers between components is also shown.


The speeds page displays a visualization of connectivity between nodes and speed of links between them.

Speeds listed represent average transfer rates between nodes. SignageNode will prioritize faster links for data transfers and dynamically adjust routes as nodes start and stop.

Additional Screenshots