# This file is part of ffplayout. # # ffplayout is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # ffplayout is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with ffplayout. If not, see . # ------------------------------------------------------------------------------ # sometimes it can happen, that a file is corrupt but still playable, # this can produce an streaming error over all following files # the only way in this case is, to stop ffplayout and start it again # here we only say it can stop, the starting process is in your hand # best way is a systemd serivce on linux # stop_threshold: stop ffplayout, if it is async in time above this value # in copy mode this is tricky [GENERAL] stop_on_error = True stop_threshold = 7 # send error messages to email address, like: # missing playlist # unvalid json format # missing clip path # leave recipient blank, if you don't need this [MAIL] subject = "Playout Error" smpt_server = mail.example.org smpt_port = 587 sender_addr = ffplayout@example.org sender_pass = 12345 recipient = # Logging to file # path to /var/log/ only if you run this program as deamon # log_level can be: INFO, DEBUG, WARNING [LOGGING] log_file = /var/log/ffplayout/ffplayout.log log_level = INFO # output settings for the pre-compression # all clips get prepared in that way, # so the input for the final compression is unique # it produce a uncompressed avi stream # logo is only used if the path exist # with logo_filter = overlay=W-w-2:0 you can modify the logo position # live_protocols is for checking input, is input a live source ffplayout handles it a bit different [PRE_COMPRESS] width = 1024 height = 576 fps = 25 v_bitrate = 50000 logo = logo.png logo_filter = overlay=W-w-2:0 live_protocols = ["http", "https", "ftp", "rtmp", "rtmpe", "rtmps", "rtp", "rtsp", "srt", "tcp", "udp"] copy_mode = False ffmpeg_copy_settings = ["-c", "copy", "-bsf:v", "h264_mp4toannexb", "-threads", "2", "-f", "mpegts", "-"] # playlist settings # put only the root path here, for example: "/playlists" # subfolders are readed by the script # subfolders needs this structur: # "/playlists/2018/01" (/playlists/year/month) # strings in playlist must have ampersan (&) as: & # day_start means at witch hour starts the day, as integer # filler_path are for the GUI only at the moment # filler_clip get handle different, when a new length needs to calculate # blackclip is for stream copy mode # time_shift adds or subtract seconds to the clip start, # this is usefull for example for hls, because it have a big delay # the value will be added to the clip begin # put 0 if you don't need it # map_extension is only for special purpose, # when your playlist have a different extension, then the originial clip # example: map_extension = [".mp4", ".mkv"] # life blank for no change [PLAYLIST] playlist_path = /playlists clips_root = /ADtvMedia filler_path = /ADtvMedia/ADtv/03 - Musikalische Lückenfüller filler_clip = /ADtvMedia/ADtv/01 - Intro/seperator.clock.5-00.mp4 blackclip = /opt/dummy20.mkv day_start = 6 time_shift = 35 map_extension = # buffer settings # this is a system processs witch run between pre-compression # and final compression, this makes the magic to playout multiple files # without interrupt the stream # buffer_length: length in seconds of the buffer # this is the time what the playout have, to change from one clip to the next # be liberal with this value but dont exaggerate # # buffer size gets calculate with: (v_bitrate * 0.125 + 281.25) * buffer_length # by rawvideo calculation would be: # (width x height * 3 / 2 * fps * buffer_length / 1024) + ((a_sample * 16 * 2 * buffer_length) / 8 / 1024) # Size is in KB # buffer_tolerance: ffmpeg holds material to in buffer, for this is the tolerance value # a 1024x576 stream have around 2.5 seconds extra in buffer # buffer_cli: the prefert buffer tool, needs to be installed on your system # buffer_cmd: need to end with the buffer size command, full command would look: # /usr/bin/pv -q -B or: /usr/bin/mbuffer -q -c -m [BUFFER] buffer_length = 5 buffer_tolerance = 2.5 buffer_cli = /usr/bin/mbuffer buffer_cmd = ["-q", "-c", "-m"] # the final playout post compression # set the settings to your needs # preview works only on a desktop system with ffplay!! Set it to True, if you need it [OUT] preview = False service_name = Live Stream service_provider = example.org post_comp_video = ["-c:v", "libx264", "-crf", "23", "-g", "50", "-maxrate", "1300k", "-bufsize", "2600k", "-preset", "medium", "-profile:v", "Main", "-level", "3.1", "-refs", "3"] post_comp_audio = ["-c:a", "libfdk_aac", "-ar", "44100", "-b:a", "128k"] post_comp_extra = ["-threads", "2", "-flags", "+global_header", "-f", "flv"] post_comp_copy = ["-bsf:a", "aac_adtstoasc"] out_addr = rtmp://127.0.0.1/live/stream