You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止WebRTC通话时自动降低本地摄像头预览分辨率

WebRTC阻止本地摄像头预览分辨率下降解决方案

已验证Android端方案

你当前使用的关闭CPU过载检测配置已可正常生效,代码如下:

val config = PeerConnection.RTCConfiguration(servers)
config.enableCpuOveruseDetection = false

iOS端解决方案

iOS端未将CPU过载检测开关暴露为RTCConfiguration的直接属性,可通过以下三种方式实现相同效果:

方案1:通过媒体约束配置关闭自适应调整

创建RTCPeerConnection时传入对应可选约束,即可关闭WebRTC内部的分辨率自适应下调逻辑:

// Objective-C 示例
RTCMediaConstraints *constraints = [[RTCMediaConstraints alloc] 
    initWithMandatoryConstraints:nil 
    optionalConstraints:@{
        @"googCpuOveruseDetection": @"false",
        @"googAutoResize": @"false"
    }];
// 将constraints传入RTCPeerConnection初始化方法
// Swift 示例
let constraints = RTCMediaConstraints(
    mandatoryConstraints: nil,
    optionalConstraints: [
        "googCpuOveruseDetection": "false",
        "googAutoResize": "false"
    ]
)

该方案和Android端的配置效果完全一致,不会再触发通话过程中的预览分辨率下调。

方案2:拆分本地预览流与上行推流(跨端通用)

如果约束配置不生效,可以通过流隔离的方式彻底规避WebRTC自适应逻辑对本地预览的影响:

  • 单独启动一路独立于WebRTC的摄像头采集,固定为你需要的最高分辨率,直接渲染到本地预览控件上,完全不交给WebRTC管理
  • 另外创建一路由WebRTC管理的视频流用于通话上行,允许WebRTC对这路流做分辨率、码率的自适应调整

方案3:修改WebRTC源码(仅自定义编译场景适用)

如果是自行编译WebRTC源码,可直接注释掉RTCVideoSource中下调输出分辨率的相关适配逻辑,从源码层面禁止分辨率调整。


内容的提问来源于stack exchange,提问作者oto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 01:45:08