Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

VoiceChannels: Alpha #4400

Closed

Conversation

LastFlux
Copy link

Introduction

Adds the functionality to turn a room with a Jitsi conference into a 'Voice Channel'
This pull request is mostly just to showcase a proof of concept that looks to satisfy element-hq/element-web#3546.
image

Also related to vector-im/riot-web#7487

I suspect things will break when trying to compile/run. I made these changes in a full dev environment and with a couple hacks that reference the riot-web project from this project

How it works

  • Have a room with a Jitsi widget (or create one)
  • Mark room as voice channel (under general in room settings)
  • Click on the now voice channel and hopefully you will connect.

The microphone mute button does work. However, currently you need to dismiss the 'rate the meeting' jitsi dialog before you are disconnected properly (show jitsi debug to dismiss this)

Under the hood

A new component that is responsible for managing voice channels. (Plus other utils)
It loads the jitsi api as specified by the riot config. (I had CSP issues. Will need to edit riot index.html to allow)
When trying to connect to a voice channel will create a hidden jitsi widget (can be shown for debug).

New room state 'im.riot.voicechannel'. This stores the fact that a room is a voice channel and a list of the current users in the voice channel. This data format is subject to change no doubt.
Currently each user is responsible for updating this state when they join/leave.
Config option has been added to allow all room users to update this state (still defaults to moderator)

Forseeable Issues

  • Jitsi API currently doesn't have commands to perform moderation. Won't be able to moderate via riot since the widget isnt shown.
  • In the same vein, Jitisi grants moderator privileges to the first user to the conference.
  • Conference name leaking and no longer being a private room. Especially for rooms that have been around for a long time. (Simple fix currently is to delete and recreate the widget, or room admins could even manually change the event data)
  • Other Jitsi API limitations. Cant mute received audio? etc

Conclusion

There's still plenty to do, as this is still really just a proof of concept.
I'm open to any feedback/suggestions people may have.
There is already plenty of community support for a feature like this. So I'm happy to keep developing this provided that the Riot/Matrix staff believe that this is within the scope and direction of Riot/Matrix.

Fix vc config save
Add permission setting for VC state
Fix voice user entry on roomlist
@tensaimon
Copy link

hey I got here from [https://github.com/element-hq/element-web/issues/3546] I just want to give you a shout out to say thanks for looking at this, I (along with many others) are very keen to see this implemented (sorry, I have no coding skills..) I've been looking at discord for hosting a community, seems people love the functionality but the security/ privacy issues are putting me off, riot seems like it has the potential to be the alternative I'm looking for... hope you get some success putting it together / finding some help!

@oddsock
Copy link

oddsock commented Apr 29, 2020

HI I have been playing around with this myself and not sure if it helps but i am using mumble as a voip server, using mumble-web(html) to access the mumbleserver (using wss), and im accessing it through a widget. If you want any work iv done il be more than happy to send you what i got up and running. We really need something as fancy as discord but able to be hosted ourselves.

@tensaimon
Copy link

Hey I looked at mumble as a possible alternative to discord, it looked good until I realized the mobile apps (android and ios) are no longer supported, this was a dealbreaker for me as a lot of my students only have smartphones (no computers). I mention this because I'd imagine any viable discord alternative would need to be supported on mobile devices to get people on board, would using a mumble integration (which in other respects seems like a great idea, no need to build something new) mean mobile wouldn't be supported? If so, an alternative solution would be: if someone felt like taking up the reins on those mumble mobile apps that might also solve the problem!

I hope that's helpful, not a coder so can't really help out in any way (except maybe testing...) but definitely very interested in this project!

@joepie91
Copy link

joepie91 commented May 1, 2020

@tensaimon There's https://mumla-app.gitlab.io/ for Android, at least.

@tensaimon
Copy link

tensaimon commented May 2, 2020

@joepie91 thanks I hadn't seen that!

@hramrach
Copy link

hramrach commented Jun 4, 2020

Also https://github.com/mumble-voip/libmumble to roll your own client which specifically supports iOS and https://github.com/Johni0702/mumble-web for web/electron.

@hramrach
Copy link

hramrach commented Jun 4, 2020

FTR: if you consider switching from Jitsi here are some thoughts

  • anything WebRTC based is limiting to clients implementing web semantics and hard to debug. I understand that there are people who live on the web and won't touch anything that does not run in JS with a bare pole but that's not the whole world, and Synapse does not run on the web either. Consequently, WebRTC should be considered last mile option for web based clients but not the main audio transport. Also while debugging options for WebRTC exist none of the web based audio applications I have seen (including Jitsi) provide any. Either it just works or it fails completely mysteriously.

  • mumble uses centralized audio server rather than p2p connection. However, in practice p2p connections are rare because they are hard to establish, hard to debug, potentially problematic for privacy - other users learning your IP address. It is a win if two clients who are in the same internal network connect over the internal network rather than going to a central server and back but this is a rare case. In practice everyone uses a proxy anyway because they cannot rely on the ability to establish p2p connections. And you use a central server for presence anyway. What would be probably useful is some way to specify a mumble server per room/community. One voice server per synapse server may get overloaded easily.

@DoM1niC
Copy link

DoM1niC commented Sep 4, 2021

Any Progress on this ? :( This looks like a Dream to use Element fully as Voice over IP fallback with Groups and so on like Discord and so on ....

@PxBCPG
Copy link

PxBCPG commented Dec 17, 2021

Don't drop this idea off!
This will revolutionise Element!

@robintown
Copy link
Member

Hi @LastFlux, thanks for creating this proof of concept a while back. I'm going to close this PR, since the codebase has changed a lot since 2020, and we're actually moving forward with our own, design-led implementation of this feature now. Feel free to track the latter's progress at #8084.

@robintown robintown closed this Mar 18, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

8 participants