视频设备管理
介绍跟视频设备管理相关的方法和回调。
enumerateVideoDevices
获取系统中所有的视频设备列表。
List<VideoDeviceInfo> enumerateVideoDevices();
详情
返回值
- 方法调用成功:返回一个 VideoDeviceInfo 数组,其中包含系统中所有视频设备。
- 方法调用失败: 返回空列表。
getCameraMaxZoomFactor
获取摄像头支持最大缩放比例。
Future<double> getCameraMaxZoomFactor();
详情
- 该方法仅适用于 Android 和 iOS。
- 该方法必须在摄像头成功开启后调用,即 SDK 触发 onLocalVideoStateChanged 回调,返回本地视频状态为 localVideoStreamStateCapturing (1) 后。
返回值
设备摄像头支持的最大缩放比例。
getCapability
获取视频采集设备在指定的视频格式下的详细视频帧信息。
Future<VideoFormat> getCapability( {required String deviceIdUTF8, required int deviceCapabilityNumber});
详情
在调用 numberOfCapabilities 获取视频采集设备支持的视频格式数量后,你可以调用该方法获取指定索引号支持的具体视频帧信息。
参数
- deviceIdUTF8
- 视频采集设备的 ID。
- deviceCapabilityNumber
- 视频格式的索引号。如果 numberOfCapabilities 的返回值为 i,则该参数取值范围为[0,i)。
返回值
指定视频格式的具体信息,包括宽度(px),高度(px)和帧率(fps)。详见 VideoFormat。
getDevice
获取当前使用的视频采集设备。
Future<String> getDevice();
详情
返回值
视频采集设备。
getVideoDeviceManager
获取 VideoDeviceManager 对象,以管理视频设备。
VideoDeviceManager getVideoDeviceManager();
返回值
一个 VideoDeviceManager 对象。
isCameraAutoExposureFaceModeSupported
检测设备是否支持自动曝光功能。
Future<bool> isCameraAutoExposureFaceModeSupported();
详情
- 该方法仅适用于 iOS。
- 该方法必须在摄像头成功开启后调用,即 SDK 触发 onLocalVideoStateChanged 回调,返回本地视频状态为 localVideoStreamStateCapturing (1) 后。
返回值
true
: 设备支持自动曝光功能。false
: 设备不支持自动曝光功能。
isCameraAutoFocusFaceModeSupported
检测设备是否支持人脸对焦功能。
Future<bool> isCameraAutoFocusFaceModeSupported();
详情
- 该方法仅适用于 Android 和 iOS。
- 该方法必须在摄像头成功开启后调用,即 SDK 触发 onLocalVideoStateChanged 回调,返回本地视频状态为 localVideoStreamStateCapturing (1) 后。
返回值
true
: 设备支持人脸对焦功能。false
: 设备不支持人脸对焦功能。
isCameraExposurePositionSupported
检测设备是否支持手动曝光功能。
Future<bool> isCameraExposurePositionSupported();
详情
- 该方法仅适用于 Android 和 iOS。
- 该方法必须在摄像头成功开启后调用,即 SDK 触发 onLocalVideoStateChanged 回调,返回本地视频状态为 localVideoStreamStateCapturing (1) 后。
返回值
true
: 设备支持手动曝光功能。false
: 设备不支持手动曝光功能。
isCameraExposureSupported
查询当前摄像头是否支持曝光调节。
Future<bool> isCameraExposureSupported();
详情
- 该方法仅适用于 Android 和 iOS。
- 该方法必须在摄像头成功开启后调用,即 SDK 触发 onLocalVideoStateChanged 回调,返回本地视频状态为 localVideoStreamStateCapturing (1) 后。
- 建议你在调用 setCameraExposureFactor 调节曝光系数前,先调用该方法查询当前摄像头是否支持曝光调节。
- 当你调用该方法时,查询的是当前正在使用的摄像头是否支持曝光调节,即调用 setCameraCapturerConfiguration 时指定的摄像头。
返回值
true
:方法调用成功。false
:方法调用失败。
isCameraFaceDetectSupported
检查设备摄像头是否支持人脸检测。
Future<bool> isCameraFaceDetectSupported();
- 该方法仅适用于 Android 和 iOS。
- 该方法必须在摄像头成功开启后调用,即 SDK 触发 onLocalVideoStateChanged 回调,返回本地视频状态为 localVideoStreamStateCapturing (1) 后。
返回值
true
: 设备摄像头支持人脸检测。false
: 设备摄像头不支持人脸检测。
isCameraFocusSupported
检测设备是否支持手动对焦功能。
Future<bool> isCameraFocusSupported();
详情
- 该方法仅适用于 Android 和 iOS。
- 该方法必须在摄像头成功开启后调用,即 SDK 触发 onLocalVideoStateChanged 回调,返回本地视频状态为 localVideoStreamStateCapturing (1) 后。
返回值
true
: 设备支持手动对焦功能。false
: 设备不支持手动对焦功能。
isCameraTorchSupported
检测设备是否支持闪光灯常开。
Future<bool> isCameraTorchSupported();
详情
- 该方法仅适用于 Android 和 iOS。
- 该方法必须在摄像头成功开启后调用,即 SDK 触发 onLocalVideoStateChanged 回调,返回本地视频状态为 localVideoStreamStateCapturing (1) 后。
- 一般情况下,app 默认开启前置摄像头,因此如果你的前置摄像头不支持闪光灯常开,直接使用该方法会返回 false。如果需要检查后置摄像头是否支持闪光灯常开,需要先使用 switchCamera 切换摄像头,再使用该方法。
- 在系统版本 15 的 iPad 上,即使 isCameraTorchSupported 返回
true
,也可能因系统问题导致你无法通过 setCameraTorchOn 成功开启闪光灯。
返回值
true
: 设备支持闪光灯常开。false
: 设备不支持闪光灯常开。
isCameraZoomSupported
检测设备是否支持摄像头缩放功能。
Future<bool> isCameraZoomSupported();
详情
- 该方法仅适用于 Android 和 iOS。
- 该方法必须在摄像头成功开启后调用,即 SDK 触发 onLocalVideoStateChanged 回调,返回本地视频状态为 localVideoStreamStateCapturing (1) 后。
返回值
true
: 设备支持相机缩放功能。false
: 设备不支持相机缩放功能。
numberOfCapabilities
获取指定视频采集设备支持的视频格式数量。
Future<void> numberOfCapabilities(String deviceIdUTF8);
详情
视频采集设备可能支持多种视频格式,每一种格式都支持不同的视频帧宽度、视频帧高度、帧率组合。
你可以通过调用该方法,获取指定的视频采集设备可支持多少种视频格式,然后调用 getCapability 获取指定视频格式下的具体视频帧信息。
参数
- deviceIdUTF8
- 视频采集设备的 ID。
异常
方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。
- ≤ 0: 方法调用失败。
release
setCameraAutoExposureFaceModeEnabled
设置是否开启自动曝光功能。
Future<void> setCameraAutoExposureFaceModeEnabled(bool enabled);
详情
- 该方法仅适用于 iOS。
- 该方法必须在 enableVideo 后调用,设置结果在摄像头成功开启后生效,即 SDK 触发 onLocalVideoStateChanged 回调返回本地视频状态为 localVideoStreamStateCapturing (1) 后。
参数
- enabled
-
是否开启自动曝光:
true
: 开启自动曝光。false
: 关闭自动曝光。
异常
方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。
- < 0: 方法调用失败。
setCameraAutoFocusFaceModeEnabled
设置是否开启人脸对焦功能。
Future<void> setCameraAutoFocusFaceModeEnabled(bool enabled);
详情
SDK 默认在 Android 平台关闭人脸自动对焦,在 iOS 平台开启人脸自动对焦。如需自行设置人脸自动对焦,请调用该方法。
- 该方法仅适用于 Android 和 iOS。
- 该方法必须在 enableVideo 后调用,设置结果在摄像头成功开启后生效,即 SDK 触发 onLocalVideoStateChanged 回调返回本地视频状态为 localVideoStreamStateCapturing (1) 后。
参数
- enabled
-
是否开启人脸对焦:
true
: 开启人脸对焦功能。false
: 关闭人脸对焦功能。
异常
方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。
- < 0: 方法调用失败。
setCameraCapturerConfiguration
设置摄像头采集配置。
Future<void> setCameraCapturerConfiguration( CameraCapturerConfiguration config);
详情
- 该方法仅适用于 Android 和 iOS。
- 该方法必须在开启摄像头后调用,如 startPreview 和 enableVideo 后调用。
参数
- config
- 摄像头采集配置,详见 CameraCapturerConfiguration。
异常
方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。
- < 0: 方法调用失败。
setCameraDeviceOrientation
设置采集视频的旋转角度。
Future<void> setCameraDeviceOrientation( {required VideoSourceType type, required VideoOrientation orientation});
详情
- 该方法仅适用于 Windows。
- 该方法必须在 enableVideo 后调用,设置结果在摄像头成功开启后生效,即 SDK 触发 onLocalVideoStateChanged 回调返回本地视频状态为 localVideoStreamStateCapturing (1) 后。
- 当视频采集设备不带重力感应功能时,你可以调用该方法手动调整采集到的视频画面的旋转角度。
参数
- type
- 视频源类型,详见 VideoSourceType。
- orientation
- 顺时针旋转角度,详见 VideoOrientation。
异常
方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。
- < 0: 方法调用失败
setCameraExposureFactor
设置当前摄像头的曝光系数。
Future<void> setCameraExposureFactor(double factor);
详情
当拍摄环境光线不足或过于明亮时,会影响视频采集的画质。为了获得更好的视频效果,你可以使用该方法调节摄像头的曝光系数。
- 该方法仅适用于 Android 和 iOS。
- 该方法必须在 enableVideo 后调用,设置结果在摄像头成功开启后生效,即 SDK 触发 onLocalVideoStateChanged 回调返回本地视频状态为 localVideoStreamStateCapturing (1) 后。
- 建议你在调用该方法前,先调用 isCameraExposureSupported 查询当前摄像头是否支持调节曝光系数。
- 当你调用该方法时,设置的是当前正在使用的摄像头的曝光系数,即调用 setCameraCapturerConfiguration 时指定的摄像头。
参数
- factor
-
摄像头的曝光系数。默认值为 0,表示使用摄像头的默认曝光量。取值越大,曝光量越大。视频图像过曝时,你可以降低曝光系数;视频图像欠曝且暗部细节丢失时,你可以增加曝光系数。如果你指定的曝光系数超出设备支持的范围,SDK 会自动调节为设备实际支持的范围。
在 Android 平台上,取值范围为 [-20.0,20.0];在 iOS 平台上,取值范围为 [-8.0,8.0]。
异常
方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。
- < 0: 方法调用失败
setCameraExposurePosition
设置手动曝光位置。
Future<void> setCameraExposurePosition( {required double positionXinView, required double positionYinView});
详情
- 该方法仅适用于 Android 和 iOS。
- 该方法必须在 enableVideo 后调用,设置结果在摄像头成功开启后生效,即 SDK 触发 onLocalVideoStateChanged 回调返回本地视频状态为 localVideoStreamStateCapturing (1) 后。
- 成功调用该方法后,本地会触发 onCameraExposureAreaChanged 回调。
参数
- positionXinView
- 触摸点相对于视图的横坐标。
- positionYinView
- 触摸点相对于视图的纵坐标。
异常
方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。
- < 0: 方法调用失败。
setCameraFocusPositionInPreview
设置手动对焦位置,并触发对焦。
Future<void> setCameraFocusPositionInPreview( {required double positionX, required double positionY});
详情
- 该方法仅适用于 Android 和 iOS。
- 该方法必须在 enableVideo 后调用,设置结果在摄像头成功开启后生效,即 SDK 触发 onLocalVideoStateChanged 回调返回本地视频状态为 localVideoStreamStateCapturing (1) 后。
- 成功调用该方法后,本地会触发 onCameraFocusAreaChanged 回调。
参数
- positionX
- 触摸点相对于视图的横坐标。
- positionY
- 触摸点相对于视图的纵坐标。
异常
方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。
- < 0: 方法调用失败。
setCameraTorchOn
设置是否打开闪光灯。
Future<void> setCameraTorchOn(bool isOn);
详情
- 该方法仅适用于 Android 和 iOS。
- 该方法必须在 enableVideo 后调用,设置结果在摄像头成功开启后生效,即 SDK 触发 onLocalVideoStateChanged 回调返回本地视频状态为 localVideoStreamStateCapturing (1) 后。
参数
- isOn
-
是否打开闪光灯:
true
: 打开闪光灯。false
:(默认)关闭闪光灯。
异常
方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。
- < 0: 方法调用失败。
setCameraZoomFactor
设置摄像头缩放比例。
Future<void> setCameraZoomFactor(double factor);
详情
- 该方法仅适用于 Android 和 iOS。
- 该方法必须在 enableVideo 后调用,设置结果在摄像头成功开启后生效,即 SDK 触发 onLocalVideoStateChanged 回调返回本地视频状态为 localVideoStreamStateCapturing (1) 后。
参数
- factor
- 相机缩放比例,有效范围从 1.0 到最大缩放比例。你可以通过 getCameraMaxZoomFactor 方法获取设备支持的最大缩放比例。
异常
方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。
- 方法调用失败: 返回值 < 0。
setDevice
通过设备 ID 指定视频采集设备。
Future<void> setDevice(String deviceIdUTF8);
详情
- 插拔设备不会改变设备 ID。
- 该方法仅适用于 Windows 和 macOS。
参数
- deviceIdUTF8
-
设备 ID。可通过调用 enumerateVideoDevices 方法获取。
最大长度为 MaxDeviceIdLengthType。
异常
方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。
- < 0: 方法调用失败。
switchCamera
切换前置/后置摄像头。
Future<void> switchCamera();
详情
- 该方法仅适用于 Android 和 iOS。
- 该方法必须在摄像头成功开启后调用,即 SDK 触发 onLocalVideoStateChanged 回调,返回本地视频状态为 localVideoStreamStateCapturing (1) 后。
异常
方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。
- < 0: 方法调用失败。
onCameraExposureAreaChanged
摄像头曝光区域已改变回调。
final void Function(int x, int y, int width, int height)? onCameraExposureAreaChanged;
该回调是由本地用户调用 setCameraExposurePosition 方法改变曝光位置触发的。
参数
onCameraFocusAreaChanged
相机对焦区域已改变回调。
final void Function(int x, int y, int width, int height)? onCameraFocusAreaChanged;
该回调是由本地用户调用 setCameraFocusPositionInPreview 方法改变对焦位置触发的。
参数
- x
- 发生改变的对焦区域的 x 坐标。
- y
- 发生改变的对焦区域的 y 坐标。
- width
- 发生改变的对焦区域的宽度。
- height
- 发生改变的对焦区域的高度。
onCameraReady
摄像头就绪回调。
final void Function()? onCameraReady;
- 弃用:
-
请改用 onLocalVideoStateChanged 中的 localVideoStreamStateCapturing(1)。
该回调提示已成功打开摄像头,可以开始捕获视频。