-
Notifications
You must be signed in to change notification settings - Fork 167
Description
iOS all version
livekitclient 2.7.x - 2.11.x
func connect(token: String, enableCamera:Bool, enableMic: Bool) {
// 连接配置
var connectOptions: ConnectOptions
switch XMAppEnvironmentManager.shared.currentType {
case .test, .test2, .dev:
connectOptions = ConnectOptions(
autoSubscribe: true, // 自动订阅其他参与者的音视频
reconnectAttempts: 2, // 重连尝试次数(默认10次)
reconnectAttemptDelay: 1, // 初始重连延迟(秒)
reconnectMaxDelay: 10, // 最大重连延迟(秒)
socketConnectTimeoutInterval: 10, // WebSocket连接超时(秒)
primaryTransportConnectTimeout: 30, // 主传输连接超时(秒)
publisherTransportConnectTimeout: 5, // 发布传输连接超时(秒)
iceTransportPolicy: .all
)
default:
connectOptions = ConnectOptions(
autoSubscribe: true, // 自动订阅其他参与者的音视频
reconnectAttempts: 2, // 重连尝试次数(默认10次)
reconnectAttemptDelay: 1, // 初始重连延迟(秒)
reconnectMaxDelay: 10, // 最大重连延迟(秒)
socketConnectTimeoutInterval: 10, // WebSocket连接超时(秒)
primaryTransportConnectTimeout: 30, // 主传输连接超时(秒)
publisherTransportConnectTimeout: 5, // 发布传输连接超时(秒)
iceTransportPolicy: .relay
)
}
// 房间配置
let roomOptions = RoomOptions(
// 摄像头采集配置
defaultCameraCaptureOptions: CameraCaptureOptions(
position: .front,
dimensions: .h720_169,
fps: 24
),
// 共享屏幕配置
defaultScreenShareCaptureOptions: ScreenShareCaptureOptions(
dimensions: .h720_169,
fps: 30,
appAudio: true
),
// 音频采集配置,算法复杂,消耗CPU
defaultAudioCaptureOptions: AudioCaptureOptions(
// 回声消除
echoCancellation: true,
// 自动增益控制
autoGainControl: false,
// 降噪
noiseSuppression: true,
// 打字噪音检测
typingNoiseDetection: false
),
// 视频发布配置
defaultVideoPublishOptions: VideoPublishOptions(
// 首选编码参数
encoding: VideoEncoding(
// 比特率
maxBitrate: 1_500_000,
// 刷新率
maxFps: 24
),
// 用于屏幕共享的编码参数
screenShareEncoding: VideoEncoding(
maxBitrate: 1_200_000,
maxFps: 30
),
// True可以同时播放,发布三个不同大小的音轨
simulcast: true,
simulcastLayers: [
.presetH720_169,
.presetH360_169,
],
// 编解码格式 h264、vp8、vp9、av1
// 这里选择.h264,普适性最好,支持硬件加速
preferredCodec: .h264,
preferredBackupCodec: .h264
),
// 音频发布配置 - 静音检测优化
defaultAudioPublishOptions: AudioPublishOptions(
dtx: true // 节省宽带
),
// 启用自适应流,自动调整分辨率
adaptiveStream: true,
// 动态流控制
dynacast: true,
// 释放资源
stopLocalTrackOnUnpublish: true,
// 后台暂停视频
suspendLocalVideoTracksInBackground: true
)
Task {
do {
var url = XMAppEnvironmentManager.shared.currentConfiguration?.liveKitRoomHost ?? ""
if let meetingLivekitDomain = YTMeetingNetAPI.shared.meetingLivekitDomain {
url = meetingLivekitDomain
}
try await meetingRoom.connect(url: url, token: token, connectOptions: connectOptions, roomOptions: roomOptions)
await setCamera(isOn: enableCamera)
await setMicrophone(isOn: enableMic)
} catch {
logError("failed to connect with error: \(error)")
}
}