Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Audio not workin when using alongside Zoom Video SDK. Getting "AURemoteIO.cpp:1091 failed: 561017449" error #641

Open
wanvidu opened this issue Feb 10, 2025 · 0 comments

Comments

@wanvidu
Copy link

wanvidu commented Feb 10, 2025

  • Audio start working after around 40 seconds delay

  • Outgoing calls working normally. For this "flutter_callkit_incoming" not used. So issue is not in the Zoom video SDK

  • Getting same issue with both Zoom Video SDK and Agora

  • Android to Android working normally. iOS to Android and iOS to iOS not working

  • showCallkitIncoming called with configureAudioSession = false and audioSessionActive = false

        let data = flutter_callkit_incoming.Data(
                    id: id,
                    nameCaller: callerUserUsername,
                    handle: "",
                    type: callType == "VIDEO" ? 1 : 0
                  )
        
        data.configureAudioSession = false
        data.audioSessionActive = false

        data.extra = [
            "appointmentType": appointmentType,
            "appointmentId": appointmentId,
        ]

        SwiftFlutterCallkitIncomingPlugin.sharedInstance?.showCallkitIncoming(data, fromPushKit: true)
  • WebRTC manual audio set
import UIKit
import CallKit
import AVFAudio
import PushKit
import Flutter
import flutter_callkit_incoming
import WebRTC

@main
@objc class AppDelegate: FlutterAppDelegate, PKPushRegistryDelegate, CallkitIncomingAppDelegate {

    override func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
        GeneratedPluginRegistrant.register(with: self)

        //Setup VOIP
        let mainQueue = DispatchQueue.main
        let voipRegistry: PKPushRegistry = PKPushRegistry(queue: mainQueue)
        voipRegistry.delegate = self
        voipRegistry.desiredPushTypes = [PKPushType.voIP]

        //Use if using WebRTC
        RTCAudioSession.sharedInstance().useManualAudio = true
        RTCAudioSession.sharedInstance().isAudioEnabled = false

        if #available(iOS 10.0, *) {
          UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate
        }

        return super.application(application, didFinishLaunchingWithOptions: launchOptions)
    }

    // Handle updated push credentials
    func pushRegistry(_ registry: PKPushRegistry, didUpdate credentials: PKPushCredentials, for type: PKPushType) {
        print(credentials.token)
        let deviceToken = credentials.token.map { String(format: "%02x", $0) }.joined()
        print(deviceToken)
        //Save deviceToken to your server
        SwiftFlutterCallkitIncomingPlugin.sharedInstance?.setDevicePushTokenVoIP(deviceToken)
    }

    func pushRegistry(_ registry: PKPushRegistry, didInvalidatePushTokenFor type: PKPushType) {
        print("didInvalidatePushTokenFor")
        SwiftFlutterCallkitIncomingPlugin.sharedInstance?.setDevicePushTokenVoIP("")
    }

    // Handle incoming pushes
    func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type: PKPushType, completion: @escaping () -> Void) {
        print("didReceiveIncomingPushWith")
        guard type == .voIP else { return }

        let id = UUID().uuidString
        let appointmentType = payload.dictionaryPayload["appointment_type"] as? String ?? ""
        let appointmentId = payload.dictionaryPayload["appointment_id"] as? String ?? ""
        let callType = payload.dictionaryPayload["call_type"] as? String ?? "VIDEO"

        let data = flutter_callkit_incoming.Data(
                    id: id,
                    nameCaller: "User",
                    handle: "",
                    type: callType == "VIDEO" ? 1 : 0
                  )
        
        data.configureAudioSession = false
        data.audioSessionActive = false

        data.extra = [
            "appointmentType": appointmentType,
            "appointmentId": appointmentId,
        ]

        SwiftFlutterCallkitIncomingPlugin.sharedInstance?.showCallkitIncoming(data, fromPushKit: true)

        //Make sure call completion()
        DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
            completion()
        }
    }

    // Func Callback Toggle Audio Session
    func didActivateAudioSession(_ audioSession: AVAudioSession) {
        //Use if using WebRTC
        RTCAudioSession.sharedInstance().audioSessionDidActivate(audioSession)
        RTCAudioSession.sharedInstance().isAudioEnabled = true
    }

    // Func Callback Toggle Audio Session
    func didDeactivateAudioSession(_ audioSession: AVAudioSession) {
        //Use if using WebRTC
        RTCAudioSession.sharedInstance().audioSessionDidDeactivate(audioSession)
        RTCAudioSession.sharedInstance().isAudioEnabled = false
    }
}
  • Error log
CreateAudioUnit use hardware aec = 1
[IOS].CreateAudioUnit g_audioUinits.count = 1
AudioDeviceIOS::SetMuteOutputAudioUnit unmute output
AudioDeviceIOS::SetMuteOutputAudioUnit can mute = 1
           AURemoteIO.cpp:1091  failed: 561017449 (enable 3, outf< 1 ch,  48000 Hz, Int16> inf< 1 ch,  48000 Hz, Int16>)
AudioDeviceIOS::SetMuteOutputAudioUnit can mute = 1
AudioDeviceIOS::SetMuteOutputAudioUnit unmute output
flutter: ##############################
flutter: FlutterCallkitIncoming: Event.actionCallToggleMute
flutter: CallEvent( body: {isMuted: true, id: D4E1367F-1ECE-427C-94D1-F4DB319CA5CF}, event: Event.actionCallToggleMute)
flutter: ##############################
flutter: FlutterCallkitIncoming: Event.actionCallToggleMute
flutter: CallEvent( body: {isMuted: false, id: D4E1367F-1ECE-427C-94D1-F4DB319CA5CF}, event: Event.actionCallToggleMute)
flutter: ##############################
AudioDeviceIOS::SetMuteOutputAudioUnit unmute output
           AURemoteIO.cpp:1091  failed: 561017449 (enable 3, outf< 1 ch,  48000 Hz, Int16> inf< 1 ch,  48000 Hz, Int16>)
flutter: ##############################
flutter: FlutterCallkitIncoming: Event.actionCallToggleMute
flutter: CallEvent( body: {id: D4E1367F-1ECE-427C-94D1-F4DB319CA5CF, isMuted: false}, event: Event.actionCallToggleMute)
flutter: ##############################
flutter: FlutterCallkitIncoming: Event.actionCallToggleMute
flutter: CallEvent( body: {id: D4E1367F-1ECE-427C-94D1-F4DB319CA5CF, isMuted: false}, event: Event.actionCallToggleMute)
flutter: ##############################
AudioDeviceIOS::SetMuteOutputAudioUnit unmute output
           AURemoteIO.cpp:1091  failed: 561017449 (enable 3, outf< 1 ch,  48000 Hz, Int16> inf< 1 ch,  48000 Hz, Int16>)
AudioDeviceIOS::SetMuteOutputAudioUnit unmute output
           AURemoteIO.cpp:1091  failed: 561017449 (enable 3, outf< 1 ch,  48000 Hz, Int16> inf< 1 ch,  48000 Hz, Int16>)
AudioDeviceIOS::SetMuteOutputAudioUnit unmute output
           AURemoteIO.cpp:1091  failed: 561017449 (enable 3, outf< 1 ch,  48000 Hz, Int16> inf< 1 ch,  48000 Hz, Int16>)
AudioDeviceIOS::SetMuteOutputAudioUnit unmute output
           AURemoteIO.cpp:1091  failed: 561017449 (enable 3, outf< 1 ch,  48000 Hz, Int16> inf< 1 ch,  48000 Hz, Int16>)
AudioDeviceIOS::SetMuteOutputAudioUnit unmute output
           AURemoteIO.cpp:1091  failed: 561017449 (enable 3, outf< 1 ch,  48000 Hz, Int16> inf< 1 ch,  48000 Hz, Int16>)
AudioDeviceIOS::SetMuteOutputAudioUnit unmute output
           AURemoteIO.cpp:1091  failed: 561017449 (enable 3, outf< 1 ch,  48000 Hz, Int16> inf< 1 ch,  48000 Hz, Int16>)
AudioDeviceIOS::SetMuteOutputAudioUnit unmute output
           AURemoteIO.cpp:1091  failed: 561017449 (enable 3, outf< 1 ch,  48000 Hz, Int16> inf< 1 ch,  48000 Hz, Int16>)
LOG: onEnd
flutter: ##############################
flutter: FlutterCallkitIncoming: Event.actionCallEnded
flutter: CallEvent( body: {uuid: d4e1367f-1ece-427c-94d1-f4db319ca5cf, duration: 30000, type: 1, normalHandle: 0, extra: {appointmentType: TRAINING, receiverUserId: 836, callerUserId: 203, zoomSessionPassword: IZQIVcDTTh, callType: VIDEO, zoomSessionName: UgTeyJrLmG, appointmentId: 3}, id: d4e1367f-1ece-427c-94d1-f4db319ca5cf, ios: {supportsHolding: true, audioSessionPreferredIOBufferDuration: 0.005, supportsGrouping: true, audioSessionPreferredSampleRate: 44100.0, supportsUngrouping: true, audioSessionActive: false, supportsVideo: true, supportsDTMF: true, audioSessionMode: videoChat, ringtonePath: , handleType: , includesCallsInRecents: true, configureAudioSession: false, iconName: CallKitLogo, maximumCallsPerCallGroup: 1, maximumCallGroups: 2}, handle: , appName: PetDoc, nameCaller: User}, event: Event.actionCallEnded)
flutter: ##############################
AudioDeviceIOS::SetMuteOutputAudioUnit unmute output
AudioDeviceIOS::SetMuteOutputAudioUnit can mute = 1
[IOS].InitAudioUnit kAUVoiceIOSpeechActivityHasStarted notification report}

Expected Behavior:

  • Call alert shown via "flutter_callkit_incoming" which is coming from CallKit
  • When Accept button is pressed open call screen which contains code for initializing Zoom Video SDK
  • Audio should start working immediately after connecting to Zoom

Actual Behavior:

  • Call alert shown via "flutter_callkit_incoming" which is coming from CallKit
  • When Accept button is pressed open call screen which contains code for initializing Zoom Video SDK
  • Audio connects after around 40 seconds delay

Environment:
• iOS version: 18.2
• Flutter version: 3.27.4
• flutter_callkit_incoming plugin version: 2.5.0
• Device: iPhone 11

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant