Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
F
ffmpeg
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Stefan Westerfeld
ffmpeg
Commits
75dd0839
Commit
75dd0839
authored
Jan 21, 2024
by
Stefano Sabatini
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
doc/muxers/fifo: review documentation
Apply consistency fixes, sort options, clarify example.
parent
5828aaa2
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
76 additions
and
65 deletions
+76
-65
muxers.texi
doc/muxers.texi
+76
-65
No files found.
doc/muxers.texi
View file @
75dd0839
...
@@ -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 th
e
output. Note that the value of the @option{queue_size} option must b
e
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-tim
e
the stream at real-time rate even in case of temporary failur
e
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.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment