Anyone who's written game netcode(either as a hobby or professionally) knows that you build the game design and game engine from the ground up to tolerate latency.
For action games most of the time it's all about building a game design where you're predicting(either via physical location or other player's actions), except in the few rare cases that do time-rewinding(most fighting games, some FPSes that combine both, most notably Counter-Strike). This is usually handled by dead-reckoning[1]
For large scale, low bandwidth games(AKA RTSes and the like where gamestate is deterministic) that's handled via lock-step[2]. The gamestate is 100% deterministic and all clients move together with a shared set of inputs in "lock step".
Both of these approaches can be tolerant to latencies up to ~600ms(back in the ole 28.8/56k days of '97 SubSpace[3] was doing ~300 players in one zone with a high skill curve and a robust netcode). They usually mask it with client side reactions that are then reconciled with the server in a robust way. If you're just dropping video frames over a network stack none of that is available to you no matter how fancy your FEC or other tricks are.
Somehow I've now got the urge to go dust off the Continuum client again and boot up SubSpace.
[1] https://www.gamasutra.com/view/feature/131638/dead_reckoning...
[2] https://meseta.medium.com/netcode-concepts-part-3-lockstep-a...
[3] https://store.steampowered.com/app/352700/Subspace_Continuum...