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

WebRTC M90安卓客户端后台建立音频连接报错createRecord返回-1问询

问题根因

你遇到的Cannot create AudioRecord报错对应Android系统AudioRecord初始化错误码ERROR_NO_INIT,核心原因有三点:

  • Android 10(API 29)及以上版本的后台麦克风权限限制:系统默认禁止后台应用访问麦克风,仅当应用处于前台、或前台服务已声明麦克风相关类型时,才允许创建AudioRecord实例。你仅接入了普通前台服务,未配置音频采集相关的服务属性,因此后台初始化被系统拦截。
  • WebRTC M90版本音频采集模块缺陷:该版本的WebRtcAudioRecordExternal模块没有实现失败重试逻辑,后台初始化AudioRecord失败后,即使应用回到前台,模块也不会自动重新初始化采集实例,导致音频一直无法恢复。
  • 音频初始化时机不合理:加入空房间时你没有提前初始化音频采集模块,等其他用户进入房间触发初始化时,应用已经退到后台,直接触发系统权限拦截。
解决方案
    1. 调整前台服务配置,适配后台音频权限
      在AndroidManifest.xml中给前台服务添加属性:
    <service
        android:name=".YourForegroundService"
        android:foregroundServiceType="microphone|mediaProjection"
        android:exported="false" />
    
    同时针对不同系统版本补全权限:
    • Android 12及以上添加权限:<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MICROPHONE" />
    • 启动前台服务时,Android 10+需要明确指定服务类型,确保系统授予后台麦克风访问权限。
    1. 补全音频采集失败重试逻辑
      捕获到WebRtcAudioRecordExternal: Init recording error报错后,做以下处理:
    • 监听应用前后台状态变更,当应用回到前台时,主动销毁原有失效的音频采集实例,重新创建AudioRecord完成初始化。
    • 如果不想修改WebRTC源码,可在音频轨创建失败回调触发时,先调用removeTrack移除原有失效音频轨,再重新创建音频源、音频轨并添加到PeerConnection中,触发完整的采集重建流程。
    1. 优化音频初始化时机
      加入房间成功后立即初始化音频采集模块、创建本地音频轨,此时应用处于前台不会被权限拦截,后续退到后台有其他用户加入房间时,直接复用已初始化的音频轨即可,无需后台触发采集初始化。
    1. 临时降级方案
      如果赶版本迭代,可以在应用退到后台时暂停本地音频采集(不释放实例),回到前台后再恢复采集,该方案可规避后台初始化采集的逻辑,缺点是后台时远端用户无法听到本地声音,回到前台自动恢复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 11:00:02