Is this possible? Client subscribe to stream and re-publish

Greetings,

I develop open source karaoke software for professional karaoke DJs and am trying to come up with a workable solution for them to be able to host shows online via a video conference during all of the covid19 madness. openVidu looks promising, but I’m curious as to whether it may be possible to do what I’m trying to do.

The problem with hosting karaoke across most video chat platforms is the latency between the singer hearing the music (assuming it’s coming from the host’s machine) and their voice making it back to everyone.

I’ve solved this somewhat on a commercial chat platform that allows participants to share their desktop audio and having only the current singer open a live stream in another browser tab of the karaoke software’s output (sent via rtmp from OBS Studio to Nginx and presented to the singer as HLS in a video element). That way their vocals and the music are both sourced from their machine, and come through in sync to the rest of the participants. It solves all of the sync issues, but it’s clunky and not very user-friendly for the non computer savvy.

I was wondering if via the ipcam functionality of openVidu I could publish the rtmp stream from the hosting software/OBS, then have only the active singer subscribed to that stream so they hear it locally, and also re-publish the stream from their session to everyone else so they get it and the current singer’s vocals at the same time from the singer’s system. I realize that I’d have to handle who the current singer is and do the publishing/unpublishing programmatically. It’s more the ability to subscribe to, play locally, and re-publish back to the other participants the ipcam stream’s audio along with their own mic input that I’m asking about.

I fully realize that this is not the use case openVidu was meant for and that this may not be even remotely possible. Just looking for creative solutions.

Thanks in advance for any answers, even if they’re of the “ummm wtf? no!” variety. lol