声明:转帖时请注明出处
默认情况下thread_queue_size取值为8.
ffmpeg_opt.c open_input_file()
#if HAVE_PTHREADS
f->thread_queue_size = o->thread_queue_size > 0 ? o->thread_queue_size : 8;
#endif
ffmpeg官网对 thread_queue_size size 的说明
http://ffmpeg.org/ffmpeg.html
-thread_queue_size size (input)
This option sets the maximum number of queued packets when reading from the file or device. With low latency / high rate live streams, packets may be discarded if they are not read in a timely manner; raising this value can avoid it.
ffmpeg对 thread_queue_size size 的使用
static int init_input_threads(void)
{
int i, ret;
if (nb_input_files == 1)
return 0;
for (i = 0; i < nb_input_files; i++) {
InputFile *f = input_files[i];
if (f->ctx->pb ? !f->ctx->pb->seekable :
strcmp(f->ctx->iformat->name, "lavfi"))
f->non_blocking = 1;
ret = av_thread_message_queue_alloc(&f->in_thread_queue,
f->thread_queue_size, sizeof(AVPacket));
if (ret < 0)
return ret;
if ((ret = pthread_create(&f->thread, NULL, input_thread, f))) {
av_log(NULL, AV_LOG_ERROR, "pthread_create failed: %s. Try to increase `ulimit -v` or decrease `ulimit -s`.\n", strerror(ret));
av_thread_message_queue_free(&f->in_thread_queue);
return AVERROR(ret);
}
}
return 0;
}
总结:
对于输入多个文件时,thread_queue_size的值会起作用。对于输入一个文件时,thread_queue_size参数不起作用。
当 thread_queue_size 值越大时,可以保存的demux的数据越多,对于低延迟或者高码率的视频,能够保存较大数据,防止丢弃。