didActivateAudioSession很少被调用

时间:2017-03-06 06:58:06

标签: objective-c voip avaudiosession callkit

我正在开发一个支持CallKit的VOIP应用程序,有时我们的客户遇到的问题是iOS系统从不调用 didActivateAudioSession 回调。

是否有一个已知的错误,或者你认为我们有什么遗漏,比如设置AVAudioSession的正确模式或类似的东西?

这是我在报告CallKit对系统的调用之前准备AVAudioSession的方法;

        AVAudioSession *audioSession = [AVAudioSession sharedInstance];
        [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionAllowBluetooth error:nil];
        [audioSession setActive:YES error:nil];

2 个答案:

答案 0 :(得分:3)

我们可以在

中配置音频会话
- (void)provider:(CXProvider *)provider performStartCallAction:(nonnull CXStartCallAction *)action

- (void)provider:(CXProvider *)provider performAnswerCallAction:(nonnull CXAnswerCallAction *)action

来自speakerbox app的评论,

/*  We must not start call audio here, and can only do so
 *  once the audio session has been activated by the system
 *  after having its priority elevated. So, make sure that the sound
 *  device is closed at this point.
 */

答案 1 :(得分:1)

我的问题是没有激活音频会话(我有与前一个呼叫的音频会话停用相关的特殊检查),因为我无法停用某些呼叫的音频会话。

当对方拒绝我的电话时,我播放一个忙音,声音后我尝试用 audioPlayerDidFinishPlaying 回叫停用音频会话。

问题是我将 AVAudioPlayer 委托设置在错误的位置,我必须在播放忙音之前设置它,而不是在初始化之后。
感谢https://stackoverflow.com/a/5697900/1351327中的帖子解决了我的问题。 这是我的问题的答案,但有价值的帖子是RJV Kumar的。