@@ -2285,6 +2285,10 @@ It is the same as the speed option to realtime or arealtime filters.
@item realtime_limit @var{duration}
It is the same as the limit option to realtime or arealtime filters.
+@item output_delay @var{duration}
+Time to delay output. This will block every output packet for the extra specified duration. Default value is 0.
+This option is useful when user wouldn't want broadcast what's comming next immediately in live streaming applications.
+
@end table
@subsection Examples
@@ -2312,6 +2316,16 @@ ffmpeg -i your_input_file -c copy -map 0:v -map 0:a -f fifo -fifo_format flv -re
@end itemize
+@itemize
+
+@item
+Add 20 seconds delay to rtmp stream.
+@example
+ffmpeg -i your_input_stream_address -c copy -map 0:a -map 0:v -f fifo -realtime 1 -queue_size 6000000 -output_delay 20 -fifo_format flv rtmp://example.com/live/delayed_stream_name
+@end example
+
+@end itemize
+
@anchor{tee}
@section tee
@@ -89,6 +89,9 @@ typedef struct FifoContext {
int64_t delta;
unsigned inited;
+
+ /* Time to delay output */
+ int64_t output_delay;
} FifoContext;
typedef struct FifoThreadContext {
@@ -439,6 +442,8 @@ static void *fifo_consumer_thread(void *data)
memset(&fifo_thread_ctx, 0, sizeof(FifoThreadContext));
fifo_thread_ctx.avf = avf;
+ fifo_sleep(fifo->output_delay);
+
while (1) {
uint8_t just_flushed = 0;
@@ -681,6 +686,9 @@ static const AVOption options[] = {
{"realtime_limit", "Time limit for the pauses when realtime", OFFSET(realtime_limit),
AV_OPT_TYPE_DURATION, {.i64 = 2000000}, 0, INT64_MAX, AV_OPT_FLAG_ENCODING_PARAM},
+ {"output_delay", "Time to delay output", OFFSET(output_delay),
+ AV_OPT_TYPE_DURATION, {.i64 = 0}, 0, INT64_MAX, AV_OPT_FLAG_ENCODING_PARAM},
+
{NULL},
};