Go to file
Jonathan Baecker 28af01ed65 smaller icon
2024-10-03 14:57:31 +02:00
.github Update auto_close_issue.yml 2024-09-17 19:59:22 +02:00
.vscode fix hls paths in tee muxer, fix #787 2024-10-02 17:23:48 +02:00
assets fix channel delete/create, copy assets to storage, start with vtt support 2024-09-25 12:30:27 +02:00
debian remove ffpapi references 2024-06-12 10:16:00 +02:00
docker unify init process, simplify argument names and model values 2024-09-30 17:56:48 +02:00
docs update docs 2024-10-02 18:34:23 +02:00
engine log out of sync only when is active, add reload button 2024-10-03 14:51:40 +02:00
frontend smaller icon 2024-10-03 14:57:31 +02:00
migrations fix help string 2024-10-02 18:42:24 +02:00
scripts update path 2024-09-27 12:22:42 +02:00
tests unify init process, simplify argument names and model values 2024-09-30 17:56:48 +02:00
.gitignore merge frontend repo/dev settings, update folder names 2024-09-24 11:23:57 +02:00
.ignore fine tune responsive layout, move dev instruction, cleanups 2024-09-24 15:02:54 +02:00
Cargo.lock update packages 2024-10-02 10:31:50 +02:00
Cargo.toml reorder args, update config, fix channel add/update, fix #786 2024-10-02 15:03:03 +02:00
CHANGELOG.md update changelog 2024-01-03 21:26:05 +01:00
CONTRIBUTING.md add info about screenshots. 2024-04-17 10:51:25 +02:00
Cross.toml add macos cross build 2024-04-26 13:54:33 +02:00
LICENSE add LICENSE 2022-04-14 17:10:59 +02:00
README.md 0.24.0-beta5 2024-09-27 11:34:52 +02:00

ffplayout

License: GPL v3

player

ffplayout is a 24/7 broadcasting solution. It can playout a folder containing audio or video clips, or play a JSON playlist for each day, keeping the current playlist editable.

The ffplayout applications are mostly designed to run as system services on Linux. But in general they should run on any platform supported by Rust.

Check the releases for pre compiled version.

Features

  • start program with web based frontend, or run playout in foreground mode without frontend
  • dynamic playlist
  • replace missing playlist or clip with single filler or multiple fillers from folder, if no filler exists, create dummy clip
  • playing clips in watched folder mode
  • send emails with error message
  • overlay a logo
  • overlay text, controllable through web frontend (needs ffmpeg with libzmq and enabled JSON RPC server)
  • loop playlist infinitely
  • remote source
  • trim and fade the last clip, to get full 24 hours
  • when playlist is not 24 hours long, loop fillers 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
  • log to files or color output to console
  • add filters to input, if is necessary to match output stream:
    • yadif (deinterlacing)
    • pad (letterbox or pillarbox to fit aspect)
    • fps (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)
  • output:
    • stream
    • desktop
    • HLS
    • null (for debugging)
  • live ingest
  • image source (will loop until out duration is reached)
  • extra audio source, has priority over audio from video (experimental *)
  • multiple audio tracks (experimental *)
  • Stream Copy mode (experimental *)
  • custom filters globally in config, or in playlist for specific clips
  • import playlist from text or m3u file, with CLI or frontend
  • audio only, for radio mode (experimental *)
  • generate playlist based on template (experimental *)
  • During playlist import, all video clips are validated and, if desired, checked to ensure that the audio track is not completely muted.
  • run multiple channels (experimental *)

For preview stream, read: /docs/preview_stream.md

* Experimental features do not guarantee the same stability and may fail under unusual circumstances. Code and configuration options may change in the future.

Requirements

  • RAM and CPU depends on video resolution, minimum 4 dedicated threads and 3GB RAM for 720p are recommend
  • ffmpeg v5.0+ and ffprobe (ffplay if you want to play on desktop)
  • if you want to overlay dynamic text, ffmpeg needs to have libzmq

Install

Check install for details about how to install ffplayout.


JSON Playlist Example

{
    "channel": "Test 1",
    "date": "2019-03-05",
    "program": [{
            "in": 0,
            "out": 647.68,
            "duration": 647.68,
            "source": "/Media/clip1.mp4"
        }, {
            "in": 0,
            "out": 890.02,
            "duration": 890.02,
            "source": "/Media/clip2.mp4",
            "custom_filter": "eq=gamma_b=0.6:gamma_g=0.7[c_v_out]"
        }, {
            "in": 0,
            "out": 149,
            "duration": 149,
            "source": "/Media/clip3.mp4",
            "category": "advertisement"
        }, {
            "in": 0,
            "out": 114.72,
            "duration": 114.72,
            "source": "/Media/image1.jpg",
        }, {
            "in": 0,
            "out": 230.30,
            "duration": 230.30,
            "source": "/Media/image2.jpg",
            "audio": "/Media/audio1.mp3"
        }, {
            "in": 0,
            "out": 2531.36,
            "duration": 2531.36,
            "source": "https://example.org/big_buck_bunny.webm",
            "category": ""
        }
    ]
}

If you are in playlist mode and move backwards or forwards in time, the time shift is saved so the playlist is still in sync. Bear in mind, however, that this may make your playlist too short. If you do not reset it, it will automatically reset the next day.

Warning

(Endless) streaming over multiple days will only work if config has a day_start value and the length value is 24 hours. If you only need a few hours for each day, use a cron job or something similar.

Note

This project includes the DejaVu font, which are licensed under the Bitstream Vera Fonts License.


Sponsoring

If you like this project and would like to make a donation, please use one of the options provided. Please note that donations are not intended to get support or features! Donations are only a sign of appreciation.

Backers