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

iOS设置AVAudioSession为.record报错-50,改用.playAndRecord是否正常?

问题:AVAudioSession设置.record类别报错,改用.playAndRecord正常是否正常?

相关代码

do {
        // Activate the session.
        audioSession = AVAudioSession.sharedInstance()
        guard let audioSession = audioSession else { return }
        try audioSession.setActive(false)
        try audioSession.setCategory(.playAndRecord, mode: .spokenAudio)    //forced
        try audioSession.setActive(true, options: .notifyOthersOnDeactivation)

        // Start the processing pipeline.
        try audioEngine.start()
        Task { @MainActor in
            isRecording.wrappedValue = true
        }
    } catch {
        handleError(withMessage: error.localizedDescription)
    }

报错信息

AVAudioSession_iOS.mm:2382 Failed to set category, error: -50

解答

错误码-50对应无效参数或配置冲突,你遇到的这个现象是正常的,核心原因和AVAudioEngine的工作机制、iOS音频会话规则有关:

  • AVAudioEngine的底层需求:
    哪怕你只做录制,AVAudioEngine作为音频处理管线,启动时需要同时访问音频输入和输出的底层资源——.record类别仅允许输入,会限制输出相关资源的访问,和AVAudioEngine的运行条件冲突,导致设置失败。

  • 设备/系统兼容性:
    部分iOS设备(比如蓝牙音频设备)的硬件要求音频会话同时支持输入输出才能启动录制;或者当前系统有其他音频会话占用资源,.record的排他性更强,容易触发冲突,而.playAndRecord的兼容性更广泛。

你改用.playAndRecord是完全合理的方案,甚至在使用AVAudioEngine做录制时,这是更稳妥的选择。如果想优化,可以根据需求给.playAndRecord添加options参数(比如.duckOthers让其他音频降音,.mixWithOthers允许混音),同时确保已经正确获取麦克风权限,避免权限层面的潜在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 16:27:15