Skip to content
Persistently maintain multiple Chromecasts as digital signage without a browser.
Java HTML JavaScript
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
daemon update readme and add service files Dec 15, 2019
gradle/wrapper initial Dec 8, 2019
receiver update receiver Jan 8, 2020
src/main remove extra reset Jan 8, 2020
.gitignore initial Dec 8, 2019
LICENSE initial Dec 8, 2019
README.md fix readme Dec 15, 2019
SAMPLE_cast_config.json Update SAMPLE_cast_config.json Dec 10, 2019
build.gradle bump dependency version Dec 19, 2019
gradle.properties initial Dec 8, 2019
gradlew initial Dec 8, 2019
gradlew.bat initial Dec 8, 2019
index.html readme and sender Dec 9, 2019
settings.gradle initial Dec 8, 2019

README.md

googolplex-theater

Icon

Persistently maintain multiple Chromecast screens on you local network without using your browser. Ideal for digital signage applications. Originally developed to display statistics dashboards.

There are several tools and libraries out there (see below), but this project is intended to be very minimalist. There is a simple UI to trigger refreshes. There is no backing database or database dependencies, rather there is a simple JSON config file which is watched for changes. The JSON configuration is conveyed to the receiver application, which by default accepts url to display in an iframe. The receiver application can be customized easily to suit your needs.

Requirements

  • Java 8 or later. The gradle wrapper is used to build this application.
  • The application must run on the same network as your Chromecasts.
  • Multicast DNS must work on your network and on the machine you run the application on.
  • IMPORTANT: URLs must be HTTPS and must not deny framing

Compilation

./gradlew shadowJar

The result of this is a fat-JAR (a JAR with all dependencies): build/libs/googolplex-theater-all.jar

Configuration

A sample cast configuration is provided in SAMPLE_cast_config.json. Copy over to cast_config.json and edit accordingly. The location of your configuration can be customized using a command line argument. The file is automatically watched for changes. Some example use cases involve using cron and putting your config under version control and pulling from origin periodically, or downloading from S3/web, or updating using rsync/scp.

Running

java -jar build/libs/googolplex-theater-all.jar --help

will show all usage options.

java -jar build/libs/googolplex-theater-all.jar

will run the application with default settings.

To provide resiliency, it is recommended to run the application as a daemon. See service descriptor files for upstart, systemd, launchd. They should work with minor modifications. Please refer to their respective installation guides to enable on your system.

Case Study: Grafana Dashboards

The maintainer has used this to show statistics dashboards in an software engineering context.

  • Configure and name your Chromecasts.
  • Create one Grafana playlist per device.
  • Figure out how to use proper Grafana auth (proxy, token, etc).
  • Make your cast config file with each playlist url per device.
  • Place the cast config file under version control (git) or store it someplace accessible (http/s3/scp).
  • Compile application locally.
  • Copy application over to Raspberry Pi.
  • Use a Raspberry Pi and install Java runtime.
  • Add a cron job to pull the cast config file from wherever you stored it (alternatively configure something to push the file to the Raspberry Pi).
  • Run the application as a daemon using systemd or upstart or whatever you want.
  • Config is updated periodically by the platform health tean as our dashboard needs change.
  • In the event that a screen needs to be refreshed by any staff member by accessing the UI and hitting a few buttons.s

Using a Custom Receiver

If you wish to customize the behavior of the receiver from just displaying a single URL in an IFRAME, see the example custom receiver in receiver/custom.html.

For custom receivers, you will be required to sign up as a Chromecast developer and also configure devices for development.

Currently the device name and settings are printed to the screen. Customize the listener handler to do as you wish.

Host your modified file via HTTP on your hosting provider of choice. Then point your new custom receiver application towards that page's URL.

Pass your APP_ID in as a command line argument when you run, and your receiver will be loaded up.

Contributions

This is intended to be minimalist and easy to set up, so advanced features are not the goal here. Some other projects listed below may be more suited for your use case.

This is a side project, so the maintainer provides no guarantee to the speed at which submissions can be accepted given the need to test this with hardware.

Run spotless to ensure everything is properly formatted:

./gradlew spotlessApply

Related Projects

This application overlaps in functionality with some of these fine projects:

Protocol implementations

Foundational work has been done to research how the Chromecast protocol works and these protocol libraries have been developed in a variety of languages. These are simple multipurpose bindings rather than logical implementations. A lot of the headless senders are built off of these.

Browser Senders

These applications cast directly from your browser. You may need to have your browser running. There are usually no persistence or reconnect capability.

Headless Senders

These applications cast without a Chrome browser running, rather they utilized the Chromecast protocol to establish a communication session with the devices. They provide a level of persistence in the event of failures. They utilize a variety of storage backends and have varying degrees of setup and configuration. They may utilize multicast DNS service discovery.

This application is most similar to the headless sender projects. It does not use a protocol implementation library.

Name

It is designed for multiple Chromecasts, rather than a googol or googolplex. It is from The Simpsons. The developer made it singular and decided to use the American spelling. Googol sure does sound like the manufacturer of the Chromecast.

You can’t perform that action at this time.