Yeah, I’ve tried both with and without push to talk. I’m sure there’s something somewhere that I’m missing as far as getting the issue to reproduce, as I know several users are experiencing the error. Any information you can provide as far as how we can reproduce this is helpful, but at this point a test project would be most helpful, as none of our previous attempts have shown the issue.
I haven’t had time to make a project for you, as I work 7 days per week, but I did look at the project you linked. The obvious difference was the use of c++ and push to talk. Could you just follow the Steam multiplayer blueprint tutorial series and use that to test?
Hey Sean,
This may be a dumb question, but are you sure the voice was working on both the server and the client in your tests? and did you server travel several (~5) times? And also, are you using seamless travel?
I’ll see if I can get you a test project as my next task, but if you could answer those questions in the meantime it would help me out a lot, thanks!
-Nicholaos
Looking at your project, it seems that you didn’t yet set a transition map for the seamless travel… I think that’s what was going wrong with your project… Also, the bRequiresPushToTalk entry must be removed from your DefaultEngine.ini file. Also, you have to call the ServerTravel console command instead of the SeamlessTravel function. I’ve done that with this project, give it a try.
Thank you for all of your information and effort as far as reproducing the issue goes. I’ve reproduced it, and gotten a bug report entered, which you can track using the link below:
I pulled the OnlineSubsystemSteam plugin code into my project so I can modify it. In VoiceEngineSteam.h, I modified RegisterRemoteTalker (which is basically empty for steam) as follows:
This will force the player’s talk buffer to be recreated. I had some trouble figuring out where to put this because of interface/scope craziness, so I just chose to put it here because it’s accessible through the interface. VoiceInterfaceSteam will not call the function if the talker has already been registered, however, so in VoiceInterfaceSteam.cpp I’ve modified the RegisterRemoteTalker function as follows:
bool FOnlineVoiceSteam::RegisterRemoteTalker(const FUniqueNetId& UniqueId)
{
uint32 Return = E_FAIL;
// Skip this if the session isn't active
if (SessionInt && SessionInt->GetNumSessions() > 0 &&
// Or when voice is disabled
VoiceEngine.IsValid())
{
// See if this talker has already been registered or not
FRemoteTalker* Talker = FindRemoteTalker(UniqueId);
if (Talker == NULL)
{
...
}
else
{
UE_LOG(LogVoice, Verbose, TEXT("Remote talker %s is being re-registered"), *UniqueId.ToDebugString());
// call register anyways because we need to flush the buffer
Return = VoiceEngine->RegisterRemoteTalker(UniqueId);
}
...
}
return Return == S_OK;
}
Then I’m just calling
VoiceInterface->RegisterRemoteTalker(SteamId)
for each player state after a seamless travel. The buffers get recreated and voice comes back immediately.
Obviously this is not an ideal solution, but it does technically solve the problem.
How did you pull the subsystem plugin into your own code? I am having trouble doing that, if I put it in the plugins folder, it says that I cannot have duplicate classes, and if I copy into my own project, I have to edit all the include files
Hello I´m having the same issue, somedy has solve the problem? I´m working in a project in unreal 4.24 and after travelling players can´t speak each other any longer.