当前位置: 首页 > 知识库问答 >
问题:

如何在Android手机中固定摄像头的帧速率

訾旭
2023-03-14

我想修复Android中相机预览的帧率,即20fps或30fps。但是,我们发现帧率不稳定。

在android文档中,据说帧率在getSupport dPreviewFpsRange中定义的最小帧率和最大帧率之间波动。https://developer.android.com/reference/android/hardware/Camera.Parameters.html#getSupportedPreviewFpsRange()

我的问题是:1)哪些因素影响帧速率?曝光时间、白平衡、帧分辨率、背景CPU负载等。?2) 有没有什么方法可以通过定制上述因素来固定帧速率?3) 在我的项目中,帧速率越高越好。如果帧速率最终不稳定。我可以增加最小帧速率吗?或者固定最小帧速率?4) 似乎视频拍摄与预览模式有些不同,我可以在Android中固定视频拍摄的帧速率或最小帧速率吗?

最后,我们发现IOS可以使用videoMinFrameDuration和videoMaxFrameDuration来固定帧速率。

谢谢。

共有2个答案

阮选
2023-03-14

即使对于旧的摄像头API,如果设备列出了支持的FPS范围(30,30),那么您应该能够选择该范围并获得一致的固定视频录制。

不幸的是,一旦场景条件变得太暗,一些设备会忽略您的帧速率请求,并将曝光时间增加到1/30秒以上。对于许多应用来说,这是更好的选择,但此类应用只需选择更宽的帧速率范围,如(15,30)。

茹元魁
2023-03-14

首先,请注意,您所询问的摄像机API在3年多前就被弃用了。新的camera2 API提供了对捕获的所有方面的更多控制,包括帧速率。

特别是,如果您的目标是流畅的视频录制。实际上,MediaRecorder在旧设备上可以正常工作,但我知道如果由于某种原因您无法使用MediaRecorder,这些知识几乎没有实用价值。

通常,支持的FPS范围列表包括固定范围,例如30 FPS,完全用于视频录制。请注意,您需要选择符合要求的(推荐的)预览(视频)分辨率。

在声明的范围内,有两个主要因素会导致帧率变化:曝光调整和对焦调整。为了实现统一的帧率,您应该禁用自动对焦。如果您的相机支持曝光控制,您也应该锁定它。避免使用奇异的“场景”和“效果”。SCENE_MODE_BARCODE和EFFECT_MONO似乎不会导致帧率问题。白平衡也可以。

还有其他因素导致帧率波动完全在您的控制之下。

>

不要使用setPreviewCallback(),它会自动为每个帧分配像素缓冲区。这对垃圾收集器来说是一个很大的负担,垃圾收集器可能会偶尔锁定所有线程以进行主要清理。相反,使用setPreviewCallbackWithBuffer()并预先分配足够的像素缓冲区,使其始终处于繁忙状态。

不要在onPreviewFrame()回调的上下文中执行繁重的计算。将所有工作传递给不同的线程。尽可能早地释放像素缓冲区。

 类似资料:
  • 我创建了xamarin表单,它可以从相机中拍摄照片,但当我单击相机打开按钮时,它不会打开相机。我的代码在这里“https://github.com/Malith1994124/Kiosk/blob/master/Kiosk_V2/Kiosk_V2/Helpers/Utilities.cs“我在android部分中提供了所有必需的权限。 谁能帮帮我吗。我是xamarin的新手,现在在这里呆了一个多星

  • 本文向大家介绍Android实现手机摄像头的自动对焦,包括了Android实现手机摄像头的自动对焦的使用技巧和注意事项,需要的朋友参考一下 如何实现Android相机的自动对焦,而且是连续自动对焦的。当然直接调用系统相机就不用说了,那个很简单的。下面我们主要来看看如如何自己实现一个相机,并且实现自动连续对焦。 代码如下: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程

  • 我正在启动一个项目,开发一个移动应用程序,我将需要访问手机的摄像头,并检索一张图片/照片。 然而,在进入原生应用程序之前,我想知道Dart(当然是编译成JavaScript的)是否可以访问Android Phone的摄像头并检索到那张照片。在这种情况下,应用程序将是基于web的。 Dart能做到吗?还是我需要一个原生应用程序?

  • 我是新的Android 6.0代码,请提供以下代码的解决方案: 注意:适用于打开库时

  • 目前,我已经用Python实现了我的应用程序,可以通过USB读取相机帧。我使用Opencv,但对于分辨率为60fps和1920x1080的相机,我无法以这种速度捕捉图像。我尝试了一些东西:cv2。视频捕获(0,cv2.CAP_FFMPEG),但我无法捕获帧(捕获读取返回False)。请您提出任何解决方案或方法来提高整体速度,甚至在GPU中处理它们。 Opencv是从以下源代码构建的:

  • 我想计算相机和被识别物体之间的距离。为此我尝试了很多方法,我试图用加速度计找到物体和相机之间的角度,然后用 d=h*tan a H是距离底座的高度,一般为1.4 我试着用get方向方法计算角度。请让我知道我做错了什么。已经超过2天了,我一直在努力满足这个要求。我们已经研究了Android商店上的各种相机应用程序,并试图理解它们的功能,但没有任何结果。