**ffplayout-engine** ================ [![made-with-python](https://img.shields.io/badge/Made%20with-Python-1f425f.svg)](https://www.python.org/) [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) The purpose with ffplayout is to provide a 24/7 broadcasting solution that plays a *json* playlist for every day, while keeping the current playlist editable. #### Check [ffplayout-gui](https://github.com/ffplayout/ffplayout-gui): web-based GUI for ffplayout. Features ----- - have all values in a separate config file - dynamic playlist - replace missing playlist or clip with a dummy clip - playing clips from [watched folder](https://github.com/ffplayout/ffplayout-engine/wiki/Watch-Folder) - send emails with error message - overlay a logo - overlay scrolling text - trim and fade the last clip, to get full 24 hours - when playlist is not 24 hours long, loop filler clip until time is full - set custom day start, so you can have playlist for example: from 6am to 6am, instate of 0am to 12pm - normal system requirements and no special tools - no GPU power is needed - stream to server or play on desktop - add filters to input, if is necessary to match output stream: - **yadif** (deinterlacing) - **pad** (letterbox or pillarbox to fit aspect) - **framerate** (change fps) - **scale** (fit target resolution) - **aevalsrc** (if video have no audio) - **apad** (add silence if audio duration is to short) - **tpad** (add black frames if video duration is to short) Requirements ----- - python version 3.6+ - python module **watchdog** (only when `playlist_mode = False`) - **ffmpeg v4.2+** and **ffprobe** (**ffplay** if you want to play on desktop) - RAM and CPU depends on video resolution, minimum 4 threads and 3GB RAM for 720p are recommend JSON Playlist Example ----- ```json { "channel": "Test 1", "date": "2019-03-05", "length": "24:00:00.000", "program": [{ "in": 0, "out": 647.68, "duration": 647.68, "source": "/Media/clip1.mp4" }, { "in": 0, "out": 149, "duration": 149, "source": "/Media/clip2.mp4" }, { "in": 0, "out": 114.72, "duration": 114.72, "source": "/Media/clip3.mp4", "category": "advertisement" }, { "in": 0, "out": 2531.36, "duration": 2531.36, "source": "/Media/clip4.mp4", "category": "" } ] } ``` `"length"` are optional, when you leave it blank, there will be no check if real playlist length is correct. #### Warning: (Endless) streaming over multiple days will only work when config have **day_start** value and the **length** value of the playlist is **24 hours**. If you need only some hours for every day, use a *cron* job, or something similar. Source from URL / Live Stream ----- You can use sources from url or live stream in that way: ```json ... { "in": 0, "out": 149, "duration": 149, "source": "https://example.org/big_buck_bunny.webm" }, ... { "in": 0, "out": 2531.36, "duration": 0, "source": "rtmp://example.org/live/stream" } ... ``` But be careful with it, better test it multiple times! More informations in [Wiki](https://github.com/ffplayout/ffplayout-engine/wiki/URL---Live-Source) Installation ----- - install ffmpeg, ffprobe (and ffplay if you need the preview mode) - copy ffplayout.py to **/usr/local/bin/** - copy ffplayout.conf to **/etc/ffplayout/** - create folder with correct permissions for logging (check config) - copy ffplayout.service to **/etc/systemd/system/** - change user in **/etc/systemd/system/ffplayout.service** - create playlists folder, in that format: **/playlists/year/month** - set variables in config file to your needs - use **gen_playlist_from_subfolders.sh /path/to/mp4s/** as a starting point for your playlists (path in script needs to change) - activate service and start it: **sudo systemctl enable ffplayout && sudo systemctl start ffplayout** Start with Arguments ----- ffplayout also allows the passing of parameters: - `-c, --config` use given config file - `-f, --folder` use folder for playing - `-l, --log` for user-defined log file - `-p, --playlist` for playlist file You can run the command like: ``` python3 ffplayout.py -l ~/ffplayout.log -p ~/playlist.json ``` Preview Mode on Desktop ----- For playing on desktop set `preview = True` in config under `[OUT]`.