2013-03-12 72 views
7

我已閱讀(某處,不記得現在再發現它 - 也許這個問題對我來說已經過時了)否則某些FFmpeg函數不能安全地從多個線程同時調用。ffmpeg:哪些函數是多線程安全的?

FFmpeg本身並不是多線程安全的,因爲您不應該在同一時間在不同線程的同一上下文中調用av_read_frameavcodec_decode_audio4 - 但這一點很明顯。

但是,例如,即使在單獨的上下文中,似乎也是avformat_find_stream_info不可能同時被不同線程調用。爲了安全起見,你需要一個全局互斥鎖。

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

回答

9

一些討論,我發現:herehere

從我迄今發現的,好像只有avcodec_openavcodec_close不是線程安全的。

但是,正確的解決方案似乎是使用av_lockmgr_register在FFmpeg中註冊一個互斥處理程序,然後由FFmpeg在需要的位置自動調用它。見herehere。 Chrome也是如此,請參閱here

+1

只是想提一下,avformat_find_stream_info也不是線程安全的。 – 2013-07-15 09:23:19

+3

如果使用'--enable-pthreads'構建FFmpeg,FFmpeg會自動使用其自己的默認鎖管理器實現,因此不需要調用'av_lockmgr_register()'。 – smokris 2013-11-23 18:05:31