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

Android MediaCodec和相机:如何实现更高的帧率从相机获取帧原始数据?

冯开诚
2023-03-14

CameraToMpegTest的示例。bigflake中的java。com或Grafika中的“Show capture camera”使用该摄像机。预览以获取帧数据。实验表明(Nexus 4,Android 4.4.2)的帧速率为10fps。这没有预期的那么高。

如果我们使用相同的设备(Nexus 4、Android 4.4.2)使用摄像头录制视频,帧速率为30fps。

所以我假设使用camera.preview的帧率更低在于方法(预览方法),我曾经看过一个帖子,说相机预览方法帧率更低。

因此,解决方法似乎是直接使用来自相机硬件的原始帧数据。怎么做?我觉得iOS有视频处理API来实现这一点,直接从摄像机获取帧原始数据。(但我不知道他们的帧速率是多少)。

共有1个答案

裴欣荣
2023-03-14

摄像机API有两个用于控制帧率的不同参数:setPreviewFrameSpeed,它采用单个帧率值并已弃用,以及setPreviewFpsRange,它采用一系列FPS值,是当前推荐的控件。

单帧设置控制不够的原因是,有时您希望相机在黑暗条件下降低其帧速率以保持取景器明亮(这是静止相机取景器的情况),有时您希望相机在任何情况下都保持稳定的30fps(在视频录制的情况下)。单个值无法捕获您喜欢的值。

因此,理想的解决方案是调用getSupport dPreviewFpsRange以获取相机支持的有效FPS范围列表,并选择最适合您的用例的范围。如果您正在寻找稳定的30fps操作,您需要(30,30)作为范围。

不幸的是,支持的FPS范围集没有得到应有的测试,也不能保证(30,30)在列表中。在这种情况下,另一种选择是尝试参数为30的不推荐的单FPS控件,并打开录制提示参数。此参数告诉相机设备您正在进行类似录制的操作,这可能会将其切换为稳定的30帧率。不幸的是,这不能保证,因为它只是一个提示。

简而言之,要实现稳定的30fps运行:

  1. 查询getSupport dPreviewFpsRange
  2. 如果列出了(30,30),请使用setPreviewFpsRange(30,30)。这应该足以保证稳定的帧率。
  3. 如果没有,请查询getSupport dPreviewFrameRates(此处应始终列出30个,但最好仔细检查)
  4. 使用setPreviewFramerate(30)和setRecordingHint(true)。这最大限度地提高了看到30fps操作的可能性。但不幸的是,某些设备可能仍然无法执行您想要的操作。

展望未来,我们希望添加一个要求,即(30,30)始终列为支持范围,以简化这一点并保证稳态运行。

 类似资料:
  • 如何获取相机捕获的原始图像的路径或uri。当我使用下面的代码时,它会返回google文档中提到的原始图像的缩略图。我想要原始图像的路径或uri。 我使用了以下代码,但它返回一个缩略图。

  • 在Android上, 有人知道snapchat使用了什么技巧在他们的相机预览中获得如此高的fps吗?我尝试了各种方法: 使用文本评论而不是表面视图 强制硬件加速 使用较低的分辨率 使用不同的预览格式(YV12、NV21丢帧) 改变对焦模式 没有人能让我达到30帧/秒的恒定速度,甚至可能超过snapchat的速度。我可以获得与谷歌相机应用程序相同的fps,但这并不好,我的显示分辨率要低得多。 编辑:

  • 我正在开发一个灯光(LED)通信系统,使用Android手机摄像头作为接收器,对摄像头帧进行阈值处理。为此,我使用了preview的回调方法onPreviewFrame。为了更准确,需要每隔几帧延迟一帧的捕获,以便系统将重新同步。 我的问题是: 如何延迟单个帧的捕获(而不是预览) *为了限制相机的fps速率,我使用了setPreviewFpsRange、setAutoWhiteBalanceLoc

  • 我正在尝试用我的自定义gui创建一个切换相机按钮。在我的CustomCam Extendes SherlockFragmentActivity中,我有一个名为onSwitch()的方法,该方法是从xml android调用的:onClick=“onSwitch” 方法如下: 我知道该方法会因为断点和日志语句而触发,但我的屏幕只是变黑,然后返回到相同的std视图。 注意:我意识到我必须检测手机是否有

  • 问题内容: 我一直在详尽搜索Google,但是找不到。也许我缺少明显的东西。谢谢! (这是因为预览回调(即使使用缓冲区)的Java实现效率也很低。) 问题答案: 我对这个话题做了一些调查。该演讲(来自第277页,中文)很有帮助。 相机预览通话链 如其他人所述,您可以使用方法获得缓冲区。 这是那里发生的情况(详细版本): 用户调用这是一个本机函数。 调用C ++ 类的方法。 调用接口方法 使一个远程

  • 问题内容: 我有一个数据框,如下所示:框的形状是(1510,1399)。列代表产品,行代表用户为给定产品分配的值(0或1)。如何计算jaccard_similarity_score? 我创建了一个占位符数据框,列出了产品与产品 我不确定如何通过data_ibs进行迭代以计算相似性。 问题答案: 简短且向量化(快速)的答案: 从scikit的成对距离使用“汉明”学习: 说明: 假设这是您的数据集: