ffmpeg:哪些函数是多线程安全的?

Alb*_*ert 9 ffmpeg

我已经读过了(在某个地方,现在不再记得并找到它了 - 也许这个问题对我来说已经过时了),有些FFmpeg函数同时从多个线程调用是不安全的.

FFmpeg本身并不是多线程安全的,因为你不应该同时从不同的线程调用av_read_frameavcodec_decode_audio4处理相同的上下文 - 但这很明显.

但是,例如,似乎avformat_find_stream_info即使在不同的上下文中同时从不同的线程调用也是不安全的.因此,为了确保安全,您需要一个全局互斥锁.

是否有不安全的功能列表?

Alb*_*ert 11

我发现了一些讨论:这里这里

从我到目前为止发现的情况来看,它似乎只是avcodec_open并且avcodec_close不是线程安全的.

但是,正确的解决方案似乎是用于av_lockmgr_register在FFmpeg中注册互斥量处理程序,然后由FFmpeg在所需位置自动调用.看这里这里.Chrome也可以这样做,请看这里.

  • 如果使用`--enable-pthreads`构建FFmpeg,FFmpeg会自动使用自己的默认锁管理器实现,因此不需要调用`av_lockmgr_register()`. (4认同)