Replies: 3 comments 1 reply
-
If I understood you correctly, you want to create the positional audio effect on the serverside. |
Beta Was this translation helpful? Give feedback.
-
Ah no. You only set the position payload on the server. That doesn't conflict with E2E. As far as the Ice interface goes, I think you should bulk-update player positions rather than updating each player individually in order to minimize the overhead of each individual Ive call. |
Beta Was this translation helpful? Give feedback.
-
If I understand it correctly, currently each client is responsible of telling the server their position. I'm not worrying about clients disabling PA or modifying data that is sent to them by the server, I'm worried about the clients sending garbage/fake/etc. positional data to the server, which is then sent to every other client. Maybe the server side approach is overkill, but I'd rather not trust anything the clients send. With client side approach, in theory, a client would be able to listen to locations that the client's in-game avatar is not located at, as a form of cheating. Also I would probably make a bare bones custom Mumble client with everything except the essential functionality stripped out. Good point about bulk-updating the positions. I've drawn a couple rough diagrams to better illustrate what I'm trying to achieve: In order to emulate how the game's built-in (broken) VOIP works, I would also have to control much of the PA options on server side. I.e. the game has multiple channels for team, squad and proxy (positional) voice chat. The server would have to control who is able to hear whom (with the help of ACLs?). Proxy voice should only be sent to clients that are within hearing distance of other clients (based on in-game rules). Clients should only be allowed to speak on channels that they have access to in-game, on the game server. Clients would not be able to jump between channels manually, only when the server moves them (via RPCs). This might seem overambitious or bloated in scope, but I have all the time in the world to work on this. |
Beta Was this translation helpful? Give feedback.
-
I'm currently working on implementing server-side positional audio via RPCs. The game server would control all PA parameters via Murmur RPCs for all users, and Murmur would then relay them to the player Mumble clients. I'm aware of the latency implications if the game server and Murmur are physically located far away from each other. The motivation is to prevent clients from sending forged PA data and to keep most of the logic on the server(s) similarly to how built in VOIP works in most games. I started working on this to offer an alternative to the horribly buggy Vivox implementation in Rising Storm 2: Vietnam.
As of now I've implemented
getPosition
,setPosition
andremovePosition
ICE RPCs. I'm simply setting the position foraudioData
on the Server beforeprocessMsg
. I was thinking of defining new Protobuf messages for the rest of the PA values (orientation, PA settings, etc.) and sending those to the clients in the RPCs.I wanted to ask for any pointers, whether my approach is bad, is there something obvious I missed, etc. or any tips in general if this has been considered before.
This is my working branch: https://github.com/tuokri/mumble/tree/positional-rpc
Beta Was this translation helpful? Give feedback.
All reactions