**ffplayout** ================ This is a streaming solution based on python and ffmpeg. The goal is to play for every day an json playlist, while the current playlist is still editable. #### Check [ffplayout-gui](https://github.com/jb-alvarado/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 blank clip - send emails with error message - overlay a logo - trim and fade the last clip, to get full 24 hours, if the duration is less then 6 seconds add a blank clip - set custom day start, so you can have playlist for example: from 6am to 6am, instate of 0am to 12pm - copy mode, for more infos take a look in the wiki - normal system requirements and no special tools - we only need **ffmpeg**, **ffprobe** and a buffer tool like **mbuffer** or **pv** - no GPU power is needed - ram and cpu depends on video resolution, minimum 4 threads and 3GB ram for 720p are recommend - python version 3.5 and up JSON Playlist Example ----- ```json { "channel": "Test 1", "date": "2019-03-05", "begin": "06:00:00.000", "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" }, { "in": 0, "out": 2531.36, "duration": 2531.36, "source": "/Media/clip4.mp4" } ] } ``` `"begin"` and `"length"` are optional, when you leave **begin** blank, length check will be ignored and the playlist starts from the begin, without time awareness. If you leave **length** blank, the validation will not check if the real length of the playlist will match the length value. #### Warning: (Endless) streaming over multiple days will only work when the playlist have **both** keys and the **length** 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://clips.vorwaerts-gmbh.de/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/jb-alvarado/ffplayout/wiki/URL---Live-Source) Installation ----- - install ffmpeg, ffprobe and mbuffer - copy, or symlink, ffplayout.py to **/usr/local/bin/** - copy, or symlink, ffplayout.conf to **/etc/ffplayout/** - ceate folder with correct perissions for logging (check config) - copy ffplayout.service to **/etc/systemd/system/** - change user in service file - create playlists folder, in that format: **/playlists/year/month** - set variables in config file to your needs - use **get_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**