Android 从照相机获取帧';安卓手机
我想从照相机的手机上取相框。所以,我试着捕捉视频,用matlab计算视频的每秒帧数,我得到了每10秒250帧。但是当我使用Android 从照相机获取帧';安卓手机,android,camera,Android,Camera,我想从照相机的手机上取相框。所以,我试着捕捉视频,用matlab计算视频的每秒帧数,我得到了每10秒250帧。但是当我使用 public void onPreviewFrame(byte[] data, Camera camera) {} 在安卓系统上,我每10秒只能得到70帧。 你知道为什么吗?我把代码放在下面: private Camera.PreviewCallback previewCallBack = new Camera.PreviewCallback() { @Overr
public void onPreviewFrame(byte[] data, Camera camera) {}
在安卓系统上,我每10秒只能得到70帧。
你知道为什么吗?我把代码放在下面:
private Camera.PreviewCallback previewCallBack = new Camera.PreviewCallback() {
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
System.out.println("Get frame " + frameNumber);
if (data == null)
throw new NullPointerException();
Camera.Parameters p = camera.getParameters();
Camera.Size size = p.getPreviewSize();
if (frameNumber == 0) {
startTime = System.currentTimeMillis();
}
// Log.e("GetData", "Get frame " + frameNumber);
frameNumber++;
camera.addCallbackBuffer(data);
}
}
这是真的;Android录像机不使用,而且它可能比Java回调要快得多。原因是它可以将视频帧从摄像头发送到内核内部的硬件编码器,而无需将像素放入用户空间 然而,我已经在高级设备(如Nexus4或GalaxyS3)上用Java可靠地实现了30 FPS。秘诀是:使用避免垃圾收集,并使用 当然,预览回调本身应该尽可能彻底地优化。在您的示例中,对
camera.getParameters()
的调用很慢,可以避免。不应进行任何分配(新建
)