Skip to content

AutoFocus&Zoom

buliaoyin edited this page Oct 12, 2016 · 13 revisions

对于Camera,SDK提供触摸对焦和变焦功能
当然设备需要支持FLASH_MODE_AUTOKEY_ZOOM_SUPPORTED
v4.x支持触摸对焦和变焦,v3.x仅支持触摸对焦功能

注:
v3.x代表版本号为3.x.x的推流SDK
v4.x代表版本号为4.x.x的推流SDK

1. v4.0 说明

提供以下三个类来使用对焦和变焦功能:
CameraTouchHelper:处理Camera的glsurfaceView的touch事件,提供对焦及变焦的支持
ICameraHintView:显示变焦比例及焦点范围的view的接口类,您可以实现该接口类,自定义变焦显示view,也可以使用下面的类
CameraHintView:实现了ICameraHintView

1.1 触摸对焦功能

可以通过单指触摸预览区实现针对该区域的对焦和测光。
使用方法:

  1. 创建 CameraTouchHelper实例,并且为该实例设置CameraCapture,主要用来获取和设置Camera的参数
  2. 设置GLSurfaceView或TextureView的touch事件为CameraTouchHelper,此类拦截了GlSurfaceView的onTouch事件
  3. UI的xml中添加CameraHintView,并调用CameraTouchHelper的接口setCameraHintView,将实例设置给CameraHintView
  4. 调用CameraTouchHelper接口setEnableTouchFocus打开触摸对焦功能(该接口在推流过程中实时生效)

1.2 变焦功能

可以通过双指缩放手势来拉近、拉远摄像头预览区。
使用方法:

  1. 创建 CameraTouchHelper实例,并调用接口setCameraCapture为该实例设置CameraCapture,主要用来获取和设置Camera的参数
  2. 设置GlSurfaceView的touch事件为CameraTouchHelper,此类拦截了GlSurfaceView的onTouch事件
  3. UI的xml中添加CameraHintView,并调用CameraTouchHelper的接口setCameraHintView,将实例设置给CameraHintView
  4. 调用CameraTouchHelper接口setEnableZoom打开变焦功能(该接口在推流过程中实时生效)

参考代码:

CameraTouchHelper cameraTouchHelper = new CameraTouchHelper();
cameraTouchHelper.setCameraCapture(mStreamer.getCameraCapture());
mCameraPreviewView.setOnTouchListener(cameraTouchHelper);
// set CameraHintView to show focus rect and zoom ratio
 cameraTouchHelper.setCameraHintView(mCameraHintView);
cameraTouchHelper.setEnableZoom(true);
cameraTouchHelper.setEnableTouchFocus(true);

注:CameraTouchHelper中还提供了其它接口用于控制对焦和变焦的参数,接口详细说明参考javadoc

2. v3.x 说明

v3.x仅支持触摸对焦功能

2.1 触摸对焦功能

1 需要继承com.ksy.recordlib.service.view.CameraGLSurfaceView为父类的子对象为预览的View
2 调用KSYStreamer的接口setDisplayPreview接口参数为1中的子类型对象
3 调用builder的setManualFocus接口设置开启触摸对焦功能

参考代码如下:

builder.setManualFocus(true); 
mStreamer.setDisplayPreview(mCameraGLSurfaceView);
Clone this wiki locally