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

Element Call - feature request #1764

Open
razerrazer opened this issue Apr 18, 2022 · 25 comments
Open

Element Call - feature request #1764

razerrazer opened this issue Apr 18, 2022 · 25 comments
Labels
suggestion This issue is a feature request

Comments

@razerrazer
Copy link

Hi,

I would like to see an implementation to Element Call.
https://github.com/vector-im/element-call

@aine-etke
Copy link
Collaborator

It's a PoC of the WIP, not-yet-merged proposal MSC3401, why would you to bring it to the playbook?

Just build it yourself and run as container alongside with other matrix components

@wibbene
Copy link
Contributor

wibbene commented May 21, 2022

@razerrazer Automation is nice though.

It looks Cool, but it is very much in beta. I might look into a Pull Request if I get time as prep work for integration into the playbook.

@enekonieto
Copy link

Element Call is still in Beta, but I think it is pretty usable.

Updated README with self host instructions:
https://github.com/robintown/element-call/tree/readme#host-it-yourself

From: element-hq/element-call#696

@JokerGermany
Copy link
Contributor

Element Call is just a Webclient like Element Web, BUT Element-Web supports Element Call already...

@enekonieto
Copy link

enekonieto commented Nov 2, 2022

I think it is interesting to host Element Call besides Element Web. EC is much easier to start a meetup with people that don't have an account, they only have to click a link and choose a nickname.

I am using Jitsi for this use cases right now, but I would want to migrate to EC.

@JokerGermany
Copy link
Contributor

you know that at the moment you can only use element call for up to 8 person?

@enekonieto
Copy link

I didn't know, thanks for the info. Still I think adding EC as optional to this ansible could be interesting (in my case 8 people is enough for almost every situation).

@spantaleev
Copy link
Owner

