bigflake.com中CameraToMpegTest.java的示例,或者"显示+捕捉相机"在Grafika中,使用camera.preview获取帧数据。实验表明(Nexus 4,Android 4.4.2)的帧率为10 fps。这没有预期的那么高。
如果我们使用相同的设备(Nexus 4,Android 4.4.2)使用相机录制视频,则帧速率为30fps。
所以我假设使用camera.preview的较低帧率位于方法(预览方法)中。我曾经读过一篇帖子,说相机预览方法的帧速率较低。
所以似乎解决方法是直接使用来自相机硬件的原始帧数据。 怎么做? 我有一个印象iOS有视频处理API来做到这一点,直接从相机获取帧原始数据。 (但我不知道他们的帧率是多少)。
答案 0 :(得分:12)
摄像头API有两个不同的参数用于控制帧速率:setPreviewFrameRate,它取单个帧速率值并且不推荐使用; setPreviewFpsRange,它取一系列FPS值,并且目前推荐的控制。
单FPS设置控制不充分的原因是,有时您希望相机在黑暗条件下降低其帧速率以使取景器保持明亮(静态相机取景器就是这种情况),有时您想要相机保持稳定的30fps,无论如何(视频录制时)。单个值无法捕获您喜欢的值。
因此,理想的解决方案是调用getSupportedPreviewFpsRange以获取相机支持的有效FPS范围列表,并选择最适合您用例的列表。如果你正在寻找稳定的30fps操作,你需要(30,30)作为范围。
不幸的是,支持的FPS范围的集合没有经过良好测试,并且不能保证(30,30)在列表中。在这种情况下,另一种方法是尝试使用参数为30的已弃用的单FPS控件,并打开recording hint parameter。此参数告诉摄像机设备您正在进行类似记录的操作,可能将其切换为在30处执行稳定的帧速率。不幸的是,这不是保证,因为它只是一个提示。
简而言之,要获得稳定的30fps操作:
展望未来,我们希望增加一项要求(30,30)始终列为支持范围,以简化此操作并保证稳态运行。