摄像头
RCRTCCameraOutputStream 提供摄像头的管理能力。
应用不支持自行创建 RCRTCCameraOutputStream 对象。请在 IM 连接成功并调用 RCRTCEngine.init
完成初始化后,再调用以下方法,否则可能返 回空指针。
打开摄像头
通过 RCRTCEngine.getInstance().getDefaultVideoStream()
获取 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 计算的默认角度;取值:0/90/180/270。
RCRTCEngine.getInstance().getDefaultVideoStream().setCameraDisplayOrientation(90);
镜像翻转
使用 setPreviewMirror 设置本地镜像预览。
// 设置本地镜像预览状态 。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);
}