doc/muxers/fifo: review documentation

Apply consistency fixes, sort options, clarify example.
This commit is contained in:
Stefano Sabatini 2024-01-21 11:26:13 +01:00
parent 5828aaa2b5
commit 75dd083904
1 changed files with 80 additions and 69 deletions

View File

@ -1421,104 +1421,115 @@ ffmpeg -i INPUT -s:v 720x480 -pix_fmt yuv411p -r 29.97 -ac 2 -ar 48000 -y out.dv
@anchor{fifo} @anchor{fifo}
@section fifo @section fifo
FIFO (First-In First-Out) muxer.
The fifo pseudo-muxer allows the separation of encoding and muxing by using The @samp{fifo} pseudo-muxer allows the separation of encoding and
first-in-first-out queue and running the actual muxer in a separate thread. This muxing by using a first-in-first-out queue and running the actual muxer
is especially useful in combination with the @ref{tee} muxer and can be used to in a separate thread.
send data to several destinations with different reliability/writing speed/latency.
API users should be aware that callback functions (interrupt_callback, This is especially useful in combination with
io_open and io_close) used within its AVFormatContext must be thread-safe. the @ref{tee} muxer and can be used to send data to several
destinations with different reliability/writing speed/latency.
The behavior of the fifo muxer if the queue fills up or if the output fails is The target muxer is either selected from the output name or specified
selectable, through the @option{fifo_format} option.
The behavior of the @samp{fifo} muxer if the queue fills up or if the
output fails (e.g. if a packet cannot be written to the output) is
selectable:
@itemize @bullet @itemize @bullet
@item
Output can be transparently restarted with configurable delay between
retries based on real time or time of the processed stream.
@item @item
output can be transparently restarted with configurable delay between retries Encoding can be blocked during temporary failure, or continue transparently
based on real time or time of the processed stream. dropping packets in case the FIFO queue fills up.
@item
encoding can be blocked during temporary failure, or continue transparently
dropping packets in case fifo queue fills up.
@end itemize @end itemize
API users should be aware that callback functions
(@code{interrupt_callback}, @code{io_open} and @code{io_close}) used
within its @code{AVFormatContext} must be thread-safe.
@subsection Options
@table @option @table @option
@item fifo_format @item attempt_recovery @var{bool}
If failure occurs, attempt to recover the output. This is especially
useful when used with network output, since it makes it possible to
restart streaming transparently. By default this option is set to
@code{false}.
@item drop_pkts_on_overflow @var{bool}
If set to @code{true}, in case the fifo queue fills up, packets will
be dropped rather than blocking the encoder. This makes it possible to
continue streaming without delaying the input, at the cost of omitting
part of the stream. By default this option is set to @code{false}, so in
such cases the encoder will be blocked until the muxer processes some
of the packets and none of them is lost.
@item fifo_format @var{format_name}
Specify the format name. Useful if it cannot be guessed from the Specify the format name. Useful if it cannot be guessed from the
output name suffix. output name suffix.
@item queue_size @item format_opts @var{options}
Specify size of the queue (number of packets). Default value is 60. Specify format options for the underlying muxer. Muxer options can be
specified as a list of @var{key}=@var{value} pairs separated by ':'.
@item format_opts @item max_recovery_attempts @var{count}
Specify format options for the underlying muxer. Muxer options can be specified Set maximum number of successive unsuccessful recovery attempts after
as a list of @var{key}=@var{value} pairs separated by ':'. which the output fails permanently. By default this option is set to
@code{0} (unlimited).
@item drop_pkts_on_overflow @var{bool} @item queue_size @var{size}
If set to 1 (true), in case the fifo queue fills up, packets will be dropped Specify size of the queue as a number of packets. Default value is
rather than blocking the encoder. This makes it possible to continue streaming without @code{60}.
delaying the input, at the cost of omitting part of the stream. By default
this option is set to 0 (false), so in such cases the encoder will be blocked
until the muxer processes some of the packets and none of them is lost.
@item attempt_recovery @var{bool}
If failure occurs, attempt to recover the output. This is especially useful
when used with network output, since it makes it possible to restart streaming transparently.
By default this option is set to 0 (false).
@item max_recovery_attempts
Sets maximum number of successive unsuccessful recovery attempts after which
the output fails permanently. By default this option is set to 0 (unlimited).
@item recovery_wait_time @var{duration}
Waiting time before the next recovery attempt after previous unsuccessful
recovery attempt. Default value is 5 seconds.
@item recovery_wait_streamtime @var{bool}
If set to 0 (false), the real time is used when waiting for the recovery
attempt (i.e. the recovery will be attempted after at least
recovery_wait_time seconds).
If set to 1 (true), the time of the processed stream is taken into account
instead (i.e. the recovery will be attempted after at least @var{recovery_wait_time}
seconds of the stream is omitted).
By default, this option is set to 0 (false).
@item recover_any_error @var{bool} @item recover_any_error @var{bool}
If set to 1 (true), recovery will be attempted regardless of type of the error If set to @code{true}, recovery will be attempted regardless of type
causing the failure. By default this option is set to 0 (false) and in case of of the error causing the failure. By default this option is set to
certain (usually permanent) errors the recovery is not attempted even when @code{false} and in case of certain (usually permanent) errors the
@var{attempt_recovery} is set to 1. recovery is not attempted even when the @option{attempt_recovery}
option is set to @code{true}.
@item recovery_wait_streamtime @var{bool}
If set to @code{false}, the real time is used when waiting for the
recovery attempt (i.e. the recovery will be attempted after the time
specified by the @option{recovery_wait_time} option).
If set to @code{true}, the time of the processed stream is taken into
account instead (i.e. the recovery will be attempted after discarding
the packets corresponding to the @option{recovery_wait_time} option).
By default this option is set to @code{false}.
@item recovery_wait_time @var{duration}
Specify waiting time in seconds before the next recovery attempt after
previous unsuccessful recovery attempt. Default value is @code{5}.
@item restart_with_keyframe @var{bool} @item restart_with_keyframe @var{bool}
Specify whether to wait for the keyframe after recovering from Specify whether to wait for the keyframe after recovering from
queue overflow or failure. This option is set to 0 (false) by default. queue overflow or failure. This option is set to @code{false} by default.
@item timeshift @var{duration} @item timeshift @var{duration}
Buffer the specified amount of packets and delay writing the output. Note that Buffer the specified amount of packets and delay writing the
@var{queue_size} must be big enough to store the packets for timeshift. At the output. Note that the value of the @option{queue_size} option must be
end of the input the fifo buffer is flushed at realtime speed. big enough to store the packets for timeshift. At the end of the input
the fifo buffer is flushed at realtime speed.
@end table @end table
@subsection Examples @subsection Example
@itemize Use @command{ffmpeg} to stream to an RTMP server, continue processing
the stream at real-time rate even in case of temporary failure
@item (network outage) and attempt to recover streaming every second
Stream something to rtmp server, continue processing the stream at real-time indefinitely:
rate even in case of temporary failure (network outage) and attempt to recover
streaming every second indefinitely.
@example @example
ffmpeg -re -i ... -c:v libx264 -c:a aac -f fifo -fifo_format flv -map 0:v -map 0:a ffmpeg -re -i ... -c:v libx264 -c:a aac -f fifo -fifo_format flv \
-drop_pkts_on_overflow 1 -attempt_recovery 1 -recovery_wait_time 1 rtmp://example.com/live/stream_name -drop_pkts_on_overflow 1 -attempt_recovery 1 -recovery_wait_time 1 \
-map 0:v -map 0:a rtmp://example.com/live/stream_name
@end example @end example
@end itemize
@section flv @section flv
Adobe Flash Video Format muxer. Adobe Flash Video Format muxer.