摄像头
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);