Go to file
2019-03-12 11:25:42 +01:00
.gitignore work on json playlist format 2019-03-05 16:28:06 +01:00
ffplayout.conf stop threshold should be aware of buffer length 2019-03-12 10:45:35 +01:00
ffplayout.py apad and shortet only work in a separate filter graph 2019-03-12 11:25:42 +01:00
ffplayout.service create project 2018-01-07 13:58:45 +01:00
gen_playlist_from_subfolders.sh fix typo 2019-03-08 09:34:30 +01:00
LICENSE Update LICENSE 2018-03-06 17:07:43 +01:00
README.md better example urls 2019-03-06 15:29:37 +01:00

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: 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

{
    "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:

...
        {
            "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

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