FFMPEG在不进行任何处理或转换的情况下将数据从dshow摄像机中继到stdout PIPE的瓶颈

问题描述

我有一个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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...