9

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

FFmpeg 本身不是多线程安全的,因为您不应该同时从不同线程调用av_read_frameavcodec_decode_audio4在同一上下文中调用 - 但这很明显。

但是例如,avformat_find_stream_info即使在不同的上下文中,同时从不同的线程调用似乎也不安全。所以为了保证安全,你需要一个全局互斥锁。

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

4

1 回答 1

11

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

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

但是,正确的解决方案似乎是使用av_lockmgr_register在 FFmpeg 中注册一个互斥处理程序,然后 FFmpeg 在需要的位置自动调用该处理程序。见这里这里。Chrome 也这样做,请参见此处

于 2013-03-12T16:39:09.617 回答