2

我编写了用于解码许多 .flv 视频文件的代码。每个视频文件由一个单独的线程解码。当我尝试 1 个线程时,一切正常。但是当我尝试超过 2 个线程时,总是会出现错误“avcodec_open/close() 周围的线程锁定不足”。

我已经搜索过,我知道函数 avcodec_open() 和 avcodec_close() 不是线程安全的。之后,我将互斥锁放在调用两个函数的任何位置。

lockObj.Lock();
avcodec_open/close();
lockObj.UnLock();

但是错误“avcodec_open/close() 周围的线程锁定不足”仍然发生。

有人可以告诉我解决方案吗?

非常感谢,

同天集团

4

1 回答 1

0

每个线程中是否lockObj有相同的对象?

互斥锁的目的是阻止多个线程avcodec_open()同时调用。其他线程在到达语句时应该停止并等待,lockObj.Lock()直到第一个线程调用lockObj.UnLock()。如果每个线程都有自己的lockObj.

我已经将此方法与 QMutex(来自 Qt)一起使用,所以我知道这是可能的。

于 2013-09-12T18:37:31.590 回答