我正在做一个视频处理项目,使用FFmpeg库。我想询问在FFmpeg中同时使用P帧(预测帧)和多线程的兼容性和支持。目前,我正在探索使用FFmpeg实现多线程的两个选项:
1.将FFmpeg的i_threads参数设置为大于1的值。
1.我的应用程序打开了多个线程,每个线程创建一个编解码器上下文,并从共享的FIFO中执行帧的并行压缩/解压缩。
我已经尝试了选项1,但与只使用一个线程相比,我没有观察到任何明显的时间差异。我正在寻求理解为什么会出现这种情况。
我已经尝试了选项2,这导致帧的压缩/解压缩时间有所改善。但是,我想知道为什么它会起作用。由于我使用的是P帧,其中每个P帧取决于最新的I帧,在处理多个编解码器上下文时,如何确保P帧的解压缩在I帧完成处理后开始?
我有两个进程,一个用于编码,一个用于解码。我想改善时间使用线程在这两个。
编码器处理代码:pt_handle->t_x264_param.i_threads = 24;
pt_handle->pt_x264_encoder = x264_encoder_open(&pt_handle->t_x264_param);
解码器处理代码:pt_handle->pt_avcodec_ctx->thread_count = 23;
pt_handle->pt_avcodec_ctx->thread_type = FF_THREAD_FRAME ;
i_retval = avcodec_open2(pt_handle->pt_avcodec_ctx, pt_h264_decoder, NULL);
1条答案
按热度按时间kyxcudwk1#
FFmpeg不支持选项2。
备选方案1:您需要设置
thread_type
沿着thread_count
。(没有i_threads
参数。)结果将取决于您使用的编码器以及它是否支持线程(请参阅CODEC_CAP_*_THREADS
)。如果您没有看到任何改进,请说明您使用的编码器以及您设置的其他参数,即。请显示代码。