All Projects → ffplayout → Ffplayout Engine

ffplayout / Ffplayout Engine

Licence: gpl-3.0
python and ffmpeg based playout

Programming Languages

python
139335 projects - #7 most used programming language
python3
1442 projects

Projects that are alternatives of or similar to Ffplayout Engine

Ffmpeg
Mirror of https://git.ffmpeg.org/ffmpeg.git
Stars: ✭ 27,382 (+21292.19%)
Mutual labels:  ffmpeg, streaming, hls, rtmp
wsa
WSA(Websocket Streaming Agent) is a stream server target for mp4/h264 streaming over websocket
Stars: ✭ 35 (-72.66%)
Mutual labels:  streaming, hls, rtmp
browserLiveStream
Use webcam, browser and Node to stream live video. From api.video (https://api.video)
Stars: ✭ 141 (+10.16%)
Mutual labels:  streaming, hls, rtmp
nebula
Media asset management and broadcast automation system
Stars: ✭ 103 (-19.53%)
Mutual labels:  playlist, ffmpeg, broadcast
Vidgear
A High-performance cross-platform Video Processing Python framework powerpacked with unique trailblazing features 🔥
Stars: ✭ 2,048 (+1500%)
Mutual labels:  ffmpeg, streaming, hls
smart rtmpd
RTMP server, smart, compact, high performance(c, c++), high concurrency, easy to maintain, easy to deploy, (supports multiple operating systems Windows and Linux, ARM, FreeBSD)
Stars: ✭ 159 (+24.22%)
Mutual labels:  ffmpeg, hls, rtmp
Gpac
Modular Multimedia framework for packaging, streaming and playing your favorite content.
Stars: ✭ 1,321 (+932.03%)
Mutual labels:  broadcast, streaming, hls
Srs
SRS is a simple, high efficiency and realtime video server, supports RTMP, WebRTC, HLS, HTTP-FLV, SRT and GB28181.
Stars: ✭ 16,734 (+12973.44%)
Mutual labels:  hls, rtmp, streaming
Php Practice
🌹 一天一点点,积少成多...
Stars: ✭ 351 (+174.22%)
Mutual labels:  ffmpeg, hls, rtmp
Awesome Video
A curated list of awesome streaming video tools, frameworks, libraries, and learning resources.
Stars: ✭ 397 (+210.16%)
Mutual labels:  ffmpeg, streaming, hls
Janus Webrtc Gateway Docker
Perfect Docker Image for Media Streaming Expert User ( https://github.com/meetecho/janus-gateway )
Stars: ✭ 582 (+354.69%)
Mutual labels:  ffmpeg, hls, rtmp
Rtmp Ts Dash Webrtc
👾 音视频解决方案 Audio and video solutions(AV1)
Stars: ✭ 129 (+0.78%)
Mutual labels:  ffmpeg, hls, rtmp
Nginx Rtmp Monitoring
real-time monitoring statistics dashboard for nginx rtmp module
Stars: ✭ 224 (+75%)
Mutual labels:  streaming, hls, rtmp
tms
tms(toy media server) is a toy media server for myself learning media develop. Just for fun.
Stars: ✭ 29 (-77.34%)
Mutual labels:  streaming, hls, rtmp
Haishinkit.swift
Camera and Microphone streaming library via RTMP, HLS for iOS, macOS, tvOS.
Stars: ✭ 2,237 (+1647.66%)
Mutual labels:  streaming, hls, rtmp
m3u8
Parse and generate m3u8 playlists for Apple HTTP Live Streaming (HLS) in Ruby.
Stars: ✭ 96 (-25%)
Mutual labels:  playlist, streaming, hls
Awesome Live Stream
Webrtc && Nginx && DASH && Quic 学习资料收集,持续更新中
Stars: ✭ 290 (+126.56%)
Mutual labels:  ffmpeg, hls, rtmp
Docker Nginx Rtmp
🐋 A Dockerfile for nginx-rtmp-module + FFmpeg from source with basic settings for streaming HLS. Built on Alpine Linux.
Stars: ✭ 608 (+375%)
Mutual labels:  ffmpeg, hls, rtmp
Streaming Room
Streaming room in Node.js, rtmp, hsl, html5 videojs player
Stars: ✭ 106 (-17.19%)
Mutual labels:  ffmpeg, streaming, rtmp
Hls Trimming Frame Accuracy
JS Code that given a group of HLS chunks, a start timestamp, and end timestamp it creates one MP4 that contains the original V/A frame accuracy trimmed and perfectly aligned
Stars: ✭ 46 (-64.06%)
Mutual labels:  ffmpeg, hls

ffplayout-engine

made-with-python License: GPL v3

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.

Check ffplayout-frontend: web-based GUI for ffplayout

Features

  • have all values in a separate config file
  • dynamic playlist
  • replace missing playlist or clip with a dummy clip
  • playing clips from watched folder
  • send emails with error message
  • overlay a logo
  • overlay text, controllable through messenger over libzmq
  • EBU R128 loudness normalization (single pass) (experimental)
  • loop clip in playlist which out value is higher then its duration, see also Loop Clip
  • loop playlist infinitely
  • trim and fade the last clip, to get full 24 hours
  • when playlist is not 24 hours long, loop filler clip 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
  • on posix systems ffplayout can reload config with SIGHUP
  • logging to files, or colored 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)
  • add custom filters
  • add custom arguments
  • different types of output:
    • stream
    • desktop
    • HLS
    • custom
  • Multi Channel

Requirements

  • python version 3.6+
  • python module watchdog (only when playlist_mode: False)
  • python module colorama if you are on windows
  • python modules PyYAML, requests, supervisor
  • ffmpeg v4.2+ and ffprobe (ffplay if you want to play on desktop)
  • if you want to overlay text, ffmpeg needs to have libzmq
  • RAM and CPU depends on video resolution, minimum 4 threads and 3GB RAM for 720p are recommend

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": 149,
            "duration": 149,
            "source": "/Media/clip2.mp4"
        }, {
            "in": 0,
            "out": 114.72,
            "duration": 114.72,
            "source": "/Media/clip3.mp4",
            "category": "advertisement"
        }, {
            "in": 0,
            "out": 2531.36,
            "duration": 2531.36,
            "source": "/Media/clip4.mp4",
            "category": ""
        }
    ]
}

If you need a simple playlist generator check: playlist-generator

The playlist can be extend, to use custom attributes in your filters.

Warning

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

Remote source from URL

You can use sources from remote URL in that way:

...
        {
            "in": 0,
            "out": 149,
            "duration": 149,
            "source": "https://example.org/big_buck_bunny.webm"
        }

But be careful with it, better test it multiple times!

More informations in Wiki

Installation

Check INSTALL.md

Start with Arguments

ffplayout also allows the passing of parameters:

  • -c, --config use given config file
  • -f, --folder use folder for playing
  • -l, --log for user-defined log path, none for console output
  • -i, --loop loop playlist infinitely
  • -m, --mode set output mode: desktop, hls, stream, ...
  • -p, --playlist for playlist file
  • -s, --start set start time in hh:mm:ss, now for start with first
  • -t, --length set length in hh:mm:ss, none for no length check

You can run the command like:

./ffplayout.py -l none -p ~/playlist.json -d -s now -t none -m desktop

Multi Channel

For streaming multiple channels you need to use python supervisorD. A systemd service for it you found in docs folder.

To configure every channel create your ffplayout yaml configs under /etc/ffplayout with naming them ffplayout-001.yml, ffplayout-002.yml and so on. Then copy and edit the supervisor config /supervisor/conf.d/engine-001.conf with the same numbering.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].