|
| 1 | +# VoIP Conferencing |
| 2 | + |
| 3 | +This is a draft proposal for a naive voice/video conferencing implementation for |
| 4 | +Matrix clients. There are many possible conferencing architectures possible for |
| 5 | +Matrix (Multipoint Conferencing Unit (MCU); Stream Forwarding Unit (SFU); Peer- |
| 6 | +to-Peer mesh (P2P), etc; events shared in the group room; events shared 1:1; |
| 7 | +possibly even out-of-band signalling). |
| 8 | + |
| 9 | +This is a starting point for a naive MCU implementation which could provide one |
| 10 | +possible Matrix-wide solution in future, which retains backwards compatibility |
| 11 | +with standard 1:1 calling. |
| 12 | + |
| 13 | + * A client chooses to initiate a conference for a given room by starting a |
| 14 | + voice or video call with a 'conference focus' user. This is a virtual user |
| 15 | + (typically Application Service) which implements a conferencing bridge. It |
| 16 | + isn't defined how the client discovers or selects this user. |
| 17 | + |
| 18 | + * The conference focus user MUST join the room in which the client has |
| 19 | + initiated the conference - this may require the client to invite the |
| 20 | + conference focus user to the room, depending on the room's `join_rules`. The |
| 21 | + conference focus user needs to be in the room to let the bridge eject users |
| 22 | + from the conference who have left the room in which it was initiated, and aid |
| 23 | + discovery of the conference by other users in the room. The bridge |
| 24 | + identifies the room to join based on the user ID by which it was invited. |
| 25 | + The format of this identifier is implementation dependent for now. |
| 26 | + |
| 27 | + * If a client leaves the group chat room, they MUST be ejected from the |
| 28 | + conference. If a client leaves the 1:1 room with the conference focus user, |
| 29 | + they SHOULD be ejected from the conference. |
| 30 | + |
| 31 | + * For now, rooms can contain multiple conference focus users - it's left to |
| 32 | + user or client implementation to select which to converge on. In future this |
| 33 | + could be mediated using a state event (e.g. `im.vector.call.mcu`), but we |
| 34 | + can't do that right now as by default normal users can't set arbitrary state |
| 35 | + events on a room. |
| 36 | + |
| 37 | + * To participate in the conference, other clients initiates a standard 1:1 |
| 38 | + voice or video call to the conference focus user. |
| 39 | + |
| 40 | + * For best UX, clients SHOULD show the ongoing voice/video call in the UI |
| 41 | + context of the group room rather than 1:1 with the focus user. If a client |
| 42 | + recognises a conference user present in the room, it MAY chose to highlight |
| 43 | + this in the UI (e.g. with a "conference ongoing" notification, to aid |
| 44 | + discovery). Clients MAY hide the 1:1 room with the focus user (although in |
| 45 | + future this room could be used for floor control or other direct |
| 46 | + communication with the conference focus) |
| 47 | + |
| 48 | + * When all users have left the conference, the 'conference focus' user SHOULD |
| 49 | + leave the room. |
| 50 | + |
| 51 | + * If a conference focus user joins a room but does not receive a 1:1 voice or |
| 52 | + video call, it SHOULD time out after a period of time and leave the room. |
0 commit comments