Android:如何延迟相机拍摄的特定帧的拍摄?
我正在开发一个灯光(LED)通信系统,使用Android:如何延迟相机拍摄的特定帧的拍摄?,android,camera,Android,Camera,我正在开发一个灯光(LED)通信系统,使用Android手机摄像头作为接收器,对摄像头帧进行阈值处理。为此,我使用preview的回调方法onPreviewFrame。 为了更准确,需要每隔几帧延迟一帧的捕获,以便系统将重新同步 我的问题是: 如何延迟单个帧的捕获(而不是预览) 是否可能存在我不知道的摄像头fps速率的内部变化?如果是,我如何限制或更改它们 *要限制相机fps速率,我使用setPreviewFpsRange,setAutoWhiteBalanceLock和setAutoExpos
Android
手机摄像头作为接收器,对摄像头帧进行阈值处理。为此,我使用preview的回调方法onPreviewFrame
。
为了更准确,需要每隔几帧延迟一帧的捕获,以便系统将重新同步
我的问题是:
*要限制相机fps速率,我使用
setPreviewFpsRange
,setAutoWhiteBalanceLock
和setAutoExposureLock
,您可以尝试在API level 21中添加的较新的android.hardware.camera2包,它取代了不推荐使用的相机类,并对相机功能提供细粒度控制:
获取CameraManager服务
CameraManager manager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
String[] cameraIdList = manager.getCameraIdList();
检索设备上可用的摄像头列表
CameraManager manager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
String[] cameraIdList = manager.getCameraIdList();
反复浏览cameraList以选择具有所需特性的相机
for(String cameraId:cameraIdList)
{
CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId);
}
private class CameraCallback extends CameraDevice.StateCallback
{
@Override
public void onOpened(CameraDevice camera)
{
CaptureRequest previewRequest = camera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW).build();
CaptureRequest stillCaptureRequest = camera.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE).build();
}
}
创建带有预览和静态捕获请求的相机回调类
for(String cameraId:cameraIdList)
{
CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId);
}
private class CameraCallback extends CameraDevice.StateCallback
{
@Override
public void onOpened(CameraDevice camera)
{
CaptureRequest previewRequest = camera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW).build();
CaptureRequest stillCaptureRequest = camera.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE).build();
}
}
请查看以提高fps的准确性谢谢您的回答。我看不出它是如何帮助我实时控制ftp的:问题的第一部分是独立控制预览和捕获单个帧的时间。通过创建两个单独的请求,您可以随意控制时间。
stillCaptureRequest
是否允许我控制FTP?似乎这只会让我要求捕捉“在不久的将来”。但这并不意味着我可以控制准确的速率(比如1/30秒的精度)。还是这样?