博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

ffmpeg 线程

Posted on 2017-05-23 11:08  bw_0927  阅读(1253)  评论(0)    收藏  举报

https://my.oschina.net/u/2326611/blog/682799

 

-filter_threads

-filter_complex_threads

-thread_queue_size

 

===============

默认情况下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的数据越多,对于低延迟或者高码率的视频,能够保存较大数据,防止丢弃。