From a quick look, the Element Call docs are unclear about:

  • what is it? Is it just a static page? The README seems to say so. Will it always be static or will it include some backend routes as well? I heard people talking about some SFU. Will that be a separate component or will it be part of Element Call?
  • how it should be self-hosted (are container images available? - seems like there aren't and we need to build our own from the Dockerfile)
  • how it should be tied into element-web / element-desktop when self-hosting? Or is it not meant to be used within Element? Is it only usable when going directly to the Element Call page?
  • is it some room widget (like Jitsi) or can Element Call be used in a more "native" way within Element?
  • is it possible (and if yes, how) to make use of Element Call from other clients

I don't seem to find quick answers to these questions.

We could follow the Host it yourself docs and try to figure it all out (and see if it's actually useful), but.. no one cares enough about it to do it just yet.

@JokerGermany
Copy link
Contributor

JokerGermany commented Nov 2, 2022

From a quick look, the Element Call docs are unclear about:

* what is it? Is it just a static page? The README seems to say so. Will it always be static or will it include some backend routes as well? 

Element Call is just a Client like element Web.
https://call.element.io/
The Backend is the synapse server

I heard people talking about some SFU. Will that be a separate component or will it be part of Element Call?

Element Call is only a client => seperate
This one: https://github.com/matrix-org/waterfall

* how it should be tied into element-web / element-desktop when self-hosting? Or is it not meant to be used within Element? Is it only usable when going directly to the Element Call page?

It's not meant to be used within element.
Element has this build in already in labs
grafik
(Sorry german)

After activating this you can choose if you want to create a elment call or jitsi call. (only videocall when i tested it)
grafik

* is it some room widget (like Jitsi) or can Element Call be used in a more "native" way within Element?

widget

@jahlives
Copy link

@JokerGermany

Element has this build in already in labs

sorry to hijack this issue but my labs settings in Element look different. I can choose to enter the beta "Video rooms" which does not work in my case anyway. But no options related to "Element call"

Element version: 1.11.14
Olm version: 3.2.12

is my Element not recent enough to show those options you showed in your screenshot?

@JokerGermany
Copy link
Contributor

@jahlives
https://github.com/JokerGermany/Matrix-Tipps#how-to-activate-labs-on-element

@aaronraimist
Copy link
Contributor

and for the the instance of Element created by matrix-docker-ansible-deploy, set matrix_client_element_showLabsSettings: true in your vars.yml file

Hopefully it will be much less confusing soon matrix-org/matrix-react-sdk#8969

@jahlives
Copy link

jahlives commented Nov 15, 2022

@JokerGermany

have to come back on this again, sorry :-) Seems to me that elements-call does not work with our homeserver. I can call the other side and hear that it rings, when other side picks up the ringing stops but the screen remains black. So no video and no voice. Are there any additional settings required for element-call to work properly? Or maybe a turn issue?

Then I tried to add a custom jitsi widget (https://github.com/JokerGermany/Matrix-Tipps#add-jitsi-widget-with-a-custom-url-to-the-room) to the room. Which works via our own jitsi server. Video and voice works but screensharing does not work. Screensharing only works in element-web but not in my element-desktop app. Any idea what goes wrong here?

@saket424
Copy link

The new SFU called waterfall is courtesy the pion project. A description of the components involved to setup element-call locally is documented here

https://github.com/matrix-org/waterfall/blob/main/doc/development.md

@kubo6472
Copy link

There is now livekit being used. Maybe it's worth a look to consider it again.

@rriemann
Copy link

https://github.com/vector-im/element-call is now the home of the livekit SFU-enabled call server. From the release v0.5 changelog:

This release has been a while in the making, but brings fully end to end encrypted media, switches to new MatrixRTC session based signalling, has better support for calls on mobile whilst locked, works with the new Element X release as well as a brand new look!

Important things to know:

  • New calls in normal app (SPA, ie. not embeded) mode are now end-to-end encrypted.
  • Calls now need to be created explicitly rather than participants simply choosing the same URL.
  • Existing URLs will continue to work as unencrypted calls. Using a plain call.element.io/callname link that is not already associated with a call will result in an error page.
  • To upgrade your existing calls to e2ee, create new ones and share the new link that includes the key.
  • End to end encryption is supported on Chrome, Safari and also on Firefox with version 117 or newer.

I think this component would be an interesting addition to the ansible setup.

@wjbeckett
Copy link

Looks like there has been some significant changed to Element Call recently.
Seems like including this in the ansible stack would be a good addition.
https://github.com/element-hq/element-call

@plui29989
Copy link
Contributor

Theres also this Issue with helpful comments on how to get self-hosted Element Call up and running in a docker environment: element-hq/element-meta#2371

@torrybr
Copy link

torrybr commented Sep 15, 2024

Having this integrated would be super helpful!

@wjbeckett
Copy link

I am trying to work on this as a PR.
I'll update when I have something working.

@wjbeckett
Copy link

PR submitted.
#3562

@saket424
Copy link

saket424 commented Oct 3, 2024

@wjbeckett
I tried your PR 3562 .

I added the following lines to inventory/vars.yml

keydb_enabled: true
matrix_element_call_enabled: true
matrix_livekit_server_enabled: true
matrix_jwt_service_enabled: true
# Set a secure key for LiveKit authentication
#matrix_element_call_livekit_dev_key: 'DEVKEY'
matrix_livekit_server_dev_key: 'DEVKEY'

While it appears that all the services seem to start fine, I do not get any video in the element-call sfu room. I noticed 7881 is listening only on ipv6 whereas 8881 is listening on both ipv4 and ipv6. Is this normal ? Any ideas of what the issue may be?

ubuntu@o1:~/matrix-docker-ansible-deploy$ docker ps -a
CONTAINER ID   IMAGE                                         COMMAND                  CREATED          STATUS                    PORTS                                                                                                                                                                                                                                               NAMES
939f28b8746c   joseluisq/static-web-server:2.33.0-alpine     "/entrypoint.sh stat…"   27 minutes ago   Up 27 minutes             80/tcp                                                                                                                                                                                                                                              matrix-static-files
1cee20ec607e   ghcr.io/element-hq/element-call:latest        "/docker-entrypoint.…"   27 minutes ago   Up 27 minutes             8080/tcp                                                                                                                                                                                                                                            matrix-element-call
12f25223f43c   livekit/livekit-server:latest                 "/livekit-server --d…"   27 minutes ago   Up 27 minutes                                                                                                                                                                                                                                                                 matrix-livekit-server
d0a34da452cf   ghcr.io/element-hq/lk-jwt-service:latest-ci   "/lk-jwt-service"        27 minutes ago   Up 27 minutes             0.0.0.0:8881->8080/tcp, [::]:8881->8080/tcp                                                                                                                                                                                                         matrix-jwt-service
6167ba7a02ff   vectorim/element-web:v1.11.79                 "/docker-entrypoint.…"   27 minutes ago   Up 27 minutes             80/tcp                                                                                                                                                                                                                                              matrix-client-element
37f29b89c750   ghcr.io/element-hq/synapse:v1.116.0           "/start.py run -m sy…"   27 minutes ago   Up 27 minutes (healthy)   8008-8009/tcp, 8448/tcp                                                                                                                                                                                                                             matrix-synapse
b28423a95ac3   coturn/coturn:4.6.2-r11-alpine                "turnserver -c /turn…"   27 minutes ago   Up 27 minutes             0.0.0.0:3478->3478/tcp, 0.0.0.0:3478->3478/udp, :::3478->3478/tcp, :::3478->3478/udp, 0.0.0.0:5349->5349/udp, :::5349->5349/udp, 0.0.0.0:5349->5349/tcp, 0.0.0.0:49152-49172->49152-49172/udp, :::5349->5349/tcp, :::49152-49172->49152-49172/udp   matrix-coturn
0ac22fdf2ad8   devture/exim-relay:4.98-r0-1                  "/sbin/tini -- exim …"   27 minutes ago   Up 27 minutes             8025/tcp                                                                                                                                                                                                                                            matrix-exim-relay
7244092f640c   eqalpha/keydb:arm64_v6.3.4                    "docker-entrypoint.s…"   27 minutes ago   Up 27 minutes             6379/tcp                                                                                                                                                                                                                                            matrix-keydb
e3cea296ffff   postgres:17.0-alpine                          "docker-entrypoint.s…"   27 minutes ago   Up 27 minutes             5432/tcp                                                                                                                                                                                                                                            matrix-postgres
f9be3e97d521   ldez/traefik-certs-dumper:v2.8.3              "/bin/sh /certs-dump…"   27 minutes ago   Up 27 minutes                                                                                                                                                                                                                                                                 matrix-traefik-certs-dumper
a68461ce7dac   traefik:v3.1.3                                "/entrypoint.sh --co…"   27 minutes ago   Up 27 minutes             80/tcp, 0.0.0.0:8448->8448/tcp, 0.0.0.0:8448->8448/udp, :::8448->8448/tcp, :::8448->8448/udp, 0.0.0.0:80->8080/tcp, [::]:80->8080/tcp, 0.0.0.0:443->8443/tcp, 0.0.0.0:443->8443/udp, [::]:443->8443/tcp, [::]:443->8443/udp                         matrix-traefik
58bfc3fab0d0   ghcr.io/tecnativa/docker-socket-proxy:0.2.0   "docker-entrypoint.s…"   27 minutes ago   Up 27 minutes             2375/tcp                                                                                                                                                                                                                                            matrix-container-socket-proxy
ubuntu@o1:~/matrix-docker-ansible-deploy$ netstat -an | grep 7881
tcp6       0      0 :::7881                 :::*                    LISTEN     
ubuntu@o1:~/matrix-docker-ansible-deploy$ netstat -an | grep 8881
tcp        0      0 0.0.0.0:8881            0.0.0.0:*               LISTEN     
tcp6       0      0 :::8881                 :::*                    LISTEN     
ubuntu@o1:~/matrix-docker-ansible-deploy$

@wjbeckett
Copy link

wjbeckett commented Oct 3, 2024

@saket424 yes, that is correct. Have a look at the PR, there is a notice about the accessing the call.DOMAIN directly in a browser doesn't work because it's expecting an oidc header from Matrix Authentication Service, which Iant implemented yet. That's next on my list to look at.

However, if you launch a call from within an element client (web/mobile/desktop) it should embed the call and work correctly.

@saket424
Copy link

saket424 commented Oct 3, 2024

@wjbeckett
I am confused. if we only specify the livekit devkey, how do we specify the associated secret in the vars.yml file ?

~ $ ./livekit-server generate-keys
API Key: APInCySBnTF4rFK
API Secret: wHkaqJr4XDgMf3yTC56uvlVlcxoerTTRICsXtiWafhLA

API Key: devkey
API Secret: secret

Edit: this needs to go into the hosts/vars.yml
matrix_livekit_server_dev_key: 'APInCySBnTF4rFK'
matrix_livekit_server_jwt_secret: 'wHkaqJr4XDgMf3yTC56uvlVlcxoerTTRICsXtiWafhLA'

the devkey and secret are used as input to generate a limited duration access token

A user connecting to a LiveKit room requires an access token. Access tokens (JWT) encode the user's identity and the room permissions they've been granted. You can generate a token with our CLI:

livekit-cli create-token
--api-key devkey --api-secret secret
--join --room my-first-room --identity user1
--valid-for 24h

@wjbeckett
Copy link

The devkey and secret are placed in the JWT service env file and the livekit yaml. This secret we generate and put in the vars file is for JWT to communicate with the livekit server.

The JWT service then handles the token generation between Matrix (MAS) and Livekit.

Or that's how I believe it works.

@luixxiul luixxiul added the suggestion This issue is a feature request label Nov 1, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
suggestion This issue is a feature request
Projects
None yet
Development

No branches or pull requests