【问题标题】:Why FPS is not same as original camera app为什么FPS与原始相机应用程序不同
【发布时间】:2011-12-30 04:03:53
【问题描述】:

我使用三星 Galaxy Tab 8.9 附带的原始相机应用程序(视频模式)进行了测试。保存的前置摄像头视频能够达到 24 fps,640x480。 (通过查看视频文件传输到Windows机器后的属性)

不过,我一边写前面Camera的代码来测试。

mCamera2.setPreviewCallbackWithBuffer(new PreviewCallback() {
    public void onPreviewFrame(byte[] data, Camera camera) {
        // image processing code placed here.
    }
});

我能达到的最大结果是(不将视频保存到磁盘。我只是测量回调函数onPreviewFrame触发率)

  • 15 帧/秒
  • 320x240、800x600

我想拥有与三星原装相机应用相同的性能。我可以知道我缺少某些技术吗?

【问题讨论】:

  • 这是在进行原始帧捕获吗?甚至 800x600 @ 24bit @ 15fps = 21meg/sec 的数据。高于此值的任何内容都可能超过内部闪存的写入速度。
  • @MarcB 请更详细地查看我修改后的问题。

标签: android frame-rate


【解决方案1】:

您看到这些结果的原因是您的回调获取的是视频样本,而不是实际视频。

当相机将其输出转储到文件系统时,它会执行非常低级别的写入操作,将数据从相机的视频缓冲区复制到文件系统,而无需接触 JVM。这是保持视频高质量和低延迟所必需的,并确保最终视频流畅。如果您需要对实际视频进行​​视频处理,最好在视频录制完成后进行。

预览回调只是为您提供实际视频捕获的样本,而不是整个视频捕获 - 因为大多数 15fps 视频仍然看起来很流畅,所以预览回调只是为您提供较低分辨率、较低 fps 的预览版本正在捕获的实际视频。即使是内置的三星捕获应用程序也只会显示预览版本,因为这就是所有预览界面。

除了文件系统转储或低级字节数组数据结构(例如使用 JNI 包装器)之外,不可能从任何其他内容中获得准确的 Android 视频录制基准。这很容易,但尝试直接执行此操作会阻止从相机读取输入并破坏您的基准。

【讨论】:

  • 够有趣的。您有什么信息可以直接访问相机视频缓冲区吗?就我从android-ndk组获得的信息来看:groups.google.com/group/android-ndk/browse_thread/thread/…,似乎官方不支持直接从NDK访问相机。
  • 这也是我的理解——由于没有 NDK / SDK 访问器,因此您无法从相机本身访问原始字节流,除非事后通过文件。可能值得深入研究 Android 源代码,看看是否有任何可用的钩子:android/frameworks/base/media/java/android/media/MediaRecorder.java
  • 哦,好吧,我想我无能为力。
  • 那么,您的意思是,如果我计算onPreviewFrame() 中预览的fps,我并没有得到我在屏幕上看到的实际帧速率?如果是这样,有什么方法可以计算实际预览的帧率吗?
  • 好的,我现在明白了。你的意思是预览本身是 15fps。
【解决方案2】:

相机 FPS 取决于光照条件和 AutoExposure 参数。在所有光照条件下(从 API 14、Android 4.0 开始)获得固定帧速率:

Camera.Parameters p = camera.getParameters();
p.setPreviewFpsRange( 30000, 30000 ); // for 30 fps
if ( p.isAutoExposureLockSupported() )
     p.setAutoExposureLock( true );
camera.setParameters( p );

【讨论】:

  • 将自动曝光锁定设置为 true 有什么副作用吗?
  • 好吧,更暗的图像,如果这可以被认为是副作用。
  • 谢谢。但似乎你的解决方案对我不起作用。在明亮/黑暗的环境中,预览 fps 仍然不稳定。
  • 取决于硬件和/或驱动程序。
【解决方案3】:

也许 MediaRecorder API 可以更好地与 Camera API 结合使用,而不是使用 PreviewCallback 捕获图像...

http://developer.android.com/guide/topics/media/camera.html#capture-video

http://developer.android.com/reference/android/media/MediaRecorder.html

【讨论】:

    猜你喜欢
    • 2016-02-23
    • 2023-01-31
    • 1970-01-01
    • 1970-01-01
    • 2020-03-17
    • 2021-07-31
    • 1970-01-01
    • 2012-11-04
    • 2021-06-02
    相关资源
    最近更新 更多