【发布时间】:2014-02-17 10:22:21
【问题描述】:
尝试使用 Android ICS 中的本机代码让相机工作:
大多数手册参考 startPreview() 方法。但浏览 AOSP 代码时,我还发现 <Camera.h> 中的 'startRecording()' 方法。 Here说是来自接口ICameraRecordingProxy
"允许录像机在录制过程中接收视频帧"
所以问题是 - 就性能而言,“startRecording”方法是否比“startPreview”更有效?
进入本机代码的唯一目标是性能,Java 'Camera' 太慢,而且 OpenCV 也没有提供所需的 FPS 水平。..
编辑:目标平台为:API level=17,设备 Allwinner A31 开发板,1280x720x30FPS。 任务是从相机捕获帧,修改它们,编码(H264)并存储到 SD 卡。 纯 java MediaRecorder 用 1280x720x30 写入 mp4 文件。不需要在屏幕上显示实时预览。
本机模式下的 OpenCV-demo1 提供 1920x1080x2(在 java 模式下相同)。具有空 PreviewCallback 最大 FPS 的简单 java 方法是 15。
提前谢谢你..
【问题讨论】:
-
Grafika 可以从相机预览中录制——在 2012 Nexus 7 上以 30fps 的速度工作,除了 Java 代码什么都没有。 (不过,
MediaCodec确实需要 API 16+。)请参阅 github.com/google/grafika 中的“显示 + 捕获相机”。如果您主要对直接录音感兴趣,也许您想要的是MediaRecorder(developer.android.com/reference/android/media/…)? -
感谢您提供链接,但 Grafika “一个 SDK 应用程序,为 API 18 (Android 4.3) 开发”,我的目标 SDK 是 17 :( 尝试构建和启动 - 不走运。MediaRecorder 很好并且效果很好,但我需要即时修改帧
-
Grafika 所做的一些工作将在 API 16 中运行。在 API 18 之前您无法获得的是
Surface输入到MediaCodec,不幸的是,这对于您的性能很重要正在做。根据您计划进行的帧修改类型,API 18 提供的内容可以通过其他方式为您提供帮助……可以在此处找到使用一些简单的基于 GPU 着色器的图像过滤器的 Grafika 演示:youtube.com/watch?v=kH9kCP2T5Gg -
非常感谢,'grafika' 很有趣,但问题是目标设备无法升级到 API 18 :(
-
针对较旧的 API 非常普遍,通常是出于市场份额的原因。您应该在问题中提及目标 API,并了解您计划对帧进行什么样的修改(即简单的帧插入/删除、精美的图像过滤,无论您是想在 YUV 还是 RGB 中工作)空间等)。您是否需要在录制的同时在屏幕上显示预览?您说您没有达到目标 FPS 速率;你需要什么速率,什么分辨率?你的目标设备是什么?
标签: android android-ndk camera