跳到主要内容

摄像头

RCRTCCameraOutputStream 提供摄像头的管理能力。

应用不支持自行创建 RCRTCCameraOutputStream 对象。请在 IM 连接成功并调用 RCRTCEngine.init 完成初始化后,再调用以下方法,否则可能返回空指针。

打开摄像头

通过 RCRTCEngine.getInstance().getDefaultVideoStream() 获取 RCRTCCameraOutputStream,再调用 startCamera 打开摄像头,开始采集数据。

Java
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 关闭摄像头。

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

切换摄像头

使用 switchCamera 切换采集摄像头。

Java
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 传入对焦点的坐标,来对对焦区域进行设置,坐标原点在屏幕的左上角。

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

区域测光

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

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

采集方向

使用 setCameraDisplayOrientation 设置摄像头采集角度。传入 0 表示使用 SDK 根据摄像头 id 计算的默认角度;可选值:0、90、180、270。

Java
// 设置采集角度。0 表示使用 SDK 计算的默认角度;取值:0/90/180/270。
RCRTCEngine.getInstance().getDefaultVideoStream().setCameraDisplayOrientation(90);

镜像翻转

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

Java
// 设置本地镜像预览状态。true:开启镜像(默认);false:关闭
RCRTCEngine.getInstance().getDefaultVideoStream().setPreviewMirror(true);

缩放比例

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

提示

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

Java
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 方法来开启摄像头

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