受FFmpeg的libavcodec库的限制,使用如下视频编码器(Video Encoder)进行编码,不能同时进行多个转换任务,否则将导致编码器锁定错误。
具体代码文件是libavcodec/mpegvideo_enc.c,在函数estimate_best_b_count()中,将会调用avcodec_open(),如果一个线程调用了avcodec_open(),但还没有调用avcodec_close(),此时再有一个线程来调用avcodec_open(),就会发生错误,提示"insufficient thread
locking around avcodec_open/close()"。
涉及的编码器有:h263, h263+, flv, rv10, rv20, mpeg4, msmpeg4v1, msmpeg4v2, msmpeg4, wmv1。
av_find_stream_info这个函数里面也会调用avcodec_open,所以很有可能两个线程同时调用avcodec_open导致打开失败