ffplayout/assets/ffplayout.toml
2024-06-05 16:33:05 +02:00

169 lines
6.7 KiB
TOML

[general]
help_text = """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 when \
it stops, the starting process is in your hand. Best way is a systemd service \
on linux.
'stop_threshold' stop ffplayout, if it is async in time above this \
value. A number below 3 can cause unexpected errors."""
stop_threshold = 11
stat_file = ".ffp_status"
[rpc_server]
help_text = """Run a JSON RPC server, for getting infos about current playing and for some \
control functions."""
enable = true
address = "127.0.0.1:7070"
authorization = "av2Kx8g67lF9qj5wEH3ym1bI4cCs"
[mail]
help_text = """Send error messages to email address, like missing playlist; invalid \
json format; missing clip path. Leave recipient blank, if you don't need this.
'mail_level' can be INFO, WARNING or ERROR.
'interval' means seconds until a new mail will be sended, value must be in increments of 10."""
subject = "Playout Error"
smtp_server = "mail.example.org"
starttls = true
sender_addr = "ffplayout@example.org"
sender_pass = "abc123"
recipient = ""
mail_level = "ERROR"
interval = 120
[logging]
help_text = """If 'log_to_file' is true, log to file, when is false log to console.
'backup_count' says how long log files will be saved in days.
'local_time' to false will set log timestamps to UTC. Path to /var/log/ only \
if you run this program as daemon.
'level' can be DEBUG, INFO, WARNING, ERROR.
'ffmpeg_level/ingest_level' can be INFO, WARNING, ERROR.
'detect_silence' logs an error message if the audio line is silent for 15 \
seconds during the validation process.
'ignore_lines' makes logging to ignore strings that contains matched lines, \
in frontend is a semicolon separated list."""
log_to_file = true
backup_count = 7
local_time = true
timestamp = true
path = "/var/log/ffplayout/"
level = "DEBUG"
ffmpeg_level = "ERROR"
ingest_level = "WARNING"
detect_silence = false
ignore_lines = [
"P sub_mb_type 4 out of range at",
"error while decoding MB",
"negative number of zero coeffs at",
"out of range intra chroma pred mode",
"non-existing SPS 0 referenced in buffering period",
]
[processing]
help_text = """Default processing for all clips, to have them unique. Mode can be playlist \
or folder.
'aspect' must be a float number.'logo' is only used if the path exist.
'logo_scale' scale the logo to target size, leave it blank when no scaling \
is needed, format is 'width:height', for example '100:-1' for proportional \
scaling. With 'logo_opacity' logo can become transparent.
With 'audio_tracks' it is possible to configure how many audio tracks should \
be processed. 'audio_channels' can be use, if audio has more channels then only stereo.
With 'logo_position' in format 'x:y' you set the logo position.
With 'custom_filter' it is possible, to apply further filters. The filter \
outputs should end with [c_v_out] for video filter, and [c_a_out] for audio filter."""
mode = "playlist"
audio_only = false
copy_audio = false
copy_video = false
width = 1024
height = 576
aspect = 1.778
fps = 25
add_logo = true
logo = "/usr/share/ffplayout/logo.png"
logo_scale = ""
logo_opacity = 0.7
logo_position = "W-w-12:12"
audio_tracks = 1
audio_track_index = -1
audio_channels = 2
volume = 1
custom_filter = ""
[ingest]
help_text = """Run a server for a ingest stream. This stream will override the normal streaming \
until is done. There is only a very simple authentication mechanism, which check if the \
stream name is correct.
'custom_filter' can be used in the same way then the one in the process section."""
enable = false
input_param = "-f live_flv -listen 1 -i rtmp://127.0.0.1:1936/live/stream"
custom_filter = ""
[playlist]
help_text = """'path' can be a path to a single file, or a directory. For directory put \
only the root folder, for example '/playlists', subdirectories are read by the \
program. Subdirectories needs this structure '/playlists/2018/01'.
'day_start' means at which time the playlist should start, leave day_start \
blank when playlist should always start at the begin. 'length' represent the \
target length from playlist, when is blank real length will not consider.
'infinit: true' works with single playlist file and loops it infinitely. """
path = "/var/lib/ffplayout/playlists"
day_start = "05:59:25"
length = "24:00:00"
infinit = false
[storage]
help_text = """'filler' is for playing instead of a missing file or fill the end to reach 24 \
hours, can be a file or folder, it will loop when is necessary.
'extensions' search only files with this extension. Set 'shuffle' to 'true' \
to pick files randomly."""
path = "/var/lib/ffplayout/tv-media"
filler = "/var/lib/ffplayout/tv-media/filler/filler.mp4"
extensions = ["mp4", "mkv", "webm"]
shuffle = true
[text]
help_text = """Overlay text in combination with libzmq for remote text manipulation. \
On windows fontfile path need to be like this 'C\\:/WINDOWS/fonts/DejaVuSans.ttf'.
'text_from_filename' activate the extraction from text of a filename. With 'style' \
you can define the drawtext parameters like position, color, etc. Post Text over \
API will override this. With 'regex' you can format file names, to get a title from it."""
add_text = true
text_from_filename = false
fontfile = "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf"
style = "x=(w-tw)/2:y=(h-line_h)*0.9:fontsize=24:fontcolor=#ffffff:box=1:boxcolor=#000000:boxborderw=4"
regex = "^.+[/\\](.*)(.mp4|.mkv|.webm)$"
[task]
help_text = """Run an external program with a given media object. The media object is in json format \
and contains all the information about the current clip. The external program can be a script \
or a binary, but should only run for a short time."""
enable = false
path = ""
[out]
help_text = """The final playout compression. Set the settings to your needs. 'mode' \
has the options 'desktop', 'hls', 'null', 'stream'. Use 'stream' and adjust \
'output_param:' settings when you want to stream to a rtmp/rtsp/srt/... server.
In production don't serve hls playlist with ffpapi, use nginx or another web server!"""
mode = "hls"
output_param = """\
-c:v libx264
-crf 23
-x264-params keyint=50:min-keyint=25:scenecut=-1
-maxrate 1300k
-bufsize 2600k
-preset faster
-tune zerolatency
-profile:v Main
-level 3.1
-c:a aac
-ar 44100
-b:a 128k
-flags +cgop
-f hls
-hls_time 6
-hls_list_size 600
-hls_flags append_list+delete_segments+omit_endlist
-hls_segment_filename /usr/share/ffplayout/public/live/stream-%d.ts
/usr/share/ffplayout/public/live/stream.m3u8"""