【问题标题】:Android MediaCodec and camera: how to achieve a higher frame rate to get frame raw data from camera?Android MediaCodec 和摄像头:如何实现更高的帧率从摄像头获取帧原始数据?
【发布时间】:2014-05-03 13:50:21
【问题描述】:

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 可以做到这一点,直接从相机获取帧原始数据。 (但我不知道他们的帧率是多少)。

【问题讨论】:

    标签: android android-camera android-mediacodec


    【解决方案1】:

    相机 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 操作的可能性。但遗憾的是,有些设备可能仍然无法满足您的需求。

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

    【讨论】:

    • 我向 Grafika 添加了对 setRecordingHint(true) 的调用,我发现 Nexus 4 上的相机预览帧速率明显提高。
    • 感谢 Eddy 和 fadden。如果我只使用 setRecordingHint(true),它将达到 30 fps。当然,为了安全,我加了getSupportedPreviewFpsRange。
    • @Eddy Talvala,我无法使用 Camera 1 API 将 Nexus 5 预览设置为 30 fps 并同时变亮。如果我将录制提示设置为 true 并选择 (30, 30) 预览 fps 范围,则预览为 30 fps,但在昏暗的地方视图非常暗。但是,我注意到 Google 的相机应用程序具有 30 fps 的预览和明亮的预览。是因为它使用了 Camera 2 API 吗?
    • 似乎在 (30, 30) fps 范围内需要将录制提示设置为 true,才能获得曝光良好的图像。
    • Google 相机应用通常使用较宽的 FPS 范围进行预览,例如 (9,30)。这是确保在较暗条件下的明亮预览所必需的,并且对于静止模式取景器来说,较慢的帧速率是可以接受的。对于录制,谷歌相机应用程序一般坚持(30,30)。
    猜你喜欢
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    相关资源
    最近更新 更多