在我的Android应用程序中,我观察到从前置摄像头录制的视频以7-10 fps记录,而后置摄像头可以正常工作,本机摄像头应用程序以29fps从前置摄像头录制视频。
我使用以下函数设置帧速率
myRecorder.setVideoFrameRate(30);
但不知何故,它以8fps记录它。问题是什么?此外,照明条件似乎将其提高到15fps,但我希望它至少> 25fps,我怎么能实现这一目标?我们可以将NDK用于此目的吗?
答案 0 :(得分:2)
我正在探索同样的问题。由于MediaRecorder已经具有本机实现,因此使用NDK似乎不是一种增加每秒帧数的有前景的方法。如http://www.androidadb.com/source/cellbots-read-only/experimental/android/ioio/samples/ShootOnSight/src/com/cellbots/ioioshoot/CameraView.java.html中的代码所示,使用setPreviewCallbackWithBuffer改善缓冲似乎很有希望但我首先希望更好地了解许多相机参数以及它们如何影响帧速率。
您肯定知道,有各种各样的Android设备具有广泛的相机功能。要查看特定前后摄像头的功能,可以使用以下代码(例如,将mCameraId设置为0,后面朝向,1设置为朝前)。
Camera mCamera = Camera.open(mCameraId);
Camera.Parameters cp = mCamera.getParameters();
Log.d(TAG, "camera parameters: " + cp.flatten());
例如,以下是我的Nexus S(运行OS 4.0.4)转储的摄像机参数。
NEXUS-S FRONT FACING CAMERA参数:
06-16 15:14:16.909:D / SENSORS_PLUS(24583):摄像机参数:
图象尺寸值= 640×480;
预览FPS-范围= 7500,30000;
最小曝光补偿= -4;
垂直视角= 39.4;
水平视角= 51.2;
最大光圈=汽车;
JPEG缩略图高度= 120;
JPEG-质量= 100;
预览格式值= yuv420sp,YUV420P;
旋转= 0;
JPEG缩略图质量= 100;
将对焦模式=固定;
预览格式= yuv420sp;
预览大小640×480 =;
焦距= 0.9;
视频帧格式= YUV420P;
图像格式值= JPEG;
最大曝光补偿= 4;
曝光补偿= 0;
预览帧率值= 15;
曝光补偿步= 0.5;
预览帧率= 15;
效应值=无,单声道,负,棕褐色;
将对焦模式值=固定;
画面大小640×480 =;
效果=无;
JPEG缩略图宽度= 160;
最大光圈值=汽车,白炽灯,荧光灯,日光,阴天,日光;
图象格式的JPEG =;
对焦距离= 0.20,0.25,无穷远;
预览FPS-范围值=(7500,30000);
JPEG-缩略图尺寸值= 160x120,0x0;
preview-size-values = 640x480,320x240,176x144
NEXUS-S后面相机参数:
06-16 15:46:55.315:D / SENSORS_PLUS(24732):摄像机参数:
图象尺寸值= 2560x1920,2048x1536,1600x1200,1280x960,640x480;
预览FPS-范围= 15000,30000;
最小曝光补偿= -4;
垂直视角= 39.4;
水平视角= 51.2;
最大光圈=汽车;
JPEG缩略图高度= 240;
场景模式=汽车;
JPEG-质量= 100;
预览格式值= yuv420sp,YUV420P;
旋转= 0;
JPEG缩略图质量= 100;
将对焦模式自动=;
预览格式= yuv420sp;
预览大小720×480 =;
焦距= 3.43;
视频帧格式= YUV420P;
图像格式值= JPEG;
最大曝光补偿= 4;
闪光模式值=开,关,汽车,火炬;
曝光补偿= 0;
预览帧率值= 30;
曝光补偿步= 0.5;
预览帧率= 30;
闪光模式= OFF;
效应值=无,单声道,负,棕褐色;
将对焦模式值=汽车,无穷大,宏;
图像尺寸= 2560x1920;
效果=无;
JPEG缩略图宽度= 320;
最大光圈值=汽车,白炽灯,荧光灯,日光,阴天,日光;
场景模式值=自动,肖像,风景,夜景,海滩,雪景,夕阳,烟火,运动,聚会,烛光;
图象格式的JPEG =;
对焦距离= 0.10,1.20,无穷远;
预览FPS-范围值=(15000,30000);
JPEG-缩略图尺寸值= 320x240,0x0;
preview-size-values = 720x480,640x480,352x288,176x144
答案 1 :(得分:1)
以下设置适用于30 FPS的某些手机。
Camera.Parameters parms = camera.getParameters();
parms.setRecordingHint(true);
camera.setParameters(parms);