如何防止Callkit停止AVAudioPlayer?

5

我有一个使用Twilio的voip视频聊天应用程序,我正在尝试为发出呼叫的用户播放回铃音。但是每当调用didActivate:audioSession时,我的AVAudioPlayer就会停止,导致回铃音只能播放一会儿。在Callkit激活音频会话的同时如何继续播放回铃音?以下是我的代码:

func configure() {
        do {
            try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord, mode: AVAudioSessionModeVideoChat, options: [.mixWithOthers, .allowBluetooth, .defaultToSpeaker])
        } catch {
            print(error.localizedDescription)
        }

        let configuration = CXProviderConfiguration(localizedName: "Thirty")
        configuration.maximumCallGroups = 1
        configuration.maximumCallsPerCallGroup = 1
        configuration.supportsVideo = true
        configuration.supportedHandleTypes = [.generic]
        if let callKitIcon = UIImage(named: "callkitIcon") {
            configuration.iconTemplateImageData = UIImagePNGRepresentation(callKitIcon)
        }    
        callKitProvider = CXProvider(configuration: configuration)
        callKitProvider?.setDelegate(self, queue: nil)

        let path = Bundle.main.path(forResource: "ringbackMorningSong.mp3", ofType:nil)!
        let url = URL(fileURLWithPath: path)
        ringbackAudioPlayer = try? AVAudioPlayer(contentsOf: url)
        ringbackAudioPlayer?.numberOfLoops = -1
        ringbackAudioPlayer?.prepareToPlay()
    }

当用户点击“拨打电话”按钮时,铃声播放器开始播放。
随后执行 CXStartCallAction 操作。然后调用 didActivate:audioSession 方法,在此处停止我的回铃音。

你在哪里调用了ringbackAudioPlayer.play()方法? - aBilal17
当用户点击“拨打电话”按钮时,它会调用不同的视图控制器。 - Alan Scarpa
遇到了与上述问题相同的问题。非常感谢任何帮助。谢谢! - Alvin John
1个回答

1

可能不是最好的解决方案,但我通过在participantDidConnect方法(twilio)中添加CXStartCallAction(call:uuid,handle:callHandle)来解决了这个问题。这样,AVAudioPlayer就不会被CallKit打断,而且在其他用户连接后,您也不需要AVAudioPlayer声音。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接