跳到主要内容

摄像头

RCRTCCameraOutputStream 对象中提供了摄像头的管理方法。

应用程序不能自己创建 RCRTCCameraOutputStream 对象。请在 IM 连接成功后调用 RCRTCEngine.init 方法之后调用以下所有方法,否则会返回空指针。

打开摄像头

使用通过 RCRTCEngine 中的 getDefaultVideoStream 方法获取 RCRTCCameraOutputStream 对象,再调用 RCRTCCameraOutputStream 下的 startCamera 方法打开摄像头,开始采集数据。

RCRTCEngine.getInstance().getDefaultVideoStream().startCamera(new IRCRTCResultDataCallback<Boolean>() {
@Override
public void onSuccess(Boolean isFrontCamera) {
// 打开成功
}

@Override
public void onFailed(RTCErrorCode errorCode) {
// 打开失败
}
});

结果回调可返回是否开启成功。在摄像头被占用或其他故障时,会将失败结果通知给使用者。

提示

对于安卓嵌入式设备或使用外接摄像头的情况,建议实现异步回调以确保设备开启成功。

如果需要打开指定摄像头,以及是否镜像显示,可以使用 startCamera(int cameraId, boolean mirror, IRCRTCResultDataCallback<Boolean> cameraCallback) 方法。

关闭摄像头

使用 stopCamera 关闭摄像头。

RCRTCEngine.getInstance().getDefaultVideoStream().stopCamera();

切换摄像头

使用 switchCamera 切换采集摄像头。

RCRTCEngine.getInstance().getDefaultVideoStream().switchCamera(new CameraSwitchHandler() {
@Override
public void onCameraSwitchDone(boolean isFrontCamera) {
// 切换成功
}

@Override
public void onCameraSwitchError(String errorDescription) {
// 切换失败
}
});

结果回调可返回是否开启成功。在摄像头被占用或其他故障时,会将失败结果通知给使用者。如果需要打开指定摄像头,以及是否镜像显示,可以使用 switchCamera(int cameraId, boolean mirror, CameraVideoCapturer.CameraSwitchHandler handler) 方法。

手动对焦

使用 isCameraFocusSupported 来判断摄像头是否支持区域对焦;如果支持,还可以继续调用 setCameraFocusPositionInPreview 传入对焦点的坐标,来对对焦区域进行设置,坐标原点在屏幕的左上角。

if (RCRTCEngine.getInstance().getDefaultVideoStream().isCameraFocusSupported()) {
RCRTCEngine.getInstance().getDefaultVideoStream().setCameraFocusPositionInPreview(100, 100);
}

区域测光

使用 isCameraExposurePositionSupported 判断摄像头是否支持区域测光,如果支持的话可以调用 setCameraFocusPositionInPreview 进行区域测光。

  • 进行区域测光前,需要先判断设备是否支持区域测光。
  • 设置区域测光的坐标原点为视频区域的左上角。
if(RCRTCEngine.getInstance().getDefaultVideoStream().isCameraExposurePositionSupported()) {
RCRTCEngine.getInstance().getDefaultVideoStream().setCameraExposurePositionInPreview(100, 100);
}

采集方向

使用 setCameraDisplayOrientation 设置摄像头采集角度。 为 0 时则使用 SDK 中获取的摄像头 id 计算出的采集角度,传入的参数值必须设置为:0、90、180、270 中的数值。

// 设置摄像头采集角度。为 0 时使用 SDK 中获取的摄像头 id 计算出的采集角度,当开启是手机前置摄像头时,设置该参数会顺时针旋转图像。orientation 默认为 0 则使用 SDK 中获取的摄像头 id 计算出的采集角度,值必须设置为:0、90、180、270
RCRTCEngine.getInstance().getDefaultVideoStream().setCameraDisplayOrientation(90);

镜像翻转

使用 setPreviewMirror 设置本地镜像预览。

// 设置本地镜像预览状态。mirror true: 开启镜像,默认值。false: 不开启
RCRTCEngine.getInstance().getDefaultVideoStream().setPreviewMirror(true);

缩放比例

使用 isCameraZoomSupported 判断当前开启的摄像头是否支持缩放功能。使用 getCameraMaxZoomFactor 获取支持的最大缩放比例。使用 setCameraZoomFactor 方法进行设置。

提示

调用 isCameraZoomSupported , getCameraMaxZoomFactor , setCameraZoomFactor 方法前,必须先调用 startCamera 方法来开启摄像头

RCRTCEngine.getInstance().getDefaultVideoStream().startCamera(new IRCRTCResultDataCallback<Boolean>(){...});
if(RCRTCEngine.getInstance().getDefaultVideoStream().isCameraZoomSupported()) {
float zoomFactor = RCRTCEngine.getInstance().getDefaultVideoStream().getCameraMaxZoomFactor();
RCRTCEngine.getInstance().getDefaultVideoStream().setCameraZoomFactor(zoomFactor);
}

闪光灯设置

使用 isCameraTorchSupported 判断当前开启的摄像头是否支持闪光灯设置。如果支持的话可以使用 enableCameraTorch 开启或关闭闪光灯。

提示

调用 isCameraTorchSupported 方法或 enableCameraTorch 方法前,必须先调用 startCamera 方法来开启摄像头

RCRTCEngine.getInstance().getDefaultVideoStream().startCamera(new IRCRTCResultDataCallback<Boolean>(){...});
if(RCRTCEngine.getInstance().getDefaultVideoStream().isCameraTorchSupported()) {
RCRTCEngine.getInstance().getDefaultVideoStream().enableCameraTorch(true);
}