gpt4 book ai didi

Android MediaCodec 和摄像头 : how to achieve a higher frame rate to get frame raw data from camera?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:18:37 25 4
gpt4 key购买 nike

bigflake.com中CameraToMpegTest.java的例子,或者Grafika中的“Show + capture camera”,使用camera.preview获取帧数据。实验表明(Nexus 4,Android 4.4.2)帧率为10 fps。这没有预期的那么高。

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

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

所以看起来解决方法是直接使用来自相机硬件的原始帧数据。怎么做?我的印象是 iOS 有视频处理 API 可以做到这一点,直接从相机获取帧原始数据。 (但我不知道他们的帧率是多少)。

最佳答案

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

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

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

不幸的是,受支持的 FPS 范围集没有得到应有的充分测试,并且不能保证 (30, 30) 在列表中。在这种情况下,另一种方法是尝试使用参数为 30 的已弃用的单 FPS 控件,并打开 recording hint parameter。 .此参数告诉相机设备您正在进行类似录制的操作,这可能将其切换为以 30 帧速率进行稳定的帧速率。不幸的是,这不能保证,因为它只是一个提示。

简而言之,要获得稳定的 30fps 操作:

  1. 查询getSupportedPreviewFpsRange
  2. 如果列出 (30,30),则使用 setPreviewFpsRange(30, 30)。这应该足以保证稳定的帧速率。
  3. 如果不是,查询 getSupportedPreviewFrameRates(此处应始终列出 30,但最好仔细检查)
  4. 使用 setPreviewFrameRate(30) 和 setRecordingHint(true)。这最大限度地提高了看到 30fps 操作的可能性。但不幸的是,有些设备可能仍然无法满足您的需求。

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

关于Android MediaCodec 和摄像头 : how to achieve a higher frame rate to get frame raw data from camera?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22639336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com