2018-01-07 07:58:45 -05:00
**ffplayout**
================
2018-01-07 11:22:24 -05:00
This is a streaming solution based on python and ffmpeg.
2018-01-07 07:58:45 -05:00
2019-03-06 09:06:06 -05:00
The goal is to play for every day an json playlist, while the current playlist is still editable.
2018-01-07 07:58:45 -05:00
2018-04-29 12:58:32 -04:00
#### Check [ffplayout-gui](https://github.com/jb-alvarado/ffplayout-gui): web-based GUI for ffplayout.
2018-01-07 07:58:45 -05:00
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
2018-08-13 15:59:21 -04:00
- copy mode, for more infos take a look in the wiki
2018-01-07 11:22:24 -05:00
- normal system requirements and no special tools
2018-01-07 07:58:45 -05:00
- we only need **ffmpeg** , **ffprobe** and a buffer tool like **mbuffer** or **pv**
- no GPU power is needed
2018-02-02 05:16:52 -05:00
- ram and cpu depends on video resolution, minimum 4 threads and 3GB ram for 720p are recommend
2018-01-07 07:58:45 -05:00
- python version 3.5 and up
2019-03-06 09:06:06 -05:00
JSON Playlist Example
2018-01-07 07:58:45 -05:00
-----
2019-03-06 09:06:06 -05:00
```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,
2019-03-12 16:13:58 -04:00
"source": "/Media/clip1.mp4",
"category": "music"
}, {
2019-03-06 09:06:06 -05:00
"in": 0,
"out": 149,
"duration": 149,
2019-03-12 16:13:58 -04:00
"source": "/Media/clip2.mp4",
"category": "movie"
}, {
2019-03-06 09:06:06 -05:00
"in": 0,
"out": 114.72,
"duration": 114.72,
2019-03-12 16:13:58 -04:00
"source": "/Media/clip3.mp4",
"category": "advertisement"
}, {
2019-03-06 09:06:06 -05:00
"in": 0,
"out": 2531.36,
2019-03-06 09:29:37 -05:00
"duration": 2531.36,
2019-03-12 16:13:58 -04:00
"source": "/Media/clip4.mp4",
"category": ""
2019-03-06 09:06:06 -05:00
}
]
}
2018-01-07 07:58:45 -05:00
```
2019-03-06 09:06:06 -05:00
`"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.
2019-03-06 09:25:14 -05:00
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,
2019-03-06 09:29:37 -05:00
"source": "rtmp://example.org/live/stream"
2019-03-06 09:25:14 -05:00
}
...
```
But be careful with it, better test it multiple times!
2019-03-06 09:26:57 -05:00
More informations in [wiki ](https://github.com/jb-alvarado/ffplayout/wiki/URL---Live-Source )
2019-03-06 09:25:14 -05:00
2018-01-07 11:22:24 -05:00
Installation
-----
- install ffmpeg, ffprobe and mbuffer
- copy, or symlink, ffplayout.py to ** /usr/local/bin/**
- copy, or symlink, ffplayout.conf to ** /etc/ffplayout/**
2018-04-29 12:09:06 -04:00
- ceate folder with correct perissions for logging (check config)
2018-01-07 11:22:24 -05:00
- 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**