视频设备管理

功能描述

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

对焦和曝光:支持手动选择对焦和曝光区域,摄像头自动进行对焦和曝光。

Android

实现方法

参考如下步骤,在你的项目中实现摄像头高级功能:

示例代码

    // 切换前后摄像头。
    NERtcEx.getInstance().switchCamera();

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

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

    // 实现手动对焦功能。
    if(event.getAction() == MotionEvent.ACTION_UP){
        NERtcEx.getInstance().setCameraFocusPosition(event.getX(),event.getY());
    }    

API参考

方法 功能描述
switchCamera 切换前置/后置摄像头
startVideoPreview 开启视频预览
stopVideoPreview 设置是否打开闪光灯
setCameraZoomFactor 设置缩放
setCameraTorchOn 开启或关闭闪光灯
setCameraFocusPosition 设置对焦区域
getCameraCurrentZoom 获取当前缩放比例
getCameraMaxZoom 获取摄像头支持的最大视频缩放比例

开发注意事项

iOS

视频场景中,经常会使用到摄像头曝光、对焦和闪光灯等功能,帮助被拍摄物成像清晰、亮度适宜。 NERTC SDK 在移动平台提供整套的摄像头管理方法,方便用户切换前后摄像头,并对摄像头的缩放、对焦和曝光进行设置。

对焦和曝光:支持手动选择对焦和曝光区域,摄像头自动进行对焦和曝光。

实现方法

参考如下步骤,在你的项目中实现摄像头高级功能:

切换摄像头

调用 - (int)switchCamera 进行前后摄像头的切换,通话过程中同样支持。

开关闪光灯

调用 - (int)setCameraTorchOn:(BOOL)on 进行闪光灯开关,通话过程中同样支持。

设置摄像头缩放比例

调用 - (int)setCameraZoomFactor:(float)factor 设置具体需要的缩放比例,可在通话过程中动态调整。

实现手动对焦功能

调用 - (int)setCameraFocusPositionX:(float)focusX Y:(float)focusY 方法设置手动对焦位置并触发对焦。

示例代码

    // 切换前后摄像头。
    [self.engine switchCamera];

    // 开关闪光灯。
    BOOL isTorchOn = [self.engine isCameraTorchOn];
    int result = [self.engine setCameraTorchOn:!isTorchOn];

    // 设置摄像头缩放比例。
    CGFloat scale = self.curVideoScale * pinchScale;
    scale = MAX(1, scale); // > 1
    scale = MIN(scale, [self.engine maxCameraZoomScale])
    [self.engine setCameraZoomFactor:scale];

    // 实现手动对焦功能。
    CGPoint point = [tap locationInView:self.previewContainer];
    float x = point.x / CGRectGetWidth(self.previewContainer.bounds);
    float y = point.y / CGRectGetHeight(self.previewContainer.bounds);
    [self.engine setCameraFocusPositionX:x Y:y];

API参考

方法 功能描述
switchCamera 切换前置/后置摄像头
isCameraTorchSupported 检测设备是否支持闪光灯常开
setCameraTorchOn 设置是否打开闪光灯
setCameraZoomFactor 设置摄像头缩放比例
setCameraFocusPositionX:Y: 设置当前摄像头聚焦点位置
maxCameraZoomScale 当前摄像头支持的最大缩放比例
isCameraTorchOn 查询当前摄像头是否打开手电筒

开发注意事项

  1. maxCameraZoomScale 当前摄像头支持的最大缩放比例由设备底层接口提供,该值可能很大,如设置过大图像可能会模糊。用户应根据自身需要设置相应的缩放比例;
  2. 用户开启闪光灯操作有失败概率,用户操作前应先判断当前摄像头是否支持闪光灯常开;
  3. 设置摄像头聚焦点位置时注意接口参数的值范围(X: (0-1), Y: (0-1)),具体指 X: 接触点X坐标 / 视图宽,Y: 接触点Y坐标 / 视图高

Web

在会议等场景,用户在开始通话前,通常会选择进行音视频设备的选择和检测,以保证进入通话后的音视频体验。 以下说明如何获取视频设备列表,为保证通话或直播质量,我们推荐在进入频道前进行视频设备测试,以检测摄像头等视频设备是否能够正常工作。

实现方法

1、获取具体的设备列表

2、选择开启制定的设备

3、启动选中的设备

示例代码

// 此处以同时启动麦克风与摄像头设备示例
WebRTC2.getDevices().then((devices)=>{

  var audioDevices = devices.audioIn;  //数组,麦克风设备列表
  var videoDevices = devices.video;  //数组,摄像头设备列表

  var uid = Math.floor(Math.random()*10000);
  var selectedMicrophoneId = audioDevices[0];
  var selectedCameraId = videoDevices[0];
  var localStream = WebRTC2.createStream({
      uid: uid,
      audio: true,
      microphoneId: selectedMicrophoneId, //指定要开启的mic
      video: true,
      cameraId: selectedCameraId, //指定要开启的camera
      screen: false
  });

  localStream.init().then(()=>{
    //用于播放视频的div元素
    let div = document.getElementById('local-container')
    localStream.play(div)
    //设置播放的视频容器大小    
    localStream.setLocalRenderMode({
      width: 180,
      height: 150,
      cut: true
    })

    setInterval(function(){
        console.log(`获取mic采集的音量: ${localStream.getAudioLevel()}`);
    }, 1000);
  })
})

API参考

事件 功能描述
getCameras 获取摄像头列表
getDevices 获取所有设备列表