视频设备管理

更新时间: 2024/03/15 17:25:03

在各种视频的业务场景中,用户经常会需要调整设备的摄像头,例如调整曝光、对焦和闪光灯等功能设置,使被摄物体成像清晰、亮度适宜。 NERTC SDK 提供整套的摄像头管理方法,以便用户灵活切换前置摄像头、后置摄像头,并对摄像头进行缩放、对焦和曝光等相关配置。

功能介绍

NERTC SDK 提供相关接口,支持检测拍摄相关设备的能力,例如检测是否支持闪光灯常开等。同时支持多种摄像头相关的设置方法,包括:

  • 摄像头相关:
    • 摄像头缩放:支持动态调整缩放比例。
    • 摄像头切换:支持切换或指定前后置摄像头。
  • 闪光灯:支持开关闪光灯。
  • 对焦:支持手动选择对焦位置,摄像头自动对焦。
  • 曝光:支持手动选择曝光区域,摄像头自动曝光。

注意事项

  • 部分设备可能不支持开启闪光灯或摄像头缩放,直接调用接口调节设备可能会失败。因此用户操作前应先调用相关检测接口,判断当前设备是否支持调整设备的相关设置。
  • 请在相机启用后再调用视频设备相关的设置方法,例如在调用 startVideoPreview 方法或 joinChannel 方法后。

示例项目源码

网易云信提供设备管理的示例项目源码 DeviceManagement ,您可以参考该源码实现视频设备管理。

摄像头缩放

配置步骤

  1. 调用 isCameraZoomSupported,检测设备是否支持摄像头缩放功能。

  2. 调用 setCameraZoomFactor 方法设置具体需要的缩放比例,可在通话过程中动态调整。

    在设置需要的摄像头缩放比例前,您可以调用 getCameraMaxZoom 方法获取设备支持的最大缩放比例或调用 getCameraCurrentZoom 方法获取摄像头当前的缩放比例。

示例代码

//检测设备是否支持摄像头缩放
NERtcEx.getInstance().isCameraZoomSupported();

//获取设备支持的最大缩放比例
NERtcEx.getInstance().getCameraMaxZoom();

// 设置摄像头缩放比例
int curZoom = NERtcEx.getInstance().getCameraCurrentZoom();
NERtcEx.getInstance().setCameraZoomFactor(curZoom + 2); //放大
NERtcEx.getInstance().setCameraZoomFactor(curZoom - 2); //缩小

摄像头切换

配置步骤

  • 调用 switchCamera 方法在前置摄像头和后置摄像头之间切换,通话过程中也可随时切换。
  • 调用 switchCameraWithPosition 方法指定使用前置摄像头(CAMERA_POSITION_FRONT)或后置摄像头(CAMERA_POSITION_BACK),通话过程中也可随时指定。
  • 若切换摄像头后的最大分辨率不支持设置的编码参数,SDK 会根据设备实际支持的分辨率,调整编码的实际分辨率和对应的实际码率。
  • V5.3.0 及之后版本,关闭再开启本地视频采集后,采集的摄像头行为变更,由之前的延用上一次摄像头配置,改为默认采用switchCameraWithPosition 接口中指定的前置摄像头或后置摄像头。若在房间内重新开启摄像头采集,请调用 switchCamera 方法重新选择所需要的前置或后置摄像头。
  • V5.3.0 及之后版本,子房间支持调用 NERtcChannel#switchCameraNERtcChannel#switchCameraWithPosition 切换摄像头。

示例代码

// 切换前后摄像头
NERtcEx.getInstance().switchCamera();
 
//指定前置摄像头
NERtcEx.getInstance().switchCameraWithPosition(NERtcConstants.CameraPosition.CAMERA_POSITION_FRONT);

//指定后置摄像头
NERtcEx.getInstance().switchCameraWithPosition(NERtcConstants.CameraPosition.CAMERA_POSITION_BACK);

开关闪光灯

配置步骤

  1. 调用 isCameraTorchSupported 方法,检测设备是否支持闪光灯常开。
    • 一般情况下,App 默认开启前置摄像头,因此如果设备的前置摄像头不支持闪光灯,直接调用此方法会返回 NO(表示不支持闪光灯常开)。
    • 若您需要检查后置摄像头是否支持闪光灯,需要先调用 switchCamera 方法切换至后置摄像头或调用 switchCameraWithPosition 方法指定使用后置摄像头,再调用此方法。
  2. 调用 setCameraTorchOn 开关闪光灯,通话过程中也可随时开关。

示例代码

// 检测设备是否支持闪光灯常开
NERtcEx.getInstance().isCameraTorchSupported();

// 开关闪光灯
boolean cameraFlashOn = true;
NERtcEx.getInstance().setCameraTorchOn(cameraFlashOn);

手动对焦

配置步骤

  1. 调用 isCameraFocusSupported 方法,检测设备是否支持手动对焦。
  2. 调用 setCameraFocusPosition 方法设置手动对焦位置并触发对焦。相关参数说明如下:
    • focusX:触摸点相对于视图的横坐标,取值范围为 0 ~ 1。
    • focusY:触摸点相对于视图的纵坐标,取值范围为 0 ~ 1。

    对焦点区域面积对测光和对焦都有影响,用户应根据需要调整对焦点区域面积。

示例代码

// 检测设备是否支持手动对焦
NERtcEx.getInstance().isCameraFocusSupported();

// 设置手动对焦位置
if(event.getAction() == MotionEvent.ACTION_UP){
    NERtcEx.getInstance().setCameraFocusPosition(event.getX(),event.getY());
}   

手动曝光

配置步骤

  1. 调用 isCameraExposurePositionSupported 方法,检测设备是否支持手动曝光功能。
  2. 调用 setCameraExposurePosition 方法设置手动曝光位置并触发曝光。相关参数说明如下:
    • focusX:触摸点相对于视图的横坐标,取值范围为 0 ~ 1。
    • focusY:触摸点相对于视图的纵坐标,取值范围为 0 ~ 1。

示例代码

// 检测设备是否支持手动曝光
NERtcEx.getInstance().isCameraExposurePositionSupported();

// 设置手动曝光位置
if(event.getAction() == MotionEvent.ACTION_UP){
    NERtcEx.getInstance().setCameraExposurePosition(event.getX(),event.getY());
}   

API 参考

方法 功能描述
isCameraZoomSupported 是否支持摄像头缩放
setCameraZoomFactor 设置摄像头缩放比例
switchCamera 切换前后置摄像头
switchCameraWithPosition 指定前后置摄像头
isCameraTorchSupported 是否支持闪光灯常开
setCameraTorchOn 开关闪光灯
isCameraFocusSupported 是否支持手动对焦
setCameraFocusPosition 设置手动对焦位置
isCameraExposurePositionSupported 是否支持手动曝光
setCameraExposurePosition 设置手动曝光位置
此文档是否对你有帮助?
有帮助
去反馈
  • 功能介绍
  • 注意事项
  • 示例项目源码
  • 摄像头缩放
  • 配置步骤
  • 示例代码
  • 摄像头切换
  • 配置步骤
  • 示例代码
  • 开关闪光灯
  • 配置步骤
  • 示例代码
  • 手动对焦
  • 配置步骤
  • 示例代码
  • 手动曝光
  • 配置步骤
  • 示例代码
  • API 参考