![IronCast logo](https://gitlab.com/spease/IronCast/-/raw/master/ironcast/img/icon.png) 

# 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 that clicking 'share to screen.' 

## Install

These instruction are for the Raspberry Pi 4.

```shell
$ # Install dependencies.
$ sudo apt install libcec-dev build-essential python3-dev libgl1 libglx-mesa0 libmtdev1 libgles2-mesa-dev
$ pip install --upgrade pip # Upgrade pip
$ python3 -m venv env  # Set up virtual environment
$ . env/bin/activate  # Activate virtual environment
$ pip install ironcast  # Install IronCast
```

## Server Usage

```shell
$ start-ironcast
```

This will start up IronCast and make it ready to receive streaming requests delivered from a DLNA Media Controller, such as BubbleUPnP.

## 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 that will simply play your content.

## 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]` are useful.

## Development References

- [DLNA Spec](https://web.archive.org/web/20090123025143/http://upnp.org/specs/av/av3.asp)
- [CEC Frame Codes](https://www.cec-o-matic.com/)
- [UPnP Spec](https://openconnectivity.org/upnp-specs/UPnP-arch-DeviceArchitecture-v2.0-20200417.pdf)


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.

