Commit 75dd0839 authored by Stefano Sabatini's avatar Stefano Sabatini

doc/muxers/fifo: review documentation

Apply consistency fixes, sort options, clarify example.
parent 5828aaa2
...@@ -1421,104 +1421,115 @@ ffmpeg -i INPUT -s:v 720x480 -pix_fmt yuv411p -r 29.97 -ac 2 -ar 48000 -y out.dv ...@@ -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 @item
output can be transparently restarted with configurable delay between retries Output can be transparently restarted with configurable delay between
based on real time or time of the processed stream. retries based on real time or time of the processed stream.
@item @item
encoding can be blocked during temporary failure, or continue transparently Encoding can be blocked during temporary failure, or continue transparently
dropping packets in case fifo queue fills up. dropping packets in case the 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} @item recover_any_error @var{bool}
If failure occurs, attempt to recover the output. This is especially useful If set to @code{true}, recovery will be attempted regardless of type
when used with network output, since it makes it possible to restart streaming transparently. of the error causing the failure. By default this option is set to
By default this option is set to 0 (false). @code{false} and in case of certain (usually permanent) errors the
recovery is not attempted even when the @option{attempt_recovery}
option is set to @code{true}.
@item max_recovery_attempts @item recovery_wait_streamtime @var{bool}
Sets maximum number of successive unsuccessful recovery attempts after which If set to @code{false}, the real time is used when waiting for the
the output fails permanently. By default this option is set to 0 (unlimited). recovery attempt (i.e. the recovery will be attempted after the time
specified by the @option{recovery_wait_time} option).
@item recovery_wait_time @var{duration} If set to @code{true}, the time of the processed stream is taken into
Waiting time before the next recovery attempt after previous unsuccessful account instead (i.e. the recovery will be attempted after discarding
recovery attempt. Default value is 5 seconds. the packets corresponding to the @option{recovery_wait_time} option).
@item recovery_wait_streamtime @var{bool} By default this option is set to @code{false}.
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 recovery_wait_time @var{duration}
If set to 1 (true), recovery will be attempted regardless of type of the error Specify waiting time in seconds before the next recovery attempt after
causing the failure. By default this option is set to 0 (false) and in case of previous unsuccessful recovery attempt. Default value is @code{5}.
certain (usually permanent) errors the recovery is not attempted even when
@var{attempt_recovery} is set to 1.
@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
@item Use @command{ffmpeg} to stream to an RTMP server, continue processing
Stream something to rtmp server, continue processing the stream at real-time the stream at real-time rate even in case of temporary failure
rate even in case of temporary failure (network outage) and attempt to recover (network outage) and attempt to recover streaming every second
streaming every second indefinitely. 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.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment