最佳答案
在实践中发现,大多数摄像头竟然不支持帧率的动态设置,甚至不支持帧率的静态设置!这就要求我们在下游的Filter中自己实现帧率改变机制。
目前采取的方法是,根据用1000除以帧率得到帧和帧之间的间隔时间,然后在自己的Filter中从0开始计时,当达到帧间时间间隔的整数倍时,允许自己的Filter处理一帧。这样就达到了自动变化帧率的目的,获得动态调整帧率的功能。
采用上面的算法之后,我们在大多数机器上获得良好的效果,支持动态的帧率切换。但是存在一个问题,即,当摄像头的帧率小于你设置的帧率时,算法是不起作用的!只是保持原来的帧率,当然,这也是软件无法解决的问题。
在一台老式机器上运行的时候,我们发现了这样的问题:某个摄像头的帧率只有10帧/秒!后来查出是因为机器的USB接口是1.0的缘故。导致帧率为30帧/秒的摄像头帧率只有10帧/秒了。
所以在实际的编程中,绝对不要相信摄像头给出的帧率,只有你自己测试出来的,那才是可信的。
在实践中发现,大多数摄像头竟然不支持帧率的动态设置,甚至不支持帧率的静态设置!这就要求我们在下游的Filter中自己实现帧率改变机制。
目前采取的方法是,根据用1000除以帧率得到帧和帧之间的间隔时间,然后在自己的Filter中从0开始计时,当达到帧间时间间隔的整数倍时,允许自己的Filter处理一帧。这样就达到了自动变化帧率的目的,获得动态调整帧率的功能。
采用上面的算法之后,我们在大多数机器上获得良好的效果,支持动态的帧率切换。但是存在一个问题,即,当摄像头的帧率小于你设置的帧率时,算法是不起作用的!只是保持原来的帧率,当然,这也是软件无法解决的问题。
在一台老式机器上运行的时候,我们发现了这样的问题:某个摄像头的帧率只有10帧/秒!后来查出是因为机器的USB接口是1.0的缘故。导致帧率为30帧/秒的摄像头帧率只有10帧/秒了。
所以在实际的编程中,绝对不要相信摄像头给出的帧率,只有你自己测试出来的,那才是可信的。
举报