视频设备管理
介绍跟视频设备管理相关的方法和回调。
enableMultiCamera
开启或关闭多路摄像头采集。
- (int)enableMultiCamera:(BOOL)enabled config:(AgoraCameraCapturerConfiguration* _Nullable)config NS_SWIFT_NAME(enableMultiCamera(_:config:));
详情
- 自从
- v4.1.0
- 调用该方法开启多路摄像头采集。
- 调用 startPreview [2/2] 开启本地视频预览。
- 调用 startCameraCapture 并设置 sourceType 指定第二个摄像头开始采集。
- 调用 joinChannelExByToken [1/2] 并设置 publishSecondaryCameraTrack 为
YES
,在频道内发布第二路摄像头采集的视频流。
- 调用 stopCameraCapture。
- 调用该方法并将 enabled 设置为
NO
。
- 如果在 startPreview [2/2] 之前开启,则本地视频预览会同时出现两个摄像头采集的画面。
- 如果在 startPreview [2/2] 之后开启,SDK 会先停止当前的摄像头采集,然后再开启原摄像头和第二个摄像头,本地视频预览会出现短暂黑屏、然后自动恢复正常。
使用多路摄像头采集视频时,请确保系统版本为 13.0 及以上。
- iPhone XR
- iPhone XS
- iPhone XS Max
- iPad Pro (第三代及以上)
参数
- enabled
- 是否开启多摄像头视频采集模式:
YES
:开启多摄像头采集模式,SDK 使用多路摄像头采集视频。NO
:关闭多摄像头采集模式,SDK 仅使用单路摄像头采集视频。
- config
- 第二个摄像头的采集配置。详见 AgoraCameraCapturerConfiguration。
返回值
- 0: 方法调用成功
- < 0: 方法调用失败
cameraMaxZoomFactor
获取摄像头支持最大缩放比例。
- (CGFloat)cameraMaxZoomFactor;
详情
- 该方法必须在摄像头成功开启后调用,即 SDK 触发 localVideoStateChangedOfState 回调,返回本地视频状态为 AgoraVideoLocalStateCapturing (1) 后。
返回值
设备摄像头支持的最大缩放比例。
isCameraAutoExposureFaceModeSupported
检测设备是否支持自动曝光功能。
- (BOOL)isCameraAutoExposureFaceModeSupported;
详情
- 该方法必须在摄像头成功开启后调用,即 SDK 触发 localVideoStateChangedOfState 回调,返回本地视频状态为 AgoraVideoLocalStateCapturing (1) 后。
返回值
YES
: 设备支持自动曝光功能。NO
: 设备不支持自动曝光功能。
isCameraAutoFocusFaceModeSupported
检测设备是否支持人脸对焦功能。
- (BOOL)isCameraAutoFocusFaceModeSupported;
详情
- 该方法必须在摄像头成功开启后调用,即 SDK 触发 localVideoStateChangedOfState 回调,返回本地视频状态为 AgoraVideoLocalStateCapturing (1) 后。
返回值
YES
: 设备支持人脸对焦功能。NO
: 设备不支持人脸对焦功能。
isCameraExposurePositionSupported
检测设备是否支持手动曝光功能。
- (BOOL)isCameraExposurePositionSupported;
详情
- 该方法必须在摄像头成功开启后调用,即 SDK 触发 localVideoStateChangedOfState 回调,返回本地视频状态为 AgoraVideoLocalStateCapturing (1) 后。
返回值
YES
: 设备支持手动曝光功能。NO
: 设备不支持手动曝光功能。
isCameraExposureSupported
查询当前摄像头是否支持曝光调节。
- (BOOL)isCameraExposureSupported NS_SWIFT_NAME(isCameraExposureSupported());
详情
- 自从
- v4.2.2
- 该方法必须在摄像头成功开启后调用,即 SDK 触发 localVideoStateChangedOfState 回调,返回本地视频状态为 AgoraVideoLocalStateCapturing (1) 后。
- 建议你在调用 setCameraExposureFactor 调节曝光系数前,先调用该方法查询当前摄像头是否支持曝光调节。
- 当你调用该方法时,查询的是当前正在使用的摄像头是否支持曝光调节,即调用 setCameraCapturerConfiguration 时指定的摄像头。
返回值
YES
:方法调用成功。NO
:方法调用失败。
isCameraFocusPositionInPreviewSupported
检测设备是否支持手动对焦功能。
- (BOOL)isCameraFocusPositionInPreviewSupported;
详情
- 该方法必须在摄像头成功开启后调用,即 SDK 触发 localVideoStateChangedOfState 回调,返回本地视频状态为 AgoraVideoLocalStateCapturing (1) 后。
返回值
YES
: 设备支持手动对焦功能。NO
: 设备不支持手动对焦功能。
isCameraTorchSupported
检测设备是否支持闪光灯常开。
- (BOOL)isCameraTorchSupported NS_SWIFT_NAME(isCameraTorchSupported());
详情
- 该方法必须在摄像头成功开启后调用,即 SDK 触发 localVideoStateChangedOfState 回调,返回本地视频状态为 AgoraVideoLocalStateCapturing (1) 后。
- 一般情况下,app 默认开启前置摄像头,因此如果你的前置摄像头不支持闪光灯常开,直接使用该方法会返回 NO。如果需要检查后置摄像头是否支持闪光灯常开,需要先使用 switchCamera 切换摄像头,再使用该方法。
- 在系统版本 15 的 iPad 上,即使 isCameraTorchSupported 返回
YES
,也可能因系统问题导致你无法通过 setCameraTorchOn 成功开启闪光灯。
返回值
YES
: 设备支持闪光灯常开。NO
: 设备不支持闪光灯常开。
isCameraZoomSupported
检测设备是否支持摄像头缩放功能。
- (BOOL)isCameraZoomSupported;
详情
- 该方法必须在摄像头成功开启后调用,即 SDK 触发 localVideoStateChangedOfState 回调,返回本地视频状态为 AgoraVideoLocalStateCapturing (1) 后。
返回值
YES
: 设备支持相机缩放功能。NO
: 设备不支持相机缩放功能。
setCameraAutoExposureFaceModeEnabled
设置是否开启自动曝光功能。
详情
- 该方法必须在 enableVideo 后调用,设置结果在摄像头成功开启后生效,即 SDK 触发 localVideoStateChangedOfState 回调返回本地视频状态为 AgoraVideoLocalStateCapturing (1) 后。
参数
-
是否开启自动曝光:
YES
: 开启自动曝光。NO
: 关闭自动曝光。
返回值
- < 0: 方法调用失败。
setCameraAutoFocusFaceModeEnabled
设置是否开启人脸对焦功能。
- (BOOL)setCameraAutoFocusFaceModeEnabled:(BOOL)enable;
详情
SDK 默认开启人脸自动对焦。如需自行设置人脸自动对焦,请调用该方法。
- 该方法必须在 enableVideo 后调用,设置结果在摄像头成功开启后生效,即 SDK 触发 localVideoStateChangedOfState 回调返回本地视频状态为 AgoraVideoLocalStateCapturing (1) 后。
参数
- enable
-
是否开启人脸对焦:
YES
: 开启人脸对焦功能。NO
: 关闭人脸对焦功能。
返回值
YES
: 方法调用成功。NO
: 方法调用失败。
setCameraCapturerConfiguration
设置摄像头采集配置。
- (int)setCameraCapturerConfiguration:(AgoraCameraCapturerConfiguration * _Nullable)config;
详情
- 该方法必须在开启摄像头后调用,如 startPreview [2/2] 和 enableVideo 后调用。
参数
- config
- 摄像头采集配置,详见 AgoraCameraCapturerConfiguration。
返回值
- >0: 方法调用成功。
- < 0: 方法调用失败。
setCameraExposureFactor
设置当前摄像头的曝光系数。
- (CGFloat)setCameraExposureFactor:(CGFloat)exposureFactor NS_SWIFT_NAME(setCameraExposureFactor(_:));
详情
- 自从
- v4.2.2
当拍摄环境光线不足或过于明亮时,会影响视频采集的画质。为了获得更好的视频效果,你可以使用该方法调节摄像头的曝光系数。
- 该方法必须在 enableVideo 后调用,设置结果在摄像头成功开启后生效,即 SDK 触发 localVideoStateChangedOfState 回调返回本地视频状态为 AgoraVideoLocalStateCapturing (1) 后。
- 建议你在调用该方法前,先调用 isCameraExposureSupported 查询当前摄像头是否支持调节曝光系数。
- 当你调用该方法时,设置的是当前正在使用的摄像头的曝光系数,即调用 setCameraCapturerConfiguration 时指定的摄像头。
参数
- exposureFactor
-
摄像头的曝光系数。默认值为 0,表示使用摄像头的默认曝光量。取值越大,曝光量越大。视频图像过曝时,你可以降低曝光系数;视频图像欠曝且暗部细节丢失时,你可以增加曝光系数。如果你指定的曝光系数超出设备支持的范围,SDK 会自动调节为设备实际支持的范围。
取值范围为 [-8.0,8.0]。
返回值
无实际含义。
setCameraExposurePosition
设置手动曝光位置。
- (BOOL)setCameraExposurePosition:(CGPoint)positionInView;
详情
- 该方法必须在 enableVideo 后调用,设置结果在摄像头成功开启后生效,即 SDK 触发 localVideoStateChangedOfState 回调返回本地视频状态为 AgoraVideoLocalStateCapturing (1) 后。
- 成功调用该方法后,本地会触发 cameraExposureDidChangedToRect 回调。
参数
- positionInView
- 触摸点相对于视图的横坐标和纵坐标。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
setCameraFocusPositionInPreview
设置手动对焦位置,并触发对焦。
- (BOOL)setCameraFocusPositionInPreview:(CGPoint)position;
详情
- 该方法必须在 enableVideo 后调用,设置结果在摄像头成功开启后生效,即 SDK 触发 localVideoStateChangedOfState 回调返回本地视频状态为 AgoraVideoLocalStateCapturing (1) 后。
- 成功调用该方法后,本地会触发 cameraFocusDidChangedToRect 回调。
参数
- position
- 触摸点相对于视图的坐标。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
setCameraTorchOn
设置是否打开闪光灯。
- (BOOL)setCameraTorchOn:(BOOL)isOn NS_SWIFT_NAME(setCameraTorchOn(_:));
详情
- 该方法仅适用于 Android 和 iOS。
- 该方法必须在 enableVideo 后调用,设置结果在摄像头成功开启后生效,即 SDK 触发 localVideoStateChangedOfState 回调返回本地视频状态为 AgoraVideoLocalStateCapturing (1) 后。
参数
- isOn
-
是否打开闪光灯:
YES
: 打开闪光灯。NO
:(默认)关闭闪光灯。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
setCameraZoomFactor
设置摄像头缩放比例。
- (CGFloat)setCameraZoomFactor:(CGFloat)zoomFactor;
详情
- 该方法必须在 enableVideo 后调用,设置结果在摄像头成功开启后生效,即 SDK 触发 localVideoStateChangedOfState 回调返回本地视频状态为 AgoraVideoLocalStateCapturing (1) 后。
参数
- zoomFactor
- 相机缩放比例,有效范围从 1.0 到最大缩放比例。你可以通过 cameraMaxZoomFactor 方法获取设备支持的最大缩放比例。
返回值
- 方法调用成功: 返回设置的 factor 值。
- 方法调用失败: 返回值 < 0。
switchCamera
切换前置/后置摄像头。
- (int)switchCamera;
详情
- 该方法必须在摄像头成功开启后调用,即 SDK 触发 localVideoStateChangedOfState 回调,返回本地视频状态为 AgoraVideoLocalStateCapturing (1) 后。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
cameraExposureDidChangedToRect
摄像头曝光区域已改变回调。
- (void)rtcEngine:(AgoraRtcEngineKit* _Nonnull)engine cameraExposureDidChangedToRect:(CGRect)rect;
该回调是由本地用户调用 setCameraExposurePosition 方法改变曝光位置触发的。
参数
- engine
- AgoraRtcEngineKit 对象。
- rect
- 镜头内表示曝光的区域。详见 CGRect。
cameraFocusDidChangedToRect
相机对焦区域已改变回调。
- (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine cameraFocusDidChangedToRect:(CGRect)rect;
该回调是由本地用户调用 setCameraFocusPositionInPreview 方法改变对焦位置触发的。
参数
- rect
- 镜头内表示对焦的区域。详见 CGRect。
- engine
- AgoraRtcEngineKit 对象。
rtcEngineCameraDidReady
摄像头就绪回调。
- (void)rtcEngineCameraDidReady:(AgoraRtcEngineKit * _Nonnull)engine;
- 弃用:
-
请改用 localVideoStateChangedOfState 中的 AgoraVideoLocalStateCapturing(1)。
该回调提示已成功打开摄像头,可以开始捕获视频。
参数
- engine
- AgoraRtcEngineKit 对象。