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

Electron在MacOS Ventura M1设备上调用getUserMedia加载缓慢问题

问题分析与解决方案

问题概述

基于 Electron 15.5.4 开发的相机应用,在 x86 机器以 x64 架构构建后,于搭载 macOS 12.6(Ventura)的 M1 设备上出现异常:相机加载耗时长达8-10秒,甚至触发报错:

NotReadableError: Failed to allocate videosource

已完成排查:

  • M1 本地构建的应用可正常运行,但业务要求必须保留 x86 机器 x64 架构的构建方式
  • x86 机器构建 arm64 架构无法解决该问题
  • 仅保留相机功能的极简测试应用仍出现相同问题

可行解决方案尝试

1. 升级 Electron 版本

Electron 15 属于旧版本,对 macOS Ventura 和 Apple Silicon 芯片的兼容性支持不足。建议升级至 Electron 19+ 版本(官方在 19.x 及后续版本中针对 Apple Silicon 和 Ventura 做了针对性优化),同时同步升级 electron-builder 至兼容版本(如 24.x+)。

新版本的 Chromium 内核优化了媒体设备的资源分配机制,可直接解决 Failed to allocate videosource 这类资源分配失败问题。

2. 优化媒体设备约束配置

当前固定宽高的视频约束可能导致 M1 设备相机需额外时间做分辨率适配,甚至触发资源分配异常。可修改约束为优先匹配设备原生支持的参数,或添加 fallback 逻辑:

const constraints = {
  audio: true,
  video: {
    width: { ideal: 800, max: 800 },
    height: { ideal: 600, max: 600 },
    facingMode: 'user' // 明确指定前置摄像头,减少设备枚举耗时
  }
};

若对分辨率要求不严格,可使用更灵活的配置让系统自动选择最优参数:

const constraints = {
  audio: true,
  video: true
};

3. 调整 BrowserWindow 配置

尝试优化 webPreferences 配置以提升资源分配稳定性,建议逐步迁移至安全配置(开启上下文隔离与沙箱):

mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
        nodeIntegration: false, // 建议关闭,改用 preload 脚本暴露必要 API
        contextIsolation: true,
        sandbox: true,
        preload: path.join(__dirname, 'preload.js')
    },
});

若暂时无法迁移,可尝试显式启用 WebRTC 相关配置:

webPreferences: {
    // 原有配置
    nodeIntegration: true,
    contextIsolation: false,
    enableWebRtc: true
}

4. 优化 Rosetta 2 兼容环境

由于 x64 架构应用在 M1 设备上通过 Rosetta 2 运行,媒体服务可能存在兼容性瓶颈。可通过设置环境变量优化:
在 electron-builder 配置中添加:

"mac": {
  "env": {
    "WEBRTC_STUN_SERVER": "stun:stun.l.google.com:19302" // 显式指定 STUN 服务器,避免设备枚举超时
  }
}

或在应用启动代码中设置:

process.env.WEBRTC_STUN_SERVER = 'stun:stun.l.google.com:19302';

5. 检查系统权限与资源占用

  • 确认应用已获得相机、麦克风权限:前往 macOS 系统设置 -> 隐私与安全性 -> 相机/麦克风,确保对应权限已开启
  • 关闭其他正在使用相机的应用,避免资源抢占导致分配失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:25:34