[HN Gopher] Native Matrix VoIP with Element Call
       ___________________________________________________________________
        
       Native Matrix VoIP with Element Call
        
       Author : Sami_Lehtinen
       Score  : 353 points
       Date   : 2022-03-05 15:06 UTC (7 hours ago)
        
 (HTM) web link (element.io)
 (TXT) w3m dump (element.io)
        
       | youerbt wrote:
       | > And, the big one _drum roll, please_... we will be integrating
       | this into Element so you can have voice and video rooms, and hold
       | group video calls inside the Element app natively over Matrix.
       | 
       | I'd love to replace my teamspeak server with this. Discord is
       | tempting, but I'd rather host it myself.
        
         | Taywee wrote:
         | That's the exciting bit for me. I love Matrix, but video and
         | voice being primarily "call" based is painful, when what I
         | really want is a dynamic voice/video room that people can
         | quickly and easily drop in and out of, like in Discord.
        
           | Arathorn wrote:
           | MSC3401 specifically provides for this UX, with the
           | `m.intent` field used when you instantiate an `m.call` within
           | a room (https://github.com/matrix-org/matrix-spec-
           | proposals/blob/mat...):
           | 
           | * `m.intent` to describe the intended UX for handling the
           | call. One of:
           | 
           | 1. `m.ring` if the call is meant to cause the room
           | participants devices to ring (e.g. 1:1 call or group call)
           | 
           | 2. `m.prompt` is the call should be presented as a conference
           | call which users in the room are prompted to connect to
           | 
           | 3. `m.room` if the call should be presented as a voice/video
           | channel in which the user is immediately immersed on
           | selecting the room.
           | 
           | Element Call implements `m.room` effectively (in that you get
           | slung directly into the call once you click on the link).
           | Once we integrate this into Element itself, then the plan is
           | to support all three different intent types: `m.ring` for
           | "group calls", `m.prompt` for "conferences" and `m.room` for
           | discord-style voice/video rooms.
        
             | panick21_ wrote:
             | So will the room have a setting to make a voice video only
             | room, a mixed room or a chat only room?
             | 
             | I assume m.ring would not be needed if its a something like
             | a Teamspeak room.
        
               | Arathorn wrote:
               | It wouldn't be a setting; the intent would be set based
               | on how you initiated the call. If you hit a big 'call
               | Alice and Bob!' button you'd get a call which rings them
               | both; if you hit a 'start a conference' you'd get a
               | Teams/Zoom-style conference; if you hit 'create a
               | voice/video room' button you'd get a Discord-style
               | voice/video room.
               | 
               | (N.B. we might not bother with the group-calling option
               | in Element; haven't decided yet - but Matrix needs to
               | support it for folks who want those semantics :)
        
               | Taywee wrote:
               | Thanks for the extra info. I'm really looking forward to
               | the fruition of this, and will happily be trying out this
               | current Element Call beta quite soon.
        
               | kitkat_new wrote:
               | you can choose one of the three, and if you choose option
               | 3, the room will become a voice video only room (this is
               | how I understand it).
               | 
               | So m.ring existing isn't a problem.
               | 
               | How it is exposed in the UI, is a completely different
               | thing, although I don't think it would be impossible to
               | make a button that creates a room with a m.room call aka
               | voice/video room
        
         | jeroenhd wrote:
         | For what it's worth, Matrix / Element already have something
         | like this with the built-in Jitsi integration in (some)
         | clients. The UX isn't great right now in my opinion (which will
         | hopefully change when this project gets merged into Element)
         | but if all you want is rooms, text and voice, then you're
         | already set with the current setup.
         | 
         | You can self-host a Jitsi instance and use it in Matrix rooms
         | as an integration. Depending on your teamspeak setup you can
         | enable guest access to your server, enable registration for
         | server user accounts (or manually register it for specific
         | members), or only let people with existing accounts from other
         | servers join in (their own, matrix.org ones, you name it). You
         | might also need to tweak the ACLs a bit, but other than that
         | you'll have all the core features Teamspeak and friends
         | provide.
         | 
         | I think the biggest difference between the existing Matrix
         | group call system and what's been announced here today is the
         | new UI/UX, and the fact that the native group call API and
         | reference implementation are nearing completion. Both are great
         | news, but don't necessarily add new user-facing features to the
         | Matrix ecosystem.
        
           | GeckoEidechse wrote:
           | Yes but the current UX for that is terrible. With the
           | proposed MSC linked in the blog post, Matrix will
           | additionally gain Teamspeak/Discord like voice channels [1].
           | 
           | With this we could finally have a proper Teamspeak/Mumble
           | bridge for voice that gets properly represented on the Matrix
           | side which is amazing :D
           | 
           | Also kinda funny that Teamspeak only recently started using
           | Matrix for their global chat feature [2].
           | 
           | Maybe now after the gitter acquisition, Element should
           | consider acquiring a certain voice-focused company ;)
           | 
           | **
           | 
           | [1] https://github.com/matrix-org/matrix-spec-
           | proposals/blob/mat...
           | 
           | [2] https://community.teamspeak.com/t/teamspeak-5-beta-bug-
           | repor...
        
           | georgyo wrote:
           | The UX is more than terrible, it is basically unusable.
           | 
           | The jitsi stuff is bolted on, you join a link and your user
           | name does not come with you.
           | 
           | No discoverablity. Does this channel already have a jitsi
           | room attached, no way to know. I see a link to a jitsi room,
           | is there anyone inside? No way to know.
           | 
           | Recommending this as a alternative to TeamSpeak, mumble, or
           | discord today is a way to get people to try a horrible
           | experience and then say Matrix sucks forever.
           | 
           | Only when this call stuff merges will Matrix start being
           | viable for those communities.
        
             | anticensor wrote:
             | TeamSpeak 5 actually uses Matrix under the hood, with a
             | proprietary voice protocol and TeamSpeak-specific room
             | version.
        
         | chayleaf wrote:
         | Mumble works great for me in the meantime
        
           | Gigachad wrote:
           | Mumble doesn't really work on mobile making it not usable for
           | most users
        
       | [deleted]
        
       | panick21_ wrote:
       | This is really cool. I really feel like this ecosystem is hitting
       | its stride.
       | 
       | The list of upcoming features is long and sometimes I don't
       | understand how they can have so many things going on at once.
       | 
       | Features tend to take a few years to mature, but that is not a
       | bad thing.
       | 
       | I will be setting up my own server shortly, something that I have
       | been thinking about for a while and maybe try to develop
       | something.
       | 
       | Congrats to the team.
       | 
       | Question:
       | 
       | The OpenID part, would it not be cool if Matrx would offer
       | something like a federated SSO experience? So that on other
       | webpages you could use your matrix login instead of Github/Google
       | and co. Hosting that server yourself would be fantastic.
       | 
       | There are of course some issues with Attribute retrieval if user
       | can host these servers themselves.
        
         | Arathorn wrote:
         | > The OpenID part, would it not be cool if Matrix would offer
         | something like a federated SSO experience?
         | 
         | Yes, hopefully we'll be able to use the OIDC server bundled
         | with your Matrix server to auth users in general if wanted (or
         | alternatively you can of course point at an existing OIDC
         | server).
        
       | Godel_unicode wrote:
       | Has anyone looked into their implementation of E2EE for calls? My
       | naive assumption is they are brokering some kind of shared key
       | exchange as opposed to requiring everyone to send an individually
       | encrypted stream to everyone else.
        
         | jfkimmes wrote:
         | The post says there is no E2EE at the moment. They're probably
         | talking about signalling, since with the current implementation
         | of full mesh you get E2EE 'for free' in WebRTC.
         | 
         | Also the post mentions:
         | https://2021.commcon.xyz/talks/extending-matrix-s-e2ee-calls...
        
           | Arathorn wrote:
           | So in the initial beta we haven't turned on E2EE, purely
           | because it will make it way harder to debug any problems
           | which surface.
           | 
           | However, at this rate, things are looking pretty stable and
           | i'd expect us to enable it in the next few weeks. It uses
           | normal Matrix E2EE, which means a Double Ratchet between the
           | pairs of devices participating in a given conversation, which
           | is then used to secure the signalling which is used to set up
           | the calls between the devices. The call media is transport-
           | layer encrypted via DTLS and SRTP, so as long as the
           | signalling with the DTLS fingerprints is secured by Matrix
           | E2EE, the whole call fabric will be E2EE.
           | 
           | https://github.com/matrix-org/matrix-js-sdk/pull/2002 is the
           | PR we actually need to merge in order to enable E2EE on it,
           | ftr.
        
           | arianvanp wrote:
           | Mesh doesn't scale for large conference calls though. Usually
           | some SFU needs to be in play. But that's only possible if you
           | have Insertable Streams support which for now only Chrome has
        
             | Arathorn wrote:
             | Safari DP 141 actually released RTCRtpScriptTransform
             | support 2 days ago (thanks to
             | https://trac.webkit.org/changeset/270107/webkit/). But
             | we're waiting eagerly for Firefox to add it in
             | https://bugzilla.mozilla.org/show_bug.cgi?id=1631263.
             | 
             | Hopefully by the time we've sorted out the SFU component,
             | all the browsers will have RTCRtpScriptTransform
             | implemented and so we'll get good cross-platform E2EE for
             | larger calls (rather than it being limited to Chrome +
             | Safari + Desktop)
        
       | giancarlostoro wrote:
       | My only concern is does this expose your IP to participants? This
       | is one benefit of Discord Voice channels vs Discord Calls (which
       | are end to end but expose your IP to everyone on the call, and
       | theirs to you, so much so, you just open a console log and you
       | can see them all...).
        
         | Arathorn wrote:
         | Currently yes, but it's trivial to fix and we'll do so on
         | Monday - see https://news.ycombinator.com/item?id=30570436
        
           | mattmerr wrote:
           | Sounds like hiding IP is going to be opt-in? I'm not sure
           | what the implications are of TURN but what would be the
           | downside of making IP-hiding the default?
        
             | Arathorn wrote:
             | it would increase latency badly (the turn server for the
             | call.element.io instance is in the UK, so all traffic would
             | bounce through it, often unnecessarily), and it would cost
             | us loads on bandwidth as a result. It also means that the
             | turn server sees all the IPs and metadata of who is calling
             | who, which may not be an improvement if you trust your
             | caller more than your server admins!
             | 
             | For instance, two users on the same LAN calling each other
             | would end up bounced via the UK, which is a bit unfortunate
             | if they are in Australia.
             | 
             | The solution is really to switch to using SFUs everywhere,
             | which then solves both firewall traversal, scalability and
             | privacy (assuming you're happy for your SFU to know your IP
             | - but if you're happy for your TURN to know it, then it's
             | probably fine).
        
       | puyoxyz wrote:
       | Why is this an Element thing and not a Matrix thing?
        
         | Arathorn wrote:
         | The protocol, spec (MSC3401) and underlying client heavy
         | lifting (matrix-js-sdk) are all Matrix; contributed by a mix of
         | Element employees (Robert, me, Dave) and community contribs
         | (Simon B). The app skin itself on top is Element, given most of
         | the work and the original idea is from Element folks - same
         | reason that Element itself is a product from Element-the-
         | company even though 95% of the code is underlying Matrix
         | projects. The Matrix Foundation itself is a non-profit to look
         | after all the Matrix protocol and reference implementations but
         | doesn't ship user-facing products, just as W3C and Linux
         | Foundation don't.
        
         | [deleted]
        
       | ve5eta wrote:
       | Impressive
        
       | abnercoimbre wrote:
       | I run a hybrid conference [0] with a physical track and an online
       | track. All tracks communicate using Matrix.
       | 
       | Element Call sounds like something I should integrate into the
       | conference experience, but logistics and audience size is a
       | concern. We'll be entering 1k+ territory this year.
       | 
       | [0] https://handmade-seattle.com
        
         | Arathorn wrote:
         | please wait until we're out of beta! :)
        
       | 2Gkashmiri wrote:
       | this does not seem to have changeable room addresses right now
       | like jitsi.
       | 
       | we use jitsi common url to have weekly meetings.
       | meet.jit.si/meeting2. everyone knows the url and time. we just
       | join and talk. this is a nice concept
        
         | jeroenhd wrote:
         | That seems to be available, though?
         | 
         | https://call.element.io/meetingwiththegang opens a meeting for
         | a room named "meetingwiththegang".
         | 
         | Ideally, you'd want to use such a system with accounts so you
         | can apply some kind of ACL, but if you want to use randomly
         | generated room names for secret links then everything you need
         | is there already.
         | 
         | Looks like you can't change the room name after starting the
         | call, but you can start a new one at the new address if you
         | want to change the name.
        
         | kitkat_new wrote:
         | I think it does in theory (Matrix supports changing room
         | addresses), however what is the benefit of this as opposed to
         | using the same address for all meetings?
        
           | 3np wrote:
           | The person you're replying to wants to set it to something
           | custom, to make it memorable and meaningful.
        
             | Arathorn wrote:
             | We have this today. https://call.element.io/whateveryouwant
             | does what you'd expect.
        
           | jacobmischka wrote:
           | I think that's what they want, I believe by "changeable" they
           | meant "customizable"?
        
       | robobro wrote:
       | Did anyone else try to install this? It just refreshes non stop
       | for me when I access its domain.
        
         | Arathorn wrote:
         | works fine for me. if the app had launched i'd ask you to
         | submit feedback (which ends up in our bugtracker). as it
         | hasn't, can you file a bug on github.com/vector-im/element-
         | call/issues with a copy of the javascript console so we can see
         | what's breaking? you might also want to disable any weird
         | browser extensions to see if that's to blame.
        
           | robobro wrote:
           | sure, appreciate the comment! :)
           | 
           | The main instance @ call.element.io also doesn't seem to work
           | for me, but I chalked that up to (assumed) heavy server load.
        
       | lijogdfljk wrote:
       | A bit off topic, but anyone know if Threads are something Matrix
       | currently supports, or ever wants to support?
       | 
       | My family uses Signal for _a lot_, likely way more than we
       | should, and i feel like we'd benefit from threads immensely.
       | 
       | Maybe i should toy with making my own Matrix client or something,
       | heh.
       | 
       |  _edit_ : https://github.com/vector-im/element-web/issues/2349
       | looks like it might exist in some beta form. Depending on the
       | client heh
        
         | kevincox wrote:
         | Threads are in beta on the Element clients. IIUC the spec isn't
         | quite solidified (they are waiting for more clients to
         | experiment first).
        
         | jeroenhd wrote:
         | Threads are supported on Matrix as of a week or two ago.
         | They're no longer in beta as far as I can tell. I don't know
         | for sure how well alternative clients support them, but desktop
         | and mobile versions of Element do threads just fine.
         | 
         | Alternatives (Fluffychat, for example) are usually a while
         | behind Element because of manpower. For example, native polls
         | are in Element but not in Fluffychat yet. So, if you want to
         | risk the transition, best to recommend the official clients
         | first.
         | 
         | That said, I don't know how well threads will actually work in
         | a family context. I like them as a concept, but outside Google
         | Chat (where every message in a room is a response to or the
         | start of a thread) I haven't seen them get picked up naturally.
        
         | Arathorn wrote:
         | yup, it's currently in testing on element web/ios/android and
         | you can play with it in beta.
        
       | jeroenhd wrote:
       | I wonder if this setup can be leveraged to create a Twitch-like
       | streaming solution based on Matrix. The group call setup is
       | clearly not built for such a use case, but if you only stream to
       | a small audience (say, people paying for a certain perk on
       | Patreon?) you could probably use this quite easily.
       | 
       | The client would need better support for alternative inputs, of
       | course, such as the RTMP suggestion found on the Github issues
       | page, but it can and should work.
       | 
       | What I'm also curious about is how this fits in with the
       | experiments on the peer-to-peer mesh system (running a homeserver
       | on every client). Forwarding video across a web of clients would
       | become bandwidth and CPU intensive real fast and the added
       | latency would be non-negligible.
       | 
       | I'll be watching this play out with great interest, that's for
       | sure.
        
         | Arathorn wrote:
         | > I wonder if this setup can be leveraged to create a Twitch-
         | like streaming solution based on Matrix.
         | 
         | Yes, we've built it with this in mind. There are three possible
         | approaches:
         | 
         | * You can broadcast a headless client via HLS or RTMP, similar
         | to how Jibri works for Jitsi, and how we broadcast FOSDEM
         | (https://matrix.org/blog/2021/02/15/how-we-hosted-
         | fosdem-2021...). Basically you run a headless Chrome against a
         | virtual X server and pipe X's framebuffer into ffmpeg. It's a
         | pretty blunt approach and obviously uses a lot of serverside
         | resources, but ensures that the broadcasted stream is
         | completely faithful given that it's literally a recording of
         | what a client would be seeing.
         | 
         | * Alternatively, you could do the same approach, but pipe it
         | into a WebRTC broadcasting platform rather than
         | HLS/RTMP/RTSP/DASH. This could give much lower latency, but
         | more bandwidth on the server given you're effectively setting
         | up a 1:1 VoIP call with each viewer, and you'll be unlikely to
         | be able to use CDNs (unless we end up in some crazy world where
         | freeform multicast on the internet finally comes to pass thanks
         | to CDNs fanning out your RTP packets for you :P)
         | 
         | * Finally, you could composite the streams together serverside
         | using an MSC3401 compliant MCU and broadcast the result via one
         | or other approach. This might not be quite as high fidelity as
         | running a 'real' Element Call instance serverside, but could be
         | way more efficient in terms of resources, and could prove
         | perfectly adequate. The only catch is that we haven't bolted
         | MSC3401 onto any MCUs yet. (Clearly we should get back in touch
         | with our friends at FreeSWITCH / Signalwire :D)
         | 
         | > What I'm also curious about is how this fits in with the
         | experiments on the peer-to-peer mesh system (running a
         | homeserver on every client). Forwarding video across a web of
         | clients would become bandwidth and CPU intensive real fast and
         | the added latency would be non-negligible.
         | 
         | MSC3401 is pretty much orthogonal to P2P Matrix. The way it
         | works is that it'll use whatever conferencing nodes ('foci')
         | are advertised in the room to mix together the calls in a
         | decentralised fashion. If there are none (as per today) then it
         | just goes full mesh. If there is one, then everyone will
         | converge on it. If there are two, then folks will pick the one
         | with the lowest latency. But critically, it doesn't matter
         | whether the clients are talking to a serverside homeserver or
         | are running P2P Matrix. Finally, the foci could run either
         | serverside or clientside (much as skype supernodes were
         | effectively clientside foci), but we need to get serverside
         | foci working first before we add clientside ones in for the P2P
         | crew ;)
        
           | anticensor wrote:
           | > If there are two, then folks will pick the one with the
           | lowest latency.
           | 
           | No it needs to be deterministic. "Just picking the lowest
           | latency node" would result in sync failures i.e. not
           | everybody hearing the same thing.
        
       | encryptluks2 wrote:
       | > We're also working with the Tauri core team to provide cross-
       | platform lightweight desktop apps as soon as possible!
       | 
       | How about a lightweight cross-platform Matrix client that doesn't
       | rely on Electron?
        
         | Jack5500 wrote:
         | Well, it doesn't use Electron, it uses tauri, which doesn't
         | bundle chrome but uses the native browser and is therefor much
         | smaller, faster und more lightweight.
        
         | GeckoEidechse wrote:
         | Why not just use FluffyChat?
         | 
         | https://fluffychat.im/
        
           | nani8ot wrote:
           | I personally can't stand how big the chat bubbles in
           | FluffyChat 1.0+ are. They were always big but now they are
           | huge. I would have preferred it if they got smaller...
           | 
           | But with Element now shipping chat bubbles as an configurable
           | option, I'll stay with that. For me, the new chat bubbles
           | size is perfect.
           | 
           | Aside of that, I'm generally really fond of FluffyChat, they
           | are doing a great job!
        
           | DoItToMe81 wrote:
           | I used Fluffychat for a few months. I found its performance
           | was rather lacking. It had slowdown issues and general
           | problems that I didn't find with other clients.
        
         | Arathorn wrote:
         | Tauri + Electron (or Hydrogen) provides a lightweight cross-
         | platform Matrix client that doesn't rely on Electron...
         | 
         | Meanwhile, Nheko, NeoChat, Fractal and others provide very
         | usable lightweight native cross-platform Matrix clients too.
         | Element is also working on its own experiments (TBA) based on
         | matrix-rust-sdk.
        
           | caslon wrote:
           | Calling Fractal usable is maybe a bit of a stretch, but there
           | are a lot of really good Matrix clients now!
        
             | JCWasmx86 wrote:
             | Fractal-Next is really usable for me at least. (The times
             | I've tried it) The only thing that is hindering it for me
             | is the missing SSO-Support, but as soon as my MR is merged,
             | it has SSO-Support
        
             | Arathorn wrote:
             | Fractal-next is looking very usable (thanks to leveraging
             | matrix-rust-sdk as its engine), tbh.
        
           | karmanyaahm wrote:
           | i think you meant Tauri + Element
        
             | Arathorn wrote:
             | bah, so i did. doh
        
         | caslon wrote:
         | There are already like a dozen Matrix clients that don't use
         | Electron. It doesn't take much effort to go to the Clients list
         | and pick one out.
        
           | Gigachad wrote:
           | The problem is the group of users who have a problem with
           | Electron also tend to have a problem with a billion other
           | things (the size of the chat bubbles as another user
           | commented here) so they end up never being satisfied with any
           | client and any developer who tries to cater to them will be
           | flooded with a wave of complaints about how the animation
           | speed should be configurable.
        
       | jpbernius wrote:
       | There is some cool development going on with Matrix recently!
       | Threaded messaging first and now group calls. I am especially
       | excited for Safari Support as this is my personal pain-point with
       | Jitsi Meet. Very excited to see this evolve into the Element
       | client.
        
       | jiffygist wrote:
       | Just wondering, can I have fullband stereo sound to play music?
        
         | Arathorn wrote:
         | The media quality that you hear is entirely up to the sender's
         | WebRTC implementation. If you're calling another Element Call
         | user, we currently use the default audio constraints when
         | capturing audio: https://github.com/matrix-org/matrix-js-
         | sdk/blob/96ba061732b... - but if you wanted stereo, you could
         | put { channelCount: 2, sampleRate: 48000 } or whatever into
         | that line to achieve it.
         | 
         | I'll file a bug to make this configurable.
         | 
         | EDIT: https://github.com/vector-im/element-call/issues/249
        
       | traspler wrote:
       | Do the Homeservers act as Signaling, STUN and TURN servers or are
       | there additional components necessary? Will the SFU part in the
       | future also be part of Synapse or will/are these things split?
        
         | qqcwerqwect wrote:
         | As I understand it, signalling will happen over the matrix
         | protocol. as matrix/element already had a 1:1 voice chat,
         | synapse integrates well with coturn, so you typically run
         | coturn along side synapse.
        
         | Arathorn wrote:
         | The homeservers act as signalling servers. For STUN/TURN you
         | need to run a separate TURN server (typically coturn), as per
         | https://matrix-org.github.io/synapse/latest/turn-howto.html.
         | 
         | The future SFU will similarly be split from the homeserver,
         | with the initial implementation based on either Signal-Calling-
         | Service, ionsfu or mediasoup (we're evaluating all three). Of
         | course, the point of being standards based is that you'll be
         | able to mix & match SFUs and MCUs from other vendors.
         | 
         | You can find out more about the architecture from my talk at
         | Commcon (https://2021.commcon.xyz/talks/extending-matrix-
         | s-e2ee-calls...) - or Robert's talk at FOSDEM:
         | https://fosdem.org/2022/schedule/event/matrix_metaverse/
        
           | traspler wrote:
           | Thanks a lot for answering in detail!
        
           | anticensor wrote:
           | For court admissible conferencing, routing everything through
           | the persistent room state is almost a hard requirement.
        
         | georgyo wrote:
         | Only signalling. Matrix users coturn for STUN and TURN.
        
       | encryptluks2 wrote:
       | I feel if XMPP just had some better tools this push for Matrix
       | would be unnecessary.
        
         | kitkat_new wrote:
         | please read the article (and linked MSC [0]) first and check
         | out how this decentralized(!) conferencing proposal works.
         | 
         | I don't think tools that implement this exist in the XMPP
         | ecosystem at all.
         | 
         | [0] https://github.com/matrix-org/matrix-spec-
         | proposals/blob/mat...
        
         | pigeons wrote:
         | Yeah, I read Matrix's reasoning for not just improving XMPP and
         | instead starting a new protocol, and I gave them a few years,
         | and have to use matrix quite a bit and am consistently
         | convinced it was the wrong choice and XMPP is the way to go.
        
         | GeckoEidechse wrote:
         | https://matrix.org/faq/#what-is-the-difference-between-matri...
        
           | zaik wrote:
           | If you read https://github.com/matrix-org/matrix-spec-
           | proposals/blob/mat... it becomes apparent that the
           | 'eventually consistent' part of Matrix is more of a hindrance
           | in this case.
           | 
           | Also 'the more federation and interoperability the better' is
           | kind of contradictory to constantly reinventing extisting
           | Internet Standards. I suspect VoIP over Matrix is not
           | compatible with SIP or XMPP A/V calls and looking at current
           | state of the matrix.org XMPP chat implementation they
           | probably will never be.
        
         | Gigachad wrote:
         | If IRC had some better tools then the push for XMPP would be
         | unnecessary. In fact, why didn't we just build IM on top of
         | email?
         | 
         | Turns out its much much easier to start from scratch with the
         | right ideas than to transform an existing protocol in to
         | something usable and convince everyone else and update all
         | software to match.
         | 
         | "The market" has decided that Matrix works well and XMPP
         | doesn't. If it made sense to fix XMPP then someone would have
         | done it and we would all be using that.
        
         | zaik wrote:
         | As of recently, Dino already can do video conferences based on
         | XMPP and other clients are working on it as well. There is also
         | a bidirectional SIP/XMPP bridge, so it integrates with other
         | existing Internet Standards: https://sip.cheogram.com/
        
       | mawise wrote:
       | > Element Call is built entirely on Matrix: it doesn't need any
       | additional servers to get going. You can run it against your
       | existing Matrix homeserver to provide complete self-
       | sovereignty...
       | 
       | > In the near future, we will support using the app with any
       | homeserver
       | 
       | I really hope this isn't an indicator how how Element the company
       | will be focusing more on their paid offerings to the exclusion of
       | supporting private homeservers. I've recently been experimenting
       | with running a Matrix homeserver on a Raspberry PI in my basement
       | --I'm excited about actual self-sovereignty in messaging but it
       | isn't quite to the point where I can tell my family to rely on it
       | instead.
        
         | jfkimmes wrote:
         | I feel like this is a misunderstanding. You can already self
         | host 'Element Call' and point that to your own homeserver. The
         | passage you're referencing just refers to their hosted Element
         | Call client. I'm pretty sure they're currently trying to move
         | away from credentials-based login on 3rd-party clients to
         | token-based authentication. I would guess they open up their
         | hosted client when they finished implementing this new
         | authentication scheme to avoid the doubled effort and to
         | discourage using your homeserver credentials on "random"
         | clients.
        
           | Arathorn wrote:
           | Yup, the grandparent post is a misunderstanding. Basically,
           | we want Element Call to work with a single click to a URL
           | without requiring any account - much as Jitsi and similar do.
           | Therefore it needs to pick a default homeserver. Currently it
           | doesn't play well with existing Matrix accounts (as it will
           | sync in loads of chatrooms which are irrelevant when you just
           | want to do a call), so for expedience we just create accounts
           | on its default homeserver to get going.
           | 
           | However, we're in the process of moving Matrix over to OIDC
           | for auth (as per https://matrix.org/blog/2021/12/22/the-mega-
           | matrix-holiday-s...), at which point apps like Element Call
           | should be able to easily hook into your existing account on
           | your own homeserver using your existing server auth. In other
           | words, the server will auth you, not the client. Combined
           | with Sliding Sync (aka Sync v3)
           | https://matrix.org/blog/2021/12/22/the-mega-matrix-
           | holiday-s... this will then let you securely and efficiently
           | use your existing Matrix account with apps like Element Call
           | without it all getting bogged down with your existing
           | chatrooms (or needlessly giving Element Call access to
           | conversations it shouldn't care about).
           | 
           | Finally, this is beta: the auth/reg stuff is very much
           | placeholder - for instance, it doesn't even expose password
           | reset, given the upcoming shift to OIDC.
        
             | danShumway wrote:
             | > using your existing server auth
             | 
             | Complete sidenote, but just to expand on the above, the
             | OIDC work is particularly exciting because (at least my
             | understanding is) it opens the door for letting people use
             | a single Matrix account for a lot of different "stuff" on
             | top of Matrix.
             | 
             | There have been some interesting conversations and demos
             | I've seen about using Matrix rooms to help with P2P sync
             | for apps, and there are already bots on Matrix that use
             | Matrix rooms for notifications so you don't need to send
             | emails. But setting that stuff up is kind of challenging if
             | you don't want to make a dedicated new user for each app or
             | grant access to your account -- and (again, assuming my
             | understanding is correct) I vaguely suspect that we might
             | start to see a lot more 3rd-party apps built to integrate
             | with Matrix once it's easier to point someone at a webapp
             | and say, "just log in with your Matrix account, and it'll
             | only have access to one room that's specific to this app."
             | 
             | So imagine potentially having a collaborative app that's
             | hyper-focused on one task, like a collaborative D&D
             | messaging platform or some crud. And in the backend,
             | everyone using that app uses their regular Matrix account,
             | and under the hood it's just sending messages to a shared
             | room -- and then as a developer you don't need to worry
             | about handling a bunch of encryption and user accounts and
             | all of that stuff, you might not even need a backend at
             | all.
        
               | dane-pgp wrote:
               | > you might not even need a backend at all.
               | 
               | On the basis that "the best code is no code", this could
               | revolutionise app architecture. Imagine if instead of
               | using blockchains, Web3 apps were backed by Matrix
               | servers.
        
             | mawise wrote:
             | I guess I still don't understand it. (And my apologies for
             | coming across like I was trying to pick a fight)
             | 
             | What does it mean that I can currently use it with my
             | existing homeserver? The architectures for some of these
             | federated systems can be difficult to understand, I feel
             | like I didn't really understand what _Matrix_ was until I
             | tried running my own homeserver.
        
               | jfkimmes wrote:
               | Federated systems tend to have different client and
               | server implementations that can work in all combinations
               | (as long as both are spec compliant).
               | 
               | The confusing part comes into play when the client
               | implementation is a web app that you can use to log in to
               | _any_ server hosted anywhere. Because of how centralized
               | services work, we are used to a paradigm where the
               | website you visit hosts its own backend - you cannot
               | choose. With these federated systems, on the other hand,
               | you can go to website element.foo.com and log in at
               | matrix.bar.com.
               | 
               | The blog post was saying they limited the option to log
               | into your homeserver at matrix.bar.com (because of the
               | reasons outlined above). This does not, however, stop you
               | from hosting their (FOSS) app at call.bar.com and
               | pointing it to your homeserver at matrix.bar.com
        
       | soupbowl wrote:
       | I am excited about this, I hope it is stable and secure...
        
       | Arathorn wrote:
       | From my perspective, the really exciting thing about this that it
       | works equally well in mobile web browsers as well as desktop web
       | - clicking on a link on Mobile Safari should Do The Right Thing
       | without having to install anything.
       | 
       | Moreover, because it's built on Matrix, MSC3401
       | (https://github.com/matrix-org/matrix-doc/blob/matthew/group-...)
       | means that we'll finally have decentralised cascading video/voice
       | conferences once the SFU (selective forwarding unit) component is
       | added into the mix. So, for instance, users on the same
       | homeserver will get their video feeds relayed locally with
       | minimal latency... and then users on another remote homeserver
       | will also get mixed locally with minimal latency, trunking the
       | two together. If the link dies or one homeserver dies, the
       | conference will keep going - i.e. precisely the same semantics as
       | normal Matrix.
        
         | jfkimmes wrote:
         | Could you give some insights on how you estimate the amount of
         | effort of making Element Call competitive, performance-wise,
         | with say Discord. I heard that Discord threw a lot of time and
         | money at optimizing voice in their product. Can you just jump
         | in and realistically compete?
         | 
         | There are a lot of performance/latency/sound quality
         | comparisons online of Mumble vs TeamSpeak vs Discord and
         | recently Jitsi vs MS Teams vs Zoom, etc. I feel like this is a
         | problem-space that can be optimized to an arbitrarily deep
         | extent. Just two examples that come to mind are SFU
         | performance/efficiency and noise reduction, two things where
         | e.g Jitsi notoriously lags behind Zoom.
        
           | Arathorn wrote:
           | The competitive gap with Discord in terms of media quality is
           | probably something like:
           | 
           | * Need a low-latency SFU. This should be very doable; not
           | only are there a lot of good FOSS SFUs to build on top of
           | these days, the history of the Matrix team is actually that
           | we built VoIP stacks fulltime before we shifted focus to
           | Matrix, and we've built MCUs and media servers of all
           | flavours in the past. MSC3401 should also give us a
           | competitive edge given latency will be automagically
           | minimised by using the physically closest decentralised SFU,
           | thus letting anyone bring their SFU to the party.
           | 
           | * Needs a SFU with good rate control (and/or FEC). This is
           | probably the single most important thing to get right in
           | terms of quality. Signal wrote up a good overview of why:
           | https://signal.org/blog/how-to-build-encrypted-group-calls/
           | 
           | * Excellent noise cancellation (and background noise
           | elimination, microphone scratch noise elimination etc).
           | Ideally you need something like https://krisp.ai/ or https://
           | workspaceupdates.googleblog.com/2021/06/background-n... in
           | the mix - but doing this in an E2EE-friendly and privacy
           | preserving manner is Hard. However, just like we solved E2EE
           | full text search by doing it clientside and making the
           | indexes gossipable between your clients
           | (https://github.com/matrix-org/seshat), we'll have a go at
           | doing something similar for this problem too.
           | 
           | * Excellent automatic gain control. The importance of
           | normalising/compressing everyone's audio so they're
           | equivalent loudness is really important.
           | 
           | We're also in the process of adding in spatial audio (unsure
           | if Discord has that) which should help a tonne with
           | distinguishing the different audio feeds.
           | 
           | We can probably also be more bullish about supporting new
           | audio codecs like Lyra.
           | 
           | EDIT: oh, the other obvious thing is echo cancellation - but
           | we're currently at the mercy of the browser's WebRTC stack
           | for that. However, we could ship a tweaked WebRTC in Element
           | Desktop (or other native Matrix clients) in future to do
           | better than plain old WebRTC.
        
             | anticensor wrote:
             | Discord voice is actually a server muxing MCU emulating an
             | SFU.
        
             | dopa42365 wrote:
             | Something wrong with simply using RNNoise?
        
               | Arathorn wrote:
               | mmm, https://github.com/jitsi/rnnoise-wasm looks like it
               | might help. wonder if jitsi actually uses it.
        
               | Cu3PO42 wrote:
               | The repository is under the Jitsi organization, so I'd
               | say chances of them using it or at least planning to use
               | it are quite high.
        
             | jfkimmes wrote:
             | Very insightful! I'll have a look at the links. Thanks for
             | answering.
        
             | spockz wrote:
             | Nice elaborate answer. Discord has noise cancellation by
             | krisp. I believe it is offline only. That would be good
             | enough I suppose. But I'm not sure whether it can be loaded
             | in webasm so it works in the browser. (To meet the cross
             | platform needs of Matrix/Element.)
        
         | GeckoEidechse wrote:
         | Maybe a bit off-topic but will upcoming Matrix Live also be
         | hosted via Matrix VoIP now? ^^
         | 
         | (At least the smaller ones like interviews where the number of
         | participants is <=8 until compatibility with SFU is done)
        
           | Arathorn wrote:
           | sure! :D
        
       | stevenicr wrote:
       | great post, animation helps a bunch too.
       | 
       | wondering if ip addys are exposed to the other users like with
       | webrtc and if so, could we force conencts to be only through
       | coturn to hide the ips?
       | 
       | Also wonder if there will be a warning for such, especially of
       | encryption is turned on - some may think they are truly
       | anonymous, and where ips are exposed of course that's not true.
       | 
       | Also wonder about moderation, hopefully this does not become a
       | target for the sickening trolls soon - but moderation needs will
       | be coming, so who gets the ip logs to consider blocking?
       | homeserver runners?
       | 
       | I expect the future will need whitelists/blocklists subscription
       | options for clients at some point.
        
         | Arathorn wrote:
         | Currently we don't force TURN, so in practice this means that
         | voice packets go direct between the clients if possible, and so
         | the IP addresses of the clients are necessarily exposed to each
         | other.
         | 
         | However, this is utterly trivial to fix: matrix-js-sdk already
         | exposes https://github.com/matrix-org/matrix-js-
         | sdk/blob/96ba061732b... and we simply haven't exposed it as a
         | setting in Element Call yet. I've filed a bug for it at
         | https://github.com/vector-im/element-call/issues/251 - thanks
         | for bringing it up!
         | 
         | In terms of moderation: this is no different to moderation in
         | Matrix as a whole, where we're already busy working on shared
         | greylists (MSC2313 and friends) -
         | https://matrix.org/blog/2020/10/19/combating-abuse-in-matrix...
         | has more details at the end.
        
       ___________________________________________________________________
       (page generated 2022-03-05 23:00 UTC)