7 Replies
      Latest reply on Sep 9, 2019 12:47 PM by CodeName
      PBK Level 7 Level 7 (3,235 points)

        I am trying to implement GKVoiceChat between two iPhones (an iPhone X and an iPhone 5s) in iOS11.3.1 Xcode 9.3.1.  I have the GameKit connection working fine but not the voice.  Has anyone got VoiceChat working?  Can anyone see anything wrong in the code here?  Thanks...

         

        Here is my relevant code:

        #import <GameKit/GameKit.h>
        #include <AVFoundation/AVFoundation.h>
        
        
        //in a method at the beginning......
            AVAudioSession *audioSession = [AVAudioSession sharedInstance];
            NSError *error= nil;
            [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&error];
            [audioSession setActive:YES error:&error];
            if(error){
                NSLog(@"audioSession: %@ %ld %@", [error domain], (long)[error code], [[error userInfo] description]);
            }else{
                [audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error];
                if(error){
                    NSLog(@"audioSession1: %@ %ld %@", [error domain], (long)[error code], [[error userInfo] description]);
                }else{
                    if( [GKVoiceChat isVoIPAllowed]){
                        allChannel=[[GKVoiceChat alloc] init];
                        allChannel=[myMatch voiceChatWithName:@"allPlayers"];
                        if(allChannel){
                            allChannel.volume = 1.0;
                            allChannel.active=YES;
                            [self performSelector:@selector(delayedStart) withObject:nil afterDelay:6.0f];//give Game Center a chance to respond
                        }else{
                            NSLog(@"no channel was oppend");
                        }
                    }else{
                        NSLog(@"voip not allowed");
                    }
                }
            }
        
        
        -(void)delayedStart{
            [allChannel start];
            NSLog(@"started");
        }
        
        

         

        Here are the errors I get that I don't think are relevant.  They all occur before the delayed call to [allChannel  start] and they are there whether or not I implement any of the GKVoiceChat code.  I think they are bugs in the GKMatch system.  I am ignoring them:

         

        //these errors occur before the match has been found and before the code above is executed:
        
        2018-05-17 21:05:31.006119-0400 Go[477:67899] [log]  [ERROR] gckSessionCheckPendingConnections:1438 gckSessionCheckPendingConnections: iICEChecksLeft=0, iUnconnectedNodeCount=0, iDDsExpected=1
        2018-05-17 21:05:31.063331-0400 Go[477:67847] [log]  [ERROR] ICEStopConnectivityCheck:2688 ICEStopConnectivityCheck() found no ICE check with call id (2019854734)
        2018-05-17 21:05:31.065208-0400 Go[477:67847] [log]  [ERROR] gckSessionCheckPendingConnections:1438 gckSessionCheckPendingConnections: iICEChecksLeft=0, iUnconnectedNodeCount=0, iDD
        
        //  the next line occurs when there is a call to matchmakerViewController:viewControllerDidFindMatch: and the code above is then executed
        
        2018-05-17 21:05:35.251683-0400 Go[477:67566] [Error] Extension request cancelled with error: Error Domain=NSExtensionErrorDomain Code=-2 "Extension cancelled by host." UserInfo={NSLocalizedDescription=Extension cancelled by host.}
        
        

         

        Here are the errors I get after setting the GKVoiceChat object to start (i.e. after that 6 second delay):

        2018-05-17 21:05:40.766056-0400 Go[477:67566] started
        2018-05-17 21:05:41.310557-0400 Go[477:67895] [log]  [ERROR] openLogDump:65 failed to open /var/mobile/Library/Caches/com.apple.VideoConference/logs/20180517-210541-0757771790-CallSettings.calldump with error 1
        2018-05-17 21:05:41.449639-0400 Go[477:68033] [] WiFi:[548298341.448992]: Missing com.apple.wifi.manager-access entitlement
        2018-05-17 21:05:41.449986-0400 Go[477:68033] [] WiFi:[548298341.449970]: Missing com.apple.wifi.manager-access entitlement
        2018-05-17 21:05:41.450418-0400 Go[477:68033] [] WiFi:[548298341.450400]: Missing com.apple.wifi.manager-access entitlement
        2018-05-17 21:05:41.451010-0400 Go[477:68033] [] WiFi:[548298341.450924]: Missing com.apple.wifi.manager-access entitlement
        2018-05-17 21:05:41.451625-0400 Go[477:68033] [] WiFi:[548298341.451608]: Missing com.apple.wifi.manager-access entitlement
        2018-05-17 21:05:43.648429-0400 Go[477:67566] Bad response from apsd: Connection interrupted
        2018-05-17 21:05:43.662956-0400 Go[477:67566] [Warning] Remote loader crashed for request: <NSMutableURLRequest: 0x10ba1bb60> { URL: http://init.ess.apple.com/WebObjects/VCInit.woa/wa/getBag?ix=4 }
        2018-05-17 21:05:43.664051-0400 Go[477:67566] [Warning]  => Retrying... (0/5) retries
        2018-05-17 21:05:43.667507-0400 Go[477:67566] [Warning] Remote loader crashed for request: <NSMutableURLRequest: 0x10ba1bb60> { URL: http://init.ess.apple.com/WebObjects/VCInit.woa/wa/getBag?ix=4 }
        2018-05-17 21:05:43.667646-0400 Go[477:67566] [Warning]  => Retrying... (1/5) retries
        2018-05-17 21:05:45.845023-0400 Go[477:67566] [Warning] Remote loader crashed for request: <NSMutableURLRequest: 0x10ba1bb60> { URL: http://init.ess.apple.com/WebObjects/VCInit.woa/wa/getBag?ix=4 }
        2018-05-17 21:05:45.845205-0400 Go[477:67566] [Warning]  => Retrying... (2/5) retries
        2018-05-17 21:05:46.484616-0400 Go[477:67895] [log] VideoConference [ERROR] -[VideoConference inviteDataForParticipantID:callID:remoteInviteData:nonCellularCandidateTimeout:error:]:855 VideoConference: CALLID MISMATCH 0x10bb332e0 client callID 6161504380 internal callID 0
        2018-05-17 21:05:46.490559-0400 Go[477:68030] [log]  [ERROR] VCAudioReceiver_DiscardQueueExcess:454 AudioReceiver is NULL
        2018-05-17 21:05:46.490986-0400 Go[477:68030] [log]  [ERROR] VCAudioReceiver_DiscardQueueExcess:454 AudioReceiver is NULL
        2018-05-17 21:05:50.246310-0400 Go[477:67566] [Warning] Remote loader crashed for request: <NSMutableURLRequest: 0x10ba1bb60> { URL: http://init.ess.apple.com/WebObjects/VCInit.woa/wa/getBag?ix=4 }
        2018-05-17 21:05:50.246469-0400 Go[477:67566] [Warning]  => Retrying... (3/5) retries
        2018-05-17 21:05:52.019693-0400 Go[477:67895] [log] VCCallSession [ERROR] -[VCCallSession startConnectionWithParticipantID:callID:usingInviteData:isCaller:capabilities:idsSocket:destination:error:]_block_invoke:2215 - Reporting not available (no backends)
        2018-05-17 21:05:56.819849-0400 Go[477:67566] [Warning] Remote loader crashed for request: <NSMutableURLRequest: 0x10ba1bb60> { URL: http://init.ess.apple.com/WebObjects/VCInit.woa/wa/getBag?ix=4 }
        2018-05-17 21:05:56.820068-0400 Go[477:67566] [Warning]  => Retrying... (4/5) retries
        
        • Re: GKVoiceChat not working
          PBK Level 7 Level 7 (3,235 points)

          Actually, that last error in the first box above does only occur if I implement the GKVoiceChat code but before the [allChannel start];

           

          2018-05-17 21:05:35.251683-0400 Go[477:67566] [Error] Extension request cancelled with error: Error Domain=NSExtensionErrorDomain Code=-2 "Extension cancelled by host." UserInfo={NSLocalizedDescription=Extension cancelled by host.}  
          
          
          

          and if only one device tries to make a GKVocieChat connection I only get this error:

          2018-05-17 22:08:43.923117-0400 Go[562:92959] [log]  [ERROR] VCAudioReceiver_DiscardQueueExcess:454 AudioReceiver is NULL
          
          • Re: GKVoiceChat not working
            PBK Level 7 Level 7 (3,235 points)

            And the answer is....

             

            [allChannel start];  must come before

             

            allChannel.volume = 1.0;

            allChannel.active=YES;

             

            Thank you for listening....... [allChannel stop];

              • Re: GKVoiceChat not working
                CodeName Level 1 Level 1 (0 points)

                I placed

                voiceChannel!.start()

                above

                voiceChannel!.isActive = true

                and I'm still getting the same errors you described before. Is this the only change you made?

                  • Re: GKVoiceChat not working
                    PBK Level 7 Level 7 (3,235 points)

                    I will have to check that app and get back to you in a few days. 

                      • Re: GKVoiceChat not working
                        CodeName Level 1 Level 1 (0 points)

                        Okay! I appreciate it.

                        • Re: GKVoiceChat not working
                          PBK Level 7 Level 7 (3,235 points)

                          I can't get this code running in Xcode right now to see if it sends out any warnings.  As an app on the app store (Go Game Connect) it seems to be working.

                           

                          Here is the relevant code:

                           

                             
                          
                              //global variables:
                              GKVoiceChat *allChannel;
                              GKMatch *myMatch;
                              
                              
                              //from within
                          -(void)matchmakerViewController:(GKMatchmakerViewController *)viewController didFindMatch:(GKMatch *)match
                              //.....
                              if(!myMatch){
                                  self->myMatch=match;
                                  self->myMatch.delegate = self;
                                  [self performSelector:@selector(voiceChatStuff) withObject:nil afterDelay:1.0f];
                              }else{
                                  self->myMatch=match;
                                  self->myMatch.delegate = self;
                                  [self voiceChatStuff];
                              }
                              //......
                          }
                                  
                              
                          -(void)voiceChatStuff{
                              AVAudioSession *audioSession = [AVAudioSession sharedInstance];
                              NSError *error= nil;
                              [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord mode:AVAudioSessionModeVoiceChat options:AVAudioSessionCategoryOptionDefaultToSpeaker error:&error];
                              [audioSession setActive:YES error:&error];
                              if(!error && [GKVoiceChat isVoIPAllowed]){
                                  allChannel=[[GKVoiceChat alloc] init];
                                  allChannel=[myMatch voiceChatWithName:@"allPlayers"];
                                  if(allChannel){
                                      [allChannel start];
                                      allChannel.volume = 0.8;
                                      allChannel.active=YES;
                                  }
                              }
                          }
                                  
                          //to disconnect from voice chat:
                              allChannel.active=NO;
                              [allChannel stop];
                              
                              
                              
                          
                            • Re: GKVoiceChat not working
                              CodeName Level 1 Level 1 (0 points)

                              Thank you so much! I downloaded your game "Go Game Connect" on both devices and tried playing it several times but there was never any audio coming through. Volume was all the way up. Speakers and microphone are working. Connected to wifi with good bandwidth.

                              I even tried it with someone else I know who has a different model phone, but it didn't work.

                              I got the same outcome when I tried running my own game.

                              Is the audio working for your devices when you play "Go Game Connect"?