DeviceStore
简介
DeviceStore 提供了一套全面的 API 来管理音视频设备,包括麦克风、摄像头和屏幕分享等功能。
重要:
请使用 shared 单例获取 DeviceStore 实例。不要尝试直接初始化。
说明:
设备状态更新通过 state 发布者传递。订阅它以接收有关麦克风、摄像头、网络等状态的实时更新。
功能特性
麦克风管理:打开/关闭麦克风,设置采集音量和输出音量。
摄像头管理:打开/关闭摄像头,切换前后摄像头,设置镜像和视频质量。
音频路由:切换扬声器和听筒。
屏幕分享:开启和关闭屏幕分享功能。
网络状态:实时监控网络质量信息。
可订阅数据
DeviceState 的字段描述如下:
属性名 | 类型 | 描述 |
microphoneStatus | 麦克风状态。 | |
microphoneLastError | 麦克风错误,用于出现报错时提取错误信息。 | |
captureVolume | Int | 采集音量,取值范围 [0, 100]。 |
currentMicVolume | Int | 当前用户实际输出音量。 |
outputVolume | Int | 最大输出音量,取值范围 [0, 100]。 |
cameraStatus | 摄像头状态。 | |
cameraLastError | 摄像头错误,用于出现报错时提取错误信息。 | |
isFrontCamera | Bool | 是否为前置摄像头。 |
localMirrorType | 镜像状态。 | |
localVideoQuality | 本地视频质量。 | |
currentAudioRoute | 当前音频路由位置。 | |
screenStatus | 屏幕分享状态。 | |
networkInfo | 网络信息。 |
API 列表
函数名 | 描述 |
单例对象。 | |
打开本地麦克风。 | |
关闭本地麦克风。 | |
设置采集音量。 | |
设置输出音量。 | |
设置音频路由。 | |
开始摄像头测试。 | |
停止摄像头测试。 | |
打开本地摄像头。 | |
关闭本地摄像头。 | |
切换摄像头。 | |
切换镜像状态。 | |
更新视频质量。 | |
开启屏幕分享。 | |
关闭屏幕分享。 | |
重置为默认状态。 |
获取实例
shared
单例对象。
麦克风操作
openLocalMicrophone
打开本地麦克风
public func openLocalMicrophone(completion: CompletionClosure?) {fatalError("\(#function) must be overridden by subclass")}
版本信息
从 3.5 版本开始支持。
参数说明
参数名 | 类型 | 是否必填 | 描述 |
completion | 必填 | 操作是否成功。 |
closeLocalMicrophone
关闭本地麦克风
public func closeLocalMicrophone() {fatalError("\(#function) must be overridden by subclass")}
版本信息
从 3.5 版本开始支持。
setCaptureVolume
设置采集音量
public func setCaptureVolume(volume: Int) {fatalError("\(#function) must be overridden by subclass")}
版本信息
从 3.5 版本开始支持。
参数说明
参数名 | 类型 | 是否必填 | 描述 |
volume | Int | 必填 | 采集音量,取值范围 [0, 100]。 |
setOutputVolume
设置最大输出音量
public func setOutputVolume(_ volume: Int) {fatalError("\(#function) must be overridden by subclass")}
版本信息
从 3.5 版本开始支持。
参数说明
参数名 | 类型 | 是否必填 | 描述 |
volume | Int | 必填 | 最大音量,取值范围 [0, 100]。 |
音频路由
setAudioRoute
设置音频路由
public func setAudioRoute(_ route: AudioRoute) {fatalError("\(#function) must be overridden by subclass")}
版本信息
从 3.5 版本开始支持。
参数说明
参数名 | 类型 | 是否必填 | 描述 |
route | 必填 | 路由位置。 |
摄像头操作
startCameraTest
开始摄像头测试,如果摄像头打开成功,会将画面渲染到设置的 CameraView 上
public func startCameraTest(cameraView: UIView,completion: CompletionClosure?) {fatalError("\(#function) must be overridden by subclass")}
版本信息
从 3.5 版本开始支持。
参数说明
参数名 | 类型 | 是否必填 | 描述 |
cameraView | UIView | 必填 | 摄像头采集画面的渲染视图。 |
completion | 必填 | 操作是否成功。 |
stopCameraTest
停止摄像头测试
public func stopCameraTest() {fatalError("\(#function) must be overridden by subclass")}
版本信息
从 3.5 版本开始支持。
openLocalCamera
打开本地摄像头
public func openLocalCamera(isFront: Bool,completion: CompletionClosure?) {fatalError("\(#function) must be overridden by subclass")}
版本信息
从 3.5 版本开始支持。
参数说明
参数名 | 类型 | 是否必填 | 描述 |
isFront | Bool | 必填 | 是否前置摄像头。 |
completion | 必填 | 操作是否成功。 |
closeLocalCamera
关闭本地摄像头
public func closeLocalCamera() {fatalError("\(#function) must be overridden by subclass")}
版本信息
从 3.5 版本开始支持。
switchCamera
切换摄像头
public func switchCamera(isFront: Bool) {fatalError("\(#function) must be overridden by subclass")}
版本信息
从 3.5 版本开始支持。
参数说明
参数名 | 类型 | 是否必填 | 描述 |
isFront | Bool | 必填 | 是否前置摄像头。 |
switchMirror
切换镜像状态
public func switchMirror(mirrorType: MirrorType) {fatalError("\(#function) must be overridden by subclass")}
版本信息
从 3.5 版本开始支持。
参数说明
参数名 | 类型 | 是否必填 | 描述 |
mirrorType | 必填 | 镜像状态。 |
updateVideoQuality
更新视频质量
public func updateVideoQuality(_ quality: VideoQuality) {fatalError("\(#function) must be overridden by subclass")}
版本信息
从 3.5 版本开始支持。
参数说明
参数名 | 类型 | 是否必填 | 描述 |
quality | 必填 | 视频质量。 |
屏幕分享
startScreenShare
开启屏幕分享
public func startScreenShare(appGroup: String) {fatalError("\(#function) must be overridden by subclass")}
版本信息
从 3.5 版本开始支持。
参数说明
参数名 | 类型 | 是否必填 | 描述 |
appGroup | String | 必填 | App Group ID。 |
stopScreenShare
关闭屏幕采集
public func stopScreenShare() {fatalError("\(#function) must be overridden by subclass")}
版本信息
从 3.5 版本开始支持。
重置
reset
重置为默认状态
public func reset() {fatalError("\(#function) must be overridden by subclass")}
版本信息
从 3.5 版本开始支持。
数据结构
DeviceType
设备类型。
枚举值 | 值 | 说明 |
microphone | 0 | 麦克风类型。 |
camera | 1 | 摄像头类型。 |
screenShare | 2 | 屏幕分享类型。 |
DeviceError
设备相关错误码。
枚举值 | 值 | 说明 |
noError | 0 | 操作成功。 |
noDeviceDetected | 1 | 未检测到设备。 |
noSystemPermission | 2 | 没有系统权限。 |
notSupportCapture | 3 | 不支持采集。 |
occupiedError | 4 | 设备已占用。 |
unknownError | 5 | 未知错误。 |
DeviceStatus
设备开启状态。
枚举值 | 值 | 说明 |
off | 0 | 关闭。 |
on | 1 | 开启。 |
AudioRoute
音频路由。
枚举值 | 值 | 说明 |
speakerphone | 0 | 扬声器,使用扬声器播放(即"免提"),扬声器位于手机底部,声音偏大,适合外放音乐。 |
earpiece | 1 | 听筒,使用听筒播放,听筒位于手机顶部,声音偏小,适合需要保护隐私的通话场景。 |
VideoQuality
视频质量。
枚举值 | 值 | 说明 |
quality360P | 1 | 360P。 |
quality540P | 2 | 540P。 |
quality720P | 3 | 720P。 |
quality1080P | 4 | 1080P。 |
NetworkQuality
网络质量。
枚举值 | 值 | 说明 |
unknown | 0 | 未知网络。 |
excellent | 1 | 极佳。 |
good | 2 | 良好。 |
poor | 3 | 较差。 |
bad | 4 | 差。 |
veryBad | 5 | 极差。 |
down | 6 | 中断。 |
MirrorType
摄像头镜像状态。
枚举值 | 值 | 说明 |
auto | 0 | 自动,前置摄像头镜像,后置摄像头不镜像。 |
enable | 1 | 前后摄像头均镜像。 |
disable | 2 | 前后摄像头均不镜像。 |
DeviceFocusOwner
设备焦点。
枚举值 | 说明 |
call | 语音通话场景。 |
live | 直播场景。 |
none | 未设置。 |
NetworkInfo
网络信息
属性 | 类型 | 说明 |
userID | String | 用户唯一ID。 |
quality | 网络质量。 | |
upLoss | UInt32 | 上行丢包率,取值范围 [0, 100]。 |
downLoss | UInt32 | 下行丢包率,取值范围 [0, 100]。 |
delay | UInt32 | 延迟(单位:毫秒)。 |
DeviceState
设备状态。
属性 | 类型 | 说明 |
microphoneStatus | 麦克风状态。 | |
microphoneLastError | 麦克风错误,用于出现报错时提取错误信息。 | |
captureVolume | Int | 采集音量,取值范围 [0, 100]。 |
currentMicVolume | Int | 当前用户实际输出音量。 |
outputVolume | Int | 最大输出音量,取值范围 [0, 100]。 |
cameraStatus | 摄像头状态。 | |
cameraLastError | 摄像头错误,用于出现报错时提取错误信息。 | |
isFrontCamera | Bool | 是否为前置摄像头。 |
localMirrorType | 镜像状态。 | |
localVideoQuality | 本地视频质量。 | |
currentAudioRoute | 当前音频路由位置。 | |
screenStatus | 屏幕分享状态。 | |
networkInfo | 网络信息。 |
使用示例
// 获取单例实例let store = DeviceStore.shared// 订阅状态变化store.state.subscribe { state inprint("麦克风状态: \(state.microphoneStatus)")print("摄像头状态: \(state.cameraStatus)")print("网络质量: \(state.networkInfo.quality)")}// 打开麦克风store.openLocalMicrophone { code, message inif code == 0 {print("麦克风打开成功")}}// 打开前置摄像头store.openLocalCamera(isFront: true) { code, message inif code == 0 {print("摄像头打开成功")}}