This project is used to display any video across multiple monitors using commodity hardware and software. Playback and syncronisation is mostly done using GStreamer.
- Python 3
- GStreamer 1.0 + pygst
- Raspi only: omx-player + gst omx extensions
- Setup your monitor config file (config.json)
- Start server.py
- Stream some video to port 9999 (see testsrc.sh or randomfile.sh)
- Start receivers
- Run receiver scripts gst-recv.sh or gst-recv-pi.sh (on raspi)
- Get an raspbian stretch image onto your sd card
- ssh onto your raspi
- clone this repo
- execute raspi-setup/setup.py
- Send some data (i.e. testsrc/randomfile.sh) to the uninteruptable input handler (Port 9999)
- The handler than proceeds to resize the input to fit a virtual canvas spanning all registered monitors (config.json).
- Then the render server crops the correct area for each monitor from the virtual canvas (leaving out borders).
- Encode the n sub videos in h264 (best format for raspi) and send via RTP
- Clients and Server sync them selves via RTCP (sending current frame + timestamp + length of queue)
- Clients buffer video for some time 7.1. Native clients decode and play directly on framebuffer 7.2. Rapi clients pass the video for accelerated decoding/playback to OMX-Player (where we can no longer guarantee sync)
TestSrc => Port 9999 RandomFile => Port 9999
Uninteruptable Input (9999) => Split + Resize to virtual canvas + Cut out display area => Send to raspi via rtp Raspi + Server Sync via RTCP
- Better documentation
- Remove config files + make it portable
- Setup tuning options in config
- If you're currently on 34C3 say hi to NHG/Kormarun/Tynsh at the NoName assembly
- Hack it