ffplayout/README.md

138 lines
4.6 KiB
Markdown
Raw Normal View History

2019-03-30 20:17:32 +01:00
**ffplayout-engine**
2018-01-07 13:58:45 +01:00
================
2019-03-14 15:25:13 +01:00
[![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)
2018-01-07 13:58:45 +01:00
2019-06-05 11:23:52 +02:00
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.
2018-01-07 13:58:45 +01:00
2019-03-30 20:12:28 +01:00
#### Check [ffplayout-gui](https://github.com/ffplayout/ffplayout-gui): web-based GUI for ffplayout.
2018-01-07 13:58:45 +01:00
2019-06-06 18:30:51 +02:00
Features
2018-01-07 13:58:45 +01:00
-----
- have all values in a separate config file
- dynamic playlist
2019-03-30 21:28:25 +01:00
- replace missing playlist or clip with a dummy clip
2019-06-07 10:04:58 +02:00
- playing clips from [watched folder](https://github.com/ffplayout/ffplayout-engine/wiki/Watch-Folder)
2018-01-07 13:58:45 +01:00
- send emails with error message
- overlay a logo
2019-06-11 15:33:23 +02:00
- overlay scrolling text
- trim and fade the last clip, to get full 24 hours
2019-07-21 00:54:06 +02:00
- when playlist is not 24 hours long, loop filler clip until time is full
2018-01-07 13:58:45 +01:00
- set custom day start, so you can have playlist for example: from 6am to 6am, instate of 0am to 12pm
2018-01-07 17:22:24 +01:00
- normal system requirements and no special tools
2019-06-06 18:30:51 +02:00
- no GPU power is needed
- stream to server or play on desktop
2019-09-04 21:39:33 +02:00
- 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)
2019-09-04 21:39:33 +02:00
- **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)
2019-09-04 21:39:33 +02:00
2018-01-07 13:58:45 +01:00
2019-06-06 18:30:51 +02:00
Requirements
-----
2019-08-12 15:15:51 +02:00
- 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)
2019-06-06 18:30:51 +02:00
- RAM and CPU depends on video resolution, minimum 4 threads and 3GB RAM for 720p are recommend
JSON Playlist Example
2018-01-07 13:58:45 +01:00
-----
```json
{
"channel": "Test 1",
"date": "2019-03-05",
"length": "24:00:00.000",
"program": [{
"in": 0,
"out": 647.68,
"duration": 647.68,
2019-08-04 12:03:03 -04:00
"source": "/Media/clip1.mp4"
2019-03-12 21:13:58 +01:00
}, {
"in": 0,
"out": 149,
"duration": 149,
2019-08-04 12:03:03 -04:00
"source": "/Media/clip2.mp4"
2019-03-12 21:13:58 +01:00
}, {
"in": 0,
"out": 114.72,
"duration": 114.72,
2019-03-12 21:13:58 +01:00
"source": "/Media/clip3.mp4",
"category": "advertisement"
}, {
"in": 0,
"out": 2531.36,
2019-03-06 15:29:37 +01:00
"duration": 2531.36,
2019-03-12 21:13:58 +01:00
"source": "/Media/clip4.mp4",
"category": ""
}
]
}
2018-01-07 13:58:45 +01:00
```
2019-07-21 00:54:06 +02:00
`"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.
2019-03-06 15:25:14 +01: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,
2019-03-13 14:59:05 +01:00
"source": "https://example.org/big_buck_bunny.webm"
2019-03-06 15:25:14 +01:00
},
...
{
"in": 0,
"out": 2531.36,
"duration": 0,
2019-03-06 15:29:37 +01:00
"source": "rtmp://example.org/live/stream"
2019-03-06 15:25:14 +01:00
}
...
```
But be careful with it, better test it multiple times!
2019-03-30 20:12:28 +01:00
More informations in [Wiki](https://github.com/ffplayout/ffplayout-engine/wiki/URL---Live-Source)
2019-03-06 15:25:14 +01:00
2018-01-07 17:22:24 +01:00
Installation
-----
2019-05-27 16:30:49 +02:00
- install ffmpeg, ffprobe (and ffplay if you need the preview mode)
2019-06-04 15:18:05 +02:00
- copy ffplayout.py to **/usr/local/bin/**
- copy ffplayout.conf to **/etc/ffplayout/**
2019-03-30 21:28:25 +01:00
- create folder with correct permissions for logging (check config)
2018-01-07 17:22:24 +01:00
- copy ffplayout.service to **/etc/systemd/system/**
2019-06-04 15:18:05 +02:00
- change user in **/etc/systemd/system/ffplayout.service**
2018-01-07 17:22:24 +01:00
- 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)
2018-01-07 17:22:24 +01:00
- activate service and start it: **sudo systemctl enable ffplayout && sudo systemctl start ffplayout**
2019-03-18 21:31:10 +01:00
2019-04-01 22:05:46 +02:00
Start with Arguments
2019-03-18 21:31:10 +01:00
-----
ffplayout also allows the passing of parameters:
2019-08-21 21:35:18 +02:00
- `-c, --config` use given config file
- `-f, --folder` use folder for playing
2019-03-18 21:31:10 +01:00
- `-l, --log` for user-defined log file
2019-08-11 17:33:11 +02:00
- `-p, --playlist` for playlist file
2019-03-18 21:31:10 +01:00
2019-08-11 17:33:11 +02:00
You can run the command like:
2019-03-18 21:31:10 +01:00
```
2019-08-11 17:33:11 +02:00
python3 ffplayout.py -l ~/ffplayout.log -p ~/playlist.json
2019-03-18 21:31:10 +01:00
```
2019-03-31 20:54:22 +02:00
2019-05-27 16:30:49 +02:00
Preview Mode on Desktop
2019-04-01 22:05:46 +02:00
-----
2019-03-31 20:54:22 +02:00
For playing on desktop set `preview = True` in config under `[OUT]`.