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 in
print("麦克风状态: \(state.microphoneStatus)")
print("摄像头状态: \(state.cameraStatus)")
print("网络质量: \(state.networkInfo.quality)")
}

// 打开麦克风
store.openLocalMicrophone { code, message in
if code == 0 {
print("麦克风打开成功")
}
}

// 打开前置摄像头
store.openLocalCamera(isFront: true) { code, message in
if code == 0 {
print("摄像头打开成功")
}
}