Ios Callkit扬声器故障/WhatsApp如何修复?
我有一个具有Ios Callkit扬声器故障/WhatsApp如何修复?,ios,swift,xcode,whatsapp,callkit,Ios,Swift,Xcode,Whatsapp,Callkit,我有一个具有Callkit功能的应用程序。当我按下扬声器按钮时,它将闪烁并设置为关闭状态(有时扬声器设置为“大声”,但图标仍处于关闭状态)。当我多次点击它时。。。可以清楚地看到,此功能运行不正常 然而,WhatsApp在开始时关闭了扬声器,3秒多后,扬声器启动并工作。有没有人遇到过类似的情况,可以给我一个解决方案 参考自 在以前的版本中也遇到过同样的问题。因此,这不是呼叫套件上出现的新问题。 这个问题必须通过iOS解决。我们无法控制这一切 请浏览苹果开发者论坛 及 苹果工程师提出了一种解决方案
Callkit
功能的应用程序。当我按下扬声器按钮时,它将闪烁并设置为关闭状态(有时扬声器设置为“大声”,但图标仍处于关闭状态)。当我多次点击它时。。。可以清楚地看到,此功能运行不正常
然而,WhatsApp在开始时关闭了扬声器,3秒多后,扬声器启动并工作。有没有人遇到过类似的情况,可以给我一个解决方案
参考自
在以前的版本中也遇到过同样的问题。因此,这不是呼叫套件上出现的新问题。
这个问题必须通过iOS解决。我们无法控制这一切
请浏览苹果开发者论坛
及
苹果工程师提出了一种解决方案,可以修复callkit无法正确激活音频会话的问题: 解决方法是在应用程序生命周期的早期,调用
-provider:performAnswerCallAction:
方法之前,配置应用程序的音频会话(调用configureAudioSession()
)。例如,您可以在调用-[CXProvider reportNewIncomingCallWithUUID:update:completion://之前立即调用configureAudioSession()
,以确保在通知CallKit有关传入呼叫之前,音频会话已完全配置
发件人:
如果这没有帮助,您可能应该发布一个复制您行为的示例项目,以便我们能够对其进行进一步分析。也许您可以将mode设置为AVAudioSessionModeDefault
当我使用CallKit+WebRTC时
我将AvaudioSessionMode配置为默认模式
Alloc CXProvider和reportNewIncomingCallWithUUID
使用WebRTC,ICE连接后,WebRTC将模式更改为AVAudioSessionModeVoiceChat,然后发生扬声器问题
后来我将模式设置回AVAudioSessionModeDefault,扬声器工作正常
以上答案是正确的,“语音聊天”模式会毁掉一切
Swift 4WebRTC示例。
建立连接后,调用next
let rtcAudioSession = RTCAudioSession.sharedInstance()
rtcAudioSession.lockForConfiguration()
do {
try rtcAudioSession.setCategory(AVAudioSession.Category.playAndRecord.rawValue, with:
AVAudioSession.CategoryOptions.mixWithOthers)
try rtcAudioSession.setMode(AVAudioSession.Mode.default.rawValue)
try rtcAudioSession.overrideOutputAudioPort(.none)
try rtcAudioSession.setActive(true)
} catch let error {
debugPrint("Couldn't force audio to speaker: \(error)")
}
rtcAudioSession.unlockForConfiguration()
您也可以使用AVAudioSession.sharedInstance()代替RTC我已通过执行以下步骤解决了此问题
- 在CXAnswerCallAction中,使用以下代码设置audiosession配置
RTCDispatcher.dispatchAsync(on: RTCDispatcherQueueType.typeAudioSession) {
let audioSession = RTCAudioSession.sharedInstance()
audioSession.lockForConfiguration()
let configuration = RTCAudioSessionConfiguration.webRTC()
configuration.categoryOptions = [AVAudioSessionCategoryOptions.allowBluetoothA2DP,AVAudioSessionCategoryOptions.duckOthers,
AVAudioSessionCategoryOptions.allowBluetooth]
try? audioSession.setConfiguration(configuration)
audioSession.unlockForConfiguration()}
- 连接呼叫后,我将AudioSession类别重置为默认
func configureAudioSession() {
let session = RTCAudioSession.sharedInstance()
session.lockForConfiguration()
do {
try session.setCategory(AVAudioSession.Category.playAndRecord.rawValue, with: .allowBluetooth)
try session.setMode(AVAudioSession.Mode.default.rawValue)
try session.setPreferredSampleRate(44100.0)
try session.setPreferredIOBufferDuration(0.005)
}
catch let error {
debugPrint("Error changeing AVAudioSession category: \(error)")
}
session.unlockForConfiguration()}
谢谢你的帮助。没有。我并没有像你说的那样冻结展示。它可以工作,但我需要双击扬声器按钮来激活它和它本身的停用。我认为这不是CallKit功能的问题。您可以重新启动iPhone,然后再试一次。有时候iPhone不能正常响应,所以你可以重新启动然后试试。斯瓦蒂:我有iPhone 5、6、6s和iPhone X。在所有这些设备上,您必须按两下才能看到有源扬声器及其行为不正确。所有其他按钮工作正常,但扬声器不正常。是的。。。几乎有同样的问题,同样的问题,但我看不到任何解决方案。伙计们。。。。谢谢大家的回复。。。但是你的链接都是一文不值的…那里没有好的信息。你能在GitHub中提供示例项目吗?@Pan你解决问题了吗?没有。还有这个问题。。。我悬赏了总共800点声誉积分,但没有给出满意的答案me@PanMluv你找到解决办法了吗?我也面临同样的问题。@GabrielGava不。。。没有找到任何解决方案我在执行此操作时遇到另一个问题。当连接呼叫后将voiceChat模式更改为默认模式时,我的音频会话端口覆盖也会更改。例如,我用扩音器打电话,当电话接通后,扩音器会换成麦克风。有什么建议吗?嗨,把代码配置音频会话放在哪里?您的意思是rtc已连接或呼叫已连接?