2024-05-01 16:00:12 -04:00
|
|
|
[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."""
|
|
|
|
subject = "Playout Error"
|
|
|
|
smtp_server = "mail.example.org"
|
|
|
|
starttls = true
|
|
|
|
sender_addr = "ffplayout@example.org"
|
|
|
|
sender_pass = "abc123"
|
|
|
|
recipient = ""
|
|
|
|
mail_level = "ERROR"
|
|
|
|
interval = 30
|
|
|
|
|
|
|
|
[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"
|
2024-05-15 02:55:35 -04:00
|
|
|
extensions = ["mp4", "mkv", "webm"]
|
2024-05-01 16:00:12 -04:00
|
|
|
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)$"
|
|
|
|
|
|
|
|
[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"""
|