Skip to main content

Lightweight casting target for streaming music and video.

Project description

IronCast

A well-seasoned streaming ecosystem.

IronCast was born from a desire to replace cloud-based intrusive stream sticks with a open source, privacy-focused, entirely local alternative- while keeping the simplicity, ease of use, and light-weight interface.

Streaming to your TV should be no more complicated than clicking 'share to screen.'

Install

These instruction are for the Raspberry Pi 4. IronCast is currently in a beta state, and is rapidly changing faster than PyPi is updated- you may be better served installing it by cloning the repo and installing it via pip update -e . instead of the last step.

$ # Install dependencies.
$ sudo apt install libcec-dev build-essential python3-dev libgl1 libglx-mesa0 libmtdev1 libgles2-mesa-dev
$ sudo adduser ironcast --disabled-password --comment "IronCast Service User"
$ sudo adduser ironcast render; sudo adduser ironcast audio; sudo adduser ironcast video; sudo adduser ironcast input
$ sudo su ironcast; cd ~
$ python -m venv ironcast  # Set up virtual environment so your system packages aren't polluted
$ . ironcast/bin/activate  # Activate virtual environment
$ pip install ironcast  # Install IronCast
# At this point you can manually run IronCast with `start-ironcast` if you wish.
# Everything from this point on makes it run automatically.
$ exit
$ sudo ln ~ironcast/ironcast/lib/python3.13/site-packages/ironcast/ironcast.service /etc/systemd/system/
$ sudo systemctl daemon-reload
$ sudo systemctl enable ironcast
# For extra resiliency, you can also go into raspi-config and turn on the read-only file system.
# You will have to disable this to modify anything on the system or update IronCast,
# but this will make power outages less of an issue.

Client Usage

Once you open your DLNA client, you should see a place to choose a renderer. At that point, you should see your IronCast. Its name will be the title-cased hostname of the server it's running on, with any hyphens replaced with spaces.

For example, if the hostname of your Raspberry Pi is living-room-ironcast, then it will show up as a renderer as "Living Room IronCast."

Most DLNA Media Controllers, such as BubbleUPnP, will then make that renderer available in the 'share' dialog of media players. You can, for example, open up YouTube, click the 'Share' icon, and 'Share to Living Room IronCast' will be an available target.

Clients IronCast has been tested with:

  • [Android] BubbleUPnP - No gapless playback support.
  • [Android] PlayOnDLNA - Full Support.
  • [HomeAssistant] DLNA Digital Media Renderer - Track title doesn't seem to appear.

Contributing

To submit a contribution to IronCast, fork the repo and create a development/feature branch. Submit a pull request for your addition.

Code contributions must not reduce the pylint score, must be isorted, and must have had black run on it.

pip install -e . and pip install -e .[dev] can be used to pip install a local git repo, instead of the production version on PyPi.

To-do

In no particular order:

  • CEC: allow play/pause/stop/skip/seek/etc using the TV remote, not just the phone.
  • PLAYER: Create new player widget- kivy.uix.Video isn't cutting it.
  • PLAYER: Add gapless playback, then handle timeout/setInactive.
  • PLAYER: pause on last frame instead of black screen
  • PLAYER: Support AsyncImage preview
  • PLAYER: Create a SoundPlayer
  • PLAYER: start downloading as soon as we get URI, not on play
  • PLAYER: Better end of stream and stream error support.
  • PLAYER: After having paused on final frame for a while, issue a stop and go back to IdleScreen.
  • GUI: loading animation
  • GUI: Create a screensaver widget and move to a single IdleScreen.
  • GUI: create a volume widget
  • INFRA: Installation- provide systemd script
  • INFRA: support read-only filesystems
  • EVENTS: Create a proper variable store, add the rest of the UPnP variables
  • EVENTS: Properly queue event changes so none are sent if nothing new has happened, instead of sending them every 5s.
  • HARDWARE: Raspberry Pi Zero W2 support- target 1080p streaming. Inconsistantly laggy even with overclocking on a 24fps video.
  • HARDWARE: Raspberry Pi 4/5 support- target 4K streaming.
  • REPO: Automated CI/CD checks- black, pylint, isort. Add pre-commit for them as well.
  • REPO: Add pictures to the readme.

Development References

With thanks to mitnk- your implementation of tiny-dlna gave me ideas of where to start on this project, as well as the motivation to do so.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ironcast-0.1.2.tar.gz (37.6 kB view details)

Uploaded Source

File details

Details for the file ironcast-0.1.2.tar.gz.

File metadata

  • Download URL: ironcast-0.1.2.tar.gz
  • Upload date:
  • Size: 37.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.2.0 CPython/3.13.12

File hashes

Hashes for ironcast-0.1.2.tar.gz
Algorithm Hash digest
SHA256 2660eb08645a03ded4bc60fcf1b723b3fdac8e2b446e08dfb10e8f8e41ed5d49
MD5 226292900623d82f985e8891184844b4
BLAKE2b-256 a0640a7a9d530968e2e54e4ffe713209ab03133605a3689a5633b1fab2247cb8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page