Skip to content

The stream of the shared screen frequently lags on the receiver's end, especially when the sender rotates the device to landscape orientation. #914

@indenpendman

Description

@indenpendman

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)")
        }
    }

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions