移动端摄像头管理
enableMultiCamera
开启或关闭多路摄像头采集。
#if defined(__APPLE__) && TARGET_OS_IOS
virtual int enableMultiCamera(bool enabled, const CameraCapturerConfiguration& config) = 0;
#endif
v4.1.0
在已有摄像头采集视频的场景下,声网推荐你采用以下步骤实现多路摄像头采集、发布视频:
-
调用该方法开启多路摄像头采集。
-
调用
startPreview [2/2]
开启本地视频预览。 -
调用
startCameraCapture
并设置sourceType
指定第二个摄像头开始采集。 -
调用
joinChannelEx
并设置publishSecondaryCameraTrack
为true
,在频道内发布第二路摄像头采集的视频流。
如果要关闭多路摄像头采集,可参考以下步骤:
-
调用该方法并将
enabled
设置为false
。
注:你可以在 startPreview [2/2]
前后调用该方法开启多摄像头采集:
-
如果在
startPreview [2/2]
之前开启,则本地视频预览会同时出现两个摄像头采集的画面。 -
如果在
startPreview [2/2]
之后开启,SDK 会先停止当前的摄像头采集,然后再开启原摄像头和第二个摄像头,本地视频预览会出现短暂黑屏、然后自动恢复正常。
该方法仅适用于 iOS。
使用多路摄像头采集视频时,请确保系统版本为 13.0 及以上。
支持多路摄像头采集的最低 iOS 设备类型如下所示:
-
iPhone XR
-
iPhone XS
-
iPhone XS Max
-
iPad Pro (第三代及以上)
参数
参数名 | 描述 |
---|---|
enabled | 是否开启多摄像头视频采集模式:
|
config | 第二个摄像头的采集配置。详见 |
返回值
-
0: 方法调用成功。
-
< 0: 方法调用失败。详见
错误码
了解详情和解决建议。
getCameraMaxZoomFactor
获取摄像头支持最大缩放比例。
virtual float getCameraMaxZoomFactor() = 0;
注意:
-
该方法仅适用于 Android 和 iOS。
-
该方法必须在摄像头成功开启后调用,即 SDK 触发
onLocalVideoStateChanged
回调,返回本地视频状态为LOCAL_VIDEO_STREAM_STATE_CAPTURING
(1) 后。
返回值
设备摄像头支持的最大缩放比例。
所属接口类isCameraAutoExposureFaceModeSupported
检测设备是否支持自动曝光功能。
virtual bool isCameraAutoExposureFaceModeSupported() = 0;
注意:
-
该方法仅适用于 iOS。
-
该方法必须在摄像头成功开启后调用,即 SDK 触发
onLocalVideoStateChanged
回调,返回本地视频状态为LOCAL_VIDEO_STREAM_STATE_CAPTURING
(1) 后。
返回值
-
true
: 设备支持自动曝光功能。 -
false
: 设备不支持自动曝光功能。
isCameraAutoFocusFaceModeSupported
检测设备是否支持人脸对焦功能。
virtual bool isCameraAutoFocusFaceModeSupported() = 0;
注意:
-
该方法仅适用于 Android 和 iOS。
-
该方法必须在摄像头成功开启后调用,即 SDK 触发
onLocalVideoStateChanged
回调,返回本地视频状态为LOCAL_VIDEO_STREAM_STATE_CAPTURING
(1) 后。
返回值
-
true
: 设备支持人脸对焦功能。 -
false
: 设备不支持人脸对焦功能。
isCameraExposurePositionSupported
检测设备是否支持手动曝光功能。
virtual bool isCameraExposurePositionSupported() = 0;
注意:
-
该方法仅适用于 Android 和 iOS。
-
该方法必须在摄像头成功开启后调用,即 SDK 触发
onLocalVideoStateChanged
回调,返回本地视频状态为LOCAL_VIDEO_STREAM_STATE_CAPTURING
(1) 后。
返回值
-
true
: 设备支持手动曝光功能。 -
false
: 设备不支持手动曝光功能。
isCameraExposureSupported
查询当前摄像头是否支持曝光调节。
virtual bool isCameraExposureSupported() = 0;
v4.2.2
注意:
-
该方法仅适用于 Android 和 iOS。
-
该方法必须在摄像头成功开启后调用,即 SDK 触发
onLocalVideoStateChanged
回调,返回本地视频状态为LOCAL_VIDEO_STREAM_STATE_CAPTURING
(1) 后。 -
建议你在调用
setCameraExposureFactor
调节曝光系数前,先调用该方法查询当前摄像头是否支持曝光调节。 -
当你调用该方法时,查询的是当前正在使用的摄像头是否支持曝光调节,即调用
setCameraCapturerConfiguration
时指定的摄像头。
返回值
-
true
:方法调用成功。 -
false
:方法调用失败。详见错误码
了解详情和解决建议。
isCameraFaceDetectSupported
检查设备摄像头是否支持人脸检测。
virtual bool isCameraFaceDetectSupported() = 0;
注意:
-
该方法仅适用于 Android 和 iOS。
-
该方法必须在摄像头成功开启后调用,即 SDK 触发
onLocalVideoStateChanged
回调,返回本地视频状态为LOCAL_VIDEO_STREAM_STATE_CAPTURING
(1) 后。
返回值
-
true
: 设备摄像头支持人脸检测。 -
false
: 设备摄像头不支持人脸检测。
isCameraFocusSupported
检测设备是否支持手动对焦功能。
virtual bool isCameraFocusSupported() = 0;
注意:
-
该方法仅适用于 Android 和 iOS。
-
该方法必须在摄像头成功开启后调用,即 SDK 触发
onLocalVideoStateChanged
回调,返回本地视频状态为LOCAL_VIDEO_STREAM_STATE_CAPTURING
(1) 后。
返回值
-
true
: 设备支持手动对焦功能。 -
false
: 设备不支持手动对焦功能。
isCameraTorchSupported
检测设备是否支持闪光灯常开。
virtual bool isCameraTorchSupported() = 0;
注意:
-
该方法仅适用于 Android 和 iOS。
-
该方法必须在摄像头成功开启后调用,即 SDK 触发
onLocalVideoStateChanged
回调,返回本地视频状态为LOCAL_VIDEO_STREAM_STATE_CAPTURING
(1) 后。 -
一般情况下,app 默认开启前置摄像头,因此如果你的前置摄像头不支持闪光灯常开,直接使用该方法会返回 false。如果需要检查后置摄像头是否支持闪光灯常开,需要先使用
switchCamera
切换摄像头,再使用该方法。 -
在系统版本 15 的 iPad 上,即使
isCameraTorchSupported
返回true
,也可能因系统问题导致你无法通过setCameraTorchOn
成功开启闪光灯。
返回值
-
true
: 设备支持闪光灯常开。 -
false
: 设备不支持闪光灯常开。
isCameraZoomSupported
检测设备是否支持摄像头缩放功能。
virtual bool isCameraZoomSupported() = 0;
注意:
-
该方法仅适用于 Android 和 iOS。
-
该方法必须在摄像头成功开启后调用,即 SDK 触发
onLocalVideoStateChanged
回调,返回本地视频状态为LOCAL_VIDEO_STREAM_STATE_CAPTURING
(1) 后。
返回值
-
true
: 设备支持相机缩放功能。 -
false
: 设备不支持相机缩放功能。
setCameraAutoExposureFaceModeEnabled
设置是否开启自动曝光功能。
virtual int setCameraAutoExposureFaceModeEnabled(bool enabled) = 0;
注意:
-
该方法仅适用于 iOS。
-
该方法必须在
enableVideo
后调用,设置结果在摄像头成功开启后生效,即 SDK 触发onLocalVideoStateChanged
回调返回本地视频状态为LOCAL_VIDEO_STREAM_STATE_CAPTURING
(1) 后。
参数
参数名 | 描述 |
---|---|
enabled | 是否开启自动曝光:
|
返回值
-
0: 方法调用成功。
-
< 0: 方法调用失败。详见
错误码
了解详情和解决建议。
setCameraAutoFocusFaceModeEnabled
设置是否开启人脸对焦功能。
virtual int setCameraAutoFocusFaceModeEnabled(bool enabled) = 0;
注意:
-
该方法仅适用于 Android 和 iOS。
-
该方法必须在
enableVideo
后调用,设置结果在摄像头成功开启后生效,即 SDK 触发onLocalVideoStateChanged
回调返回本地视频状态为LOCAL_VIDEO_STREAM_STATE_CAPTURING
(1) 后。
参数
参数名 | 描述 |
---|---|
enabled | 是否开启人脸对焦:
|
返回值
-
0: 方法调用成功。
-
< 0: 方法调用失败。详见
错误码
了解详情和解决建议。
setCameraCapturerConfiguration
设置摄像头采集配置。
virtual int setCameraCapturerConfiguration(const CameraCapturerConfiguration& config) = 0;
注意:
-
该方法仅适用于 Android 和 iOS。
-
该方法必须在开启摄像头后调用,如
startPreview [2/2]
和enableVideo
后调用。
参数
参数名 | 描述 |
---|---|
config | 摄像头采集配置,详见 |
返回值
-
>0: 方法调用成功。
-
< 0: 方法调用失败。详见
错误码
了解详情和解决建议。
setCameraExposureFactor
设置当前摄像头的曝光系数。
virtual int setCameraExposureFactor(float factor) = 0;
v4.2.2
当拍摄环境光线不足或过于明亮时,会影响视频采集的画质。为了获得更好的视频效果,你可以使用该方法调节摄像头的曝光系数。
注意:
-
该方法仅适用于 Android 和 iOS。
-
该方法必须在
enableVideo
后调用,设置结果在摄像头成功开启后生效,即 SDK 触发onLocalVideoStateChanged
回调返回本地视频状态为LOCAL_VIDEO_STREAM_STATE_CAPTURING
(1) 后。 -
建议你在调用该方法前,先调用
isCameraExposureSupported
查询当前摄像头是否支持调节曝光系数。 -
当你调用该方法时,设置的是当前正在使用的摄像头的曝光系数,即调用
setCameraCapturerConfiguration
时指定的摄像头。
参数
参数名 | 描述 |
---|---|
factor | 摄像头的曝光系数。默认值为 0,表示使用摄像头的默认曝光量。取值越大,曝光量越大。视频图像过曝时,你可以降低曝光系数;视频图像欠曝且暗部细节丢失时,你可以增加曝光系数。如果你指定的曝光系数超出设备支持的范围,SDK 会自动调节为设备实际支持的范围。 |
返回值
-
0: 方法调用成功。
-
< 0: 方法调用失败。详见
错误码
了解详情和解决建议。
setCameraExposurePosition
设置手动曝光位置。
virtual int setCameraExposurePosition(float positionXinView, float positionYinView) = 0;
注意:
-
该方法仅适用于 Android 和 iOS。
-
该方法必须在
enableVideo
后调用,设置结果在摄像头成功开启后生效,即 SDK 触发onLocalVideoStateChanged
回调返回本地视频状态为LOCAL_VIDEO_STREAM_STATE_CAPTURING
(1) 后。 -
成功调用该方法后,本地会触发
onCameraExposureAreaChanged
回调。
参数
参数名 | 描述 |
---|---|
positionXinView | 触摸点相对于视图的横坐标。 |
positionYinView | 触摸点相对于视图的纵坐标。 |
返回值
-
0: 方法调用成功。
-
< 0: 方法调用失败。详见
错误码
了解详情和解决建议。
setCameraFocusPositionInPreview
设置手动对焦位置,并触发对焦。
virtual int setCameraFocusPositionInPreview(float positionX, float positionY) = 0;
注意:
-
该方法仅适用于 Android 和 iOS。
-
该方法必须在
enableVideo
后调用,设置结果在摄像头成功开启后生效,即 SDK 触发onLocalVideoStateChanged
回调返回本地视频状态为LOCAL_VIDEO_STREAM_STATE_CAPTURING
(1) 后。 -
成功调用该方法后,本地会触发
onCameraFocusAreaChanged
回调。
参数
参数名 | 描述 |
---|---|
positionX | 触摸点相对于视图的横坐标。 |
positionY | 触摸点相对于视图的纵坐标。 |
返回值
-
0: 方法调用成功。
-
< 0: 方法调用失败。详见
错误码
了解详情和解决建议。
setCameraTorchOn
设置是否打开闪光灯。
virtual int setCameraTorchOn(bool isOn) = 0;
注意:
-
该方法仅适用于 Android 和 iOS。
-
该方法必须在
enableVideo
后调用,设置结果在摄像头成功开启后生效,即 SDK 触发onLocalVideoStateChanged
回调返回本地视频状态为LOCAL_VIDEO_STREAM_STATE_CAPTURING
(1) 后。
参数
参数名 | 描述 |
---|---|
isOn | 是否打开闪光灯:
|
返回值
-
0: 方法调用成功。
-
< 0: 方法调用失败。详见
错误码
了解详情和解决建议。
setCameraZoomFactor
设置摄像头缩放比例。
virtual int setCameraZoomFactor(float factor) = 0;
注意:
-
该方法仅适用于 Android 和 iOS。
-
该方法必须在
enableVideo
后调用,设置结果在摄像头成功开启后生效,即 SDK 触发onLocalVideoStateChanged
回调返回本地视频状态为LOCAL_VIDEO_STREAM_STATE_CAPTURING
(1) 后。
返回值
-
方法调用成功: 返回设置的
factor
值。 -
方法调用失败: 返回值 < 0。
switchCamera
切换前置/后置摄像头。
virtual int switchCamera() = 0;
注意:
-
该方法仅适用于 Android 和 iOS。
-
该方法必须在摄像头成功开启后调用,即 SDK 触发
onLocalVideoStateChanged
回调,返回本地视频状态为LOCAL_VIDEO_STREAM_STATE_CAPTURING
(1) 后。
返回值
-
0: 方法调用成功。
-
< 0: 方法调用失败。详见
错误码
了解详情和解决建议。
onCameraExposureAreaChanged
摄像头曝光区域已改变回调。
virtual void onCameraExposureAreaChanged(int x, int y, int width, int height) {
(void)x;
(void)y;
(void)width;
(void)height;
}
该回调是由本地用户调用 setCameraExposurePosition
方法改变曝光位置触发的。
注意: 该回调仅适用于 Android 和 iOS。
参数
参数名 | 描述 |
---|---|
x | 发生改变的曝光区域的 x 坐标。 |
y | 发生改变的曝光区域的 y 坐标。 |
width | 发生改变的曝光区域的宽度。 |
height | 发生改变的曝光区域的高度。 |
onCameraFocusAreaChanged
相机对焦区域已改变回调。
virtual void onCameraFocusAreaChanged(int x, int y, int width, int height) {
(void)x;
(void)y;
(void)width;
(void)height;
}
注意: 该回调仅适用于 Android 和 iOS。
参数
参数名 | 描述 |
---|---|
x | 发生改变的对焦区域的 x 坐标。 |
y | 发生改变的对焦区域的 y 坐标。 |
width | 发生改变的对焦区域的宽度。 |
height | 发生改变的对焦区域的高度。 |
onCameraReady
摄像头就绪回调。
virtual void onCameraReady()
请改用 onLocalVideoStateChanged
中的 LOCAL_VIDEO_STREAM_STATE_CAPTURING(1)。
该回调提示已成功打开摄像头,可以开始捕获视频。
所属接口类