问题描述
我有一个USB摄像头(FSCAM_CU135),可以将视频内部编码为MJPEG,并且支持DirectShow。我的目标是检索已编码视频的二进制流 (不进行解码或预览),并将其发送到我的程序进行进一步处理。
我选择使用FFMPEG读取MJPEG流并将其通过管道传输到stdout,以便可以使用Python的subprocess.Popen读取它。
ffmpeg -y -f dshow -vsync 2 -rtbufsize 1000M -video_size 1920x1440 -vcodec mjpeg -i video="FSCAM_CU135" -vcodec copy -f mjpeg pipe:1
在此分辨率下,相机可以60 fps的速度捕获和传输。 在这种情况下,我希望FFMPEG在不进行计算的情况下尽快传递数据。 借助FFMPEG的输出,我可以知道将数据从rtbuffer移至输出管道的速度。
FFMPEG只用一台摄像机就可以正常工作,并以60 fps的速度移动数据。 但是,当我同时运行2台摄像机时,摄像机仍会以60 fps的速度生成数据,但是FFMPEG只能以55 fps的速度移动数据。这意味着我无法实时播放视频,并且缓冲区消耗会随着时间的流逝而增加。
我猜想FFMPEG不仅会移动数据,还会进行一些处理,例如搜索每个视频帧的开始,结束和时间戳,以便它可以计数帧并报告。 有没有办法强迫FFMPEG不做那些事情,而只专注于传递数据以使其更快?
如果我仅使用DirectShow API而没有FFMPEG,会更快吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)