问题描述: rtsp流使用ffmpeg和opencv可以正常解码,但是使用sail.Decoder无法正常解码
定位问题的原因是extra_frame_buffer_num
给的太大。
分别分析几个矛盾的现象如下:
#. ffmpeg下能够正常执行,而python sail下不能执行:这是因为ffmpeg下默认extra_frame_buffer_num
为5
#. 录下码流后,离线文件python sail可以工作,rtsp下python sail不能工作:这是因为python sail只在rtsp下设置extram_buffer_num
为20个
解码器内部每个instance最多允许32个 frame buffer,因为这个摄像头码流要求的缓存frame buffer比较多,加上20个extra frame buffer后,超过了32个,所以导致register frame buffer失败。
目前在opencv中配置extra_frame_buffer_num
为3, ffmpeg默认为5,这个配置基本不影响到速度,如果需要直接用解码器解出来的frame buffer做缓存,可以试着配置为10,20这个数字太大了。
SOPHON SAIL在2.7.0(20220412_224617)及以后的版本将extram_buffer_num
设置为5,并且添加了其它设置,保持和opencv一致。