livekit / client-sdk-swift

LiveKit Swift Client SDK. Easily build live audio or video experiences on iOS, macOS, tvOS, and visionOS.
https://livekit.io
Apache License 2.0
218 stars 100 forks source link

Answering call with callkit when App is in background and the phone is locked, there is no audio. #181

Open sanketns opened 1 year ago

sanketns commented 1 year ago

when the app is in background and the phone is locked. There is no audio of opponent user. Tried every possible way but no luck. Kindly guide me for the same.

hiroshihorie commented 1 year ago

Hi @sanketns I would be happy to investigate, if you could prepare a minimal reproducible example simulating your issue.

sanketns commented 1 year ago

Getting these errors in console randomly, see if you can get any hints from this if possible.

ATAudioSessionPropertyManager.mm:359 FAILED to set property 1684431725 on AVAudioSession with error Error Domain=NSOSStatusErrorDomain Code=-50 "(null)"

AURemoteIO.cpp:1679 AUIOClient_StartIO failed (561015905)

raphaelalkamim commented 9 months ago

Hello @hiroshihorie, I’m experiencing the same issue. When I create a room (in my case, start a call), if I immediately go to the background without waiting for the video/audio section to be initialized, I encounter these errors:

AURemoteIO.cpp:2087 AURemoteIO@0x10b025c40: IOThread exiting with error 0x10004006 AURemoteIO.cpp:1702 AUIOClient_StartIO failed (561145187)

Otherwise, if I wait a couple of seconds and the audio/video initializes before going to the background, everything works fine.


sanketns commented 9 months ago

@raphaelalkamim , may be it's related to audio session configuration while making a call. By the way, are you doing this with callkit?

raphaelalkamim commented 9 months ago

@sanketns , Yes, it might be related to the audio session configuration during calls. I'm currently using the default LiveKit configuration and CallKit solely for managing the call display.

sanketns commented 9 months ago

@raphaelalkamim , Are you doing something when these below functions get called?

func provider(_ provider: CXProvider, didActivate audioSession: AVAudioSession){

} func provider(_ provider: CXProvider, didDeactivate audioSession: AVAudioSession) {

}

raphaelalkamim commented 9 months ago

@sanketns No, I'm not using these delegates at all. Should I configure something beyond the LiveKit default configuration?

ajayz7 commented 7 months ago

Hi any solution to fix this . I am experiencing same when using callKit? @hiroshihorie @sanketns

liuyang2211 commented 4 months ago

Yes, I have the same situation. Is there any solution

zackzhuang1996 commented 4 months ago

alright according to the team, the iOS SDK doesn't support background mode.

Screenshot 2024-07-30 at 1 22 33 AM
davidliu commented 3 months ago

@zackzhuang1996 that's the react native sdk, which is separate from this swift sdk.

@sanketns For CallKit, the didActivate and didDeactivate methods should be implemented as follows:

  1. Add import LiveKitWebRTC to your CallProvider file.

  2. func provider(_ provider: CXProvider, didActivate audioSession: AVAudioSession){
    LKRTCAudioSession.sharedInstance().audioSessionDidActivate(audioSession)
    // ...
    }
    func provider(_ provider: CXProvider, didDeactivate audioSession: AVAudioSession) {    
    LKRTCAudioSession.sharedInstance().audioSessionDidDeactivate(audioSession)
    // ...
    }
Viktorianec commented 2 months ago

I have the same error when I answer with callkit. Also I received this message: AudioManager.defaultConfigureAudioSessionFunc(newState:oldState:) Failed to configure audio session with error: Error Domain=NSOSStatusErrorDomain Code=1701737535 "Session activation failed" UserInfo={NSLocalizedDescription=Session activation failed}

EDIT:

On the first call, there is incoming audio in the background. There is no incoming audio on the second and subsequent calls. At the same time, the other party can hear me all the time.

Could be problem here: audioSessionDidDeactivate?