GKMatch オブジェクトを使用して、接続された 2 人のプレイヤー間で VoiceChat を実現しようとしています。プレイヤーは認証され、GKMatchmakerViewController を使用してマッチを作成することもできます。
問題は、デリゲート コールバック経由で GKMatch オブジェクトを受信したときに、 AudioSessionmatchmakerViewController:didFindMatch:
と VoiceChat オブジェクトをセットアップしたことです。しかし、このメソッドが返された直後に、GKMatch のデリゲートでコールバックを取得しますmatch:player:didChangeState:
didFindMatch コールバックで AudioSession と VoiceChat を作成する方法は次のとおりです。
- (void)matchmakerViewController:(GKMatchmakerViewController *)viewController didFindMatch:(GKMatch *)match {
[viewController dismissViewControllerAnimated:YES completion:nil];
self.match = match;
match.delegate = self;
if (!_matchStarted && match.expectedPlayerCount == 0)
{
NSError *err = nil;
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&err];
[audioSession setActive: YES error:&err];
if (err)
{
NSLog(@"%@",err.localizedDescription);
}
self.teamChannel = [[match voiceChatWithName:@"redTeam"] retain];
_teamChannel.volume = 1.0f;
_teamChannel.active = YES;
[_teamChannel start];
_teamChannel.playerStateUpdateHandler = ^(NSString *playerID, GKVoiceChatPlayerState state) {
switch (state)
{
case GKVoiceChatPlayerSpeaking:
NSLog(@"Speaking...");
break;
case GKVoiceChatPlayerSilent:
break;
case GKVoiceChatPlayerConnected:
NSLog(@"Connected.");
break;
case GKVoiceChatPlayerConnecting:
NSLog(@"Connecting..");
break;
case GKVoiceChatPlayerDisconnected:
NSLog(@"Disconnected.");
break;
}
};
}
}
に電話がかかってきませんplayerStateUpdateHandler
。次の関数で呼び出しが切断されます: `- (void)match:(GKMatch *)match player:(NSString *)playerID didChangeState:(GKPlayerConnectionState)state { if (_match != match) return;
switch (state) {
case GKPlayerStateConnected:
NSLog(@"Player connected!");
break;
case GKPlayerStateDisconnected:
NSLog(@"Player disconnected!");
_matchStarted = NO;
break;
case GKPlayerStateUnknown:
NSLog(@"Player stage Unknown.");
break;
}
}`
質問:-
どちらの側でも音声が聞こえません。何か足りないのでしょうか? 私はこれを 3 日間試してきましたが、(副次的な質問として) 2 番目のプレーヤーをどうすればよいかわかりません。一致すると、デバイスの 1 つで didFindMatch が取得され、他のデバイスにはコールバックがありません。他のデバイスでメッセージを送信する必要がありますか? 試合について?
迅速なヘルプをいただければ幸いです。