Skip to content

MSC4196: Voice and video calling application for MatrixRTC - #4196

Open
hughns wants to merge 31 commits into
mainfrom
hughns/matrixrtc-m-call
Open

MSC4196: Voice and video calling application for MatrixRTC#4196
hughns wants to merge 31 commits into
mainfrom
hughns/matrixrtc-m-call

Conversation

@hughns

@hughns hughns commented Sep 19, 2024

Copy link
Copy Markdown
Member

@hughns hughns changed the title Create xxxx-matrixrtc-m-call.md MSC4196: MatrixRTC voice and video conferencing application m.call Sep 19, 2024
@turt2live turt2live added A-VOIP Any VoIP or MatrixRTC related proposals proposal A matrix spec change proposal. Process state. A-Client Server Client-Server API kind:core MSC which is critical to the protocol's success needs-implementation This MSC does not have a qualifying implementation for the SCT to review. The MSC cannot enter FCP. labels Sep 25, 2024
@ara4n ara4n added the matrix-2.0 Required for Matrix 2.0 (note: do not rename - used in reports/links) label Sep 5, 2025
@github-project-automation github-project-automation Bot moved this to Tracking for review in Spec Core Team Workflow Sep 5, 2025
@fkwp fkwp changed the title MSC4196: MatrixRTC voice and video conferencing application m.call MSC4196: MatrixRTC voice and video calling application m.call Jan 12, 2026
Comment thread proposals/4196-matrixrtc-m-call.md Outdated
Comment thread proposals/4196-matrixrtc-m-call.md Outdated
Comment thread proposals/4196-matrixrtc-m-call.md Outdated
Comment thread proposals/4196-matrixrtc-m-call.md Outdated
Comment thread proposals/4196-matrixrtc-m-call.md Outdated

@gewitternacht gewitternacht left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I only realised while adding comments that this seems to generally be rather outdated. I'm still leaving them here in case they help at all, but if it's planned to revise this in a more general way anyway, feel free to ignore.

Comment thread proposals/4196-matrixrtc-m-call.md Outdated
Comment thread proposals/4196-matrixrtc-m-call.md Outdated
Comment thread proposals/4196-matrixrtc-m-call.md Outdated
Comment thread proposals/4196-matrixrtc-m-call.md Outdated
Comment thread proposals/4196-matrixrtc-m-call.md Outdated
Comment thread proposals/4196-matrixrtc-m-call.md Outdated
Comment thread proposals/4196-matrixrtc-m-call.md Outdated
@Johennes Johennes changed the title MSC4196: MatrixRTC voice and video calling application m.call MSC4196: Voice and video calling application for MatrixRTC Sep 1, 2026

@robintown robintown left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for fleshing this out, it's looking really good to me. Just got a couple suggestions for how to make things less surprising, and nits.

Comment thread proposals/4196-matrixrtc-m-call.md Outdated
Comment thread proposals/4196-matrixrtc-m-call.md Outdated
Comment thread proposals/4196-matrixrtc-m-call.md Outdated
Comment thread proposals/4196-matrixrtc-m-call.md Outdated
Comment thread proposals/4196-matrixrtc-m-call.md Outdated
Comment on lines +171 to +176
### Injecting `m.rtc.slot` events on the server

Instead of having clients pass in the initial `m.rtc.slot` event via `initial_state` on
[`/createRoom`] requests, this logic could also be implemented by the server. This would
further complicate the already complex steps the server has to run through during room
creation though.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hm, I kind of was expecting this to be the server's responsibility in the case of the private_chat or trusted_private_chat presets. It seems like exactly what presets are for…

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you could argue the same about enabling room encryption at room creation time. Currently clients have to do this manually by specifying m.room.encryption in initial_state. I'm not sure what the history of that is to be honest though.

Other than adding to the existing complexity of /createRoom, one more potential issue I can see is that slots might contain further configuration options in future. Things like different encryption schemes (such as shared key encryption) or application specific settings (such as voice-only calls). It might be difficult to reflect all of that via presets?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suppose with m.room.encryption there's the problem that if it were included in the preset, clients would have no way of disabling encryption with those presets. initial_state can only add state events, not take them away, and to disable encryption you need the room to never have had an m.room.encryption event at all. With m.rtc.slot that's not a problem, as you can add one to initial_state with status = closed to override the defaults.

It would just be a preset, though expecting reconfiguration to be quite common in the future still sounds like a decent argument for not bothering with this. Also, on second thought, maybe calls aren't such a core feature of the protocol that they should be governed by presets that otherwise deal with just access, power, and history visibility.

Maybe let's just wait and see if this comes up with any other reviewers?

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My questions above also made me think whether it wouldn't be cleaner for the server to handle this, but I can very much see the reconfiguration and not-a-core-feature arguments

Comment thread proposals/4196-matrixrtc-m-call.md Outdated
Comment thread proposals/4196-matrixrtc-m-call.md Outdated
Comment thread proposals/4196-matrixrtc-m-call.md Outdated
Johennes and others added 5 commits September 3, 2026 07:38
Co-authored-by: Robin <robin@robin.town>
Co-authored-by: Robin <robin@robin.town>
Co-authored-by: Robin <robin@robin.town>
@Johennes
Johennes force-pushed the hughns/matrixrtc-m-call branch from 0637a27 to 16cb63a Compare September 3, 2026 06:18

@Johennes Johennes Sep 4, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Implementation requirements:

  • Client

@Johennes Johennes Sep 4, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Johennes
Johennes marked this pull request as ready for review September 4, 2026 06:44
Comment on lines +58 to +65
When clients create rooms with a `preset` of `private_chat` or `trusted_private_chat` in
[`/createRoom`], they SHOULD by default include an open `m.rtc.slot` event for `m.call` in
`initial_state`. Clients MAY let the user override this default behaviour.

As per [MSC4143], encryption of MatrixRTC sessions is mandatory in encrypted rooms and forbidden
in unencrypted rooms. Therefore, if [`m.room.encryption`] is also present in `initial_state`, the
`encryption` content block on the initial slot event MUST be set to `{ "type": "m.per_member" }`.
Otherwise, the `encryption` property MUST be omitted.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So, if someone "manually" provides contradicting m.rtc.slot and m.room.encryption events in initial_state, what happens? Does room creation fail, or slot creation fail? Does any of this depend on the order in which the two events are given?
Which reminds me: Did we specify in MSC4143 what happens with unencrypted slots when encryption gets enabled in a previously unencrypted room (I can't find anything like that right now), and does this influence the behaviour here?

(I'm not sure whether all of this needs to be specified here or whether it should be "obvious", I'm just unsure myself.)

Comment on lines +171 to +176
### Injecting `m.rtc.slot` events on the server

Instead of having clients pass in the initial `m.rtc.slot` event via `initial_state` on
[`/createRoom`] requests, this logic could also be implemented by the server. This would
further complicate the already complex steps the server has to run through during room
creation though.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My questions above also made me think whether it wouldn't be cleaner for the server to handle this, but I can very much see the reconfiguration and not-a-core-feature arguments

Comment on lines +181 to +185
Some users might not be comfortable with disclosing whether their camera is on or off via
the `intent` property on `m.rtc.member` events. Given that any room member can join the
session, this information is effectively obtainable by all room members anyway (though the
join would at least be a visible choice). In either case, users can opt not to fill `intent`
given that it is an optional property.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Given that any room member can join the session

Is that so? What if they lack the power level to send m.rtc.member events? Then they at least aren't "officially" part of the session...

the join would at least be a visible choice

... but I think this is also not true, because they could also be "unofficially" be part of a session (see here).

So I think the whole argumentation here isn't really appropriate. But maybe it isn't even necessary, and

In either case, users can opt not to fill intent given that it is an optional property.

is enough?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-Client Server Client-Server API A-VOIP Any VoIP or MatrixRTC related proposals kind:core MSC which is critical to the protocol's success matrix-2.0 Required for Matrix 2.0 (note: do not rename - used in reports/links) needs-implementation This MSC does not have a qualifying implementation for the SCT to review. The MSC cannot enter FCP. proposal A matrix spec change proposal. Process state.

Projects

Status: Tracking for review

Development

Successfully merging this pull request may close these issues.

7 participants