如何解决将 AVAudioSession 类别从播放更改为 playAndRecord
我有一个基于 WebRTC 的音频流应用,所以房间里有扬声器和听众。那些听众可以被移动为演讲者,或者演讲者可以被移动为听众。
现在,当使用麦克风时,iOS 14 有这个橙色指示器,它对听众和扬声器都启用,但应该只对扬声器启用。
我可以通过设置 AVAudioSession 类别来控制它,如果用户是扬声器,我设置 .playAndRecord,如果用户只是听众,我设置 .playback。
问题是,当听众升级为扬声器时,我需要那个记录类别,所以我尝试将类别从 .playback 更改为 .playAndRecord 并且所有内容都成功更改,但它不起作用。
所以:
如果我以演讲者身份加入直播,.playAndRecord 工作正常。麦克风工作正常,有橙色指示灯。
如果我加入流作为监听器 .playback 工作正常。麦克风不工作,没有橙色指示灯。
如果我作为听众加入流并升级到扬声器麦克风不起作用,并且没有橙色指示器,但它应该起作用。
此外,如果我以演讲者身份加入流并降级为听众,则它不起作用。
我正在使用这种方法进行配置:
func configureAudioSession(clientMode: ClientMode) {
let audioConfiguration = RTCAudioSessionConfiguration()
audioConfiguration.category = clientMode == .listener ?
AVAudioSession.Category.playback.rawValue : AVAudioSession.Category.playAndRecord.rawValue
audioConfiguration.mode = clientMode == .listener ?
AVAudioSession.Mode.moviePlayback.rawValue : AVAudioSession.Mode.voiceChat.rawValue
audioConfiguration.categoryOptions = AVAudioSession.CategoryOptions(rawValue: AVAudioSession.CategoryOptions.mixWithOthers.rawValue)
self.rtcAudioSession.lockForConfiguration()
do {
try self.rtcAudioSession.setConfiguration(audioConfiguration,active: true)
} catch let error {
self.errorHandler.onNext(error)
}
self.rtcAudioSession.unlockForConfiguration()
}
rtcAudioSession 只是:
let rtcAudioSession = RTCAudioSession.sharedInstance()
但它背后是ofc iOS AVAudioSession 对象。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。