element-hq / element-hq/element-x-android
Resolved: Regression in Element X Android 26.09.1: MISSING_MATRIX_RTC_TRANSPORT when starting a call on a self-hosted MatrixRTC/LiveKit server
- Dominant language
- Kotlin
- Stars
- 2.4k
- Forks
- 624
- Avg merge
- 1d 14h
- Merged PRs (30d)
- 149
Description
### Steps to reproduce
## 1. Where are you starting? What can you see?
I am using Element X Android with a self-hosted Synapse homeserver and a self-hosted MatrixRTC backend.
- Element X Android version where calls work: `26.08.1`
- Element X Android version where calls fail: `26.09.1 (202609010)`
- Homeserver: `https://********`
- MatrixRTC backend: self-hosted LiveKit + `lk-jwt-service`
- Reverse proxy: Nginx
- The deployment also includes Jitsi, but the Element X call flow is configured to use MatrixRTC/LiveKit.
The MatrixRTC-related services were already running and no server-side configuration was changed between the successful test on 26.08.1 and the failed test on 26.09.1:
- Synapse: running and healthy
- LiveKit: running
- `lk-jwt-service`: running
- `msc4143_enabled: true`
- Synapse RTC configuration: enabled, with a LiveKit focus
- `/.well-known/matrix/client`: publicly available and contains both `m.matrix.rtc` and `org.matrix.msc4143.rtc_foci`
Sanitized public checks:
```text
GET [https://**/.well-known/matrix/client](https://**/.well-known/matrix/client)
-> HTTP 200
```
Response:
```json
{
"m.homeserver": {
"base_url": "[https://**](https://**)"
},
"m.matrix.rtc": {
"version": 1,
"livekit": {
"livekit_service_url": "[https://**](https://**)"
}
},
"org.matrix.msc4143.rtc_foci": [
{
"type": "livekit",
"livekit_service_url": "[https://**](https://**)"
}
]
}
```
```text
GET [https://**/_matrix/client/unstable/org.matrix.msc4143/rtc/transports](https://**/_matrix/client/unstable/org.matrix.msc4143/rtc/transports)
without an access token
-> HTTP 401 M_MISSING_TOKEN
```
This confirms that the endpoint exists and requires authentication.
Sanitized Synapse configuration:
```yaml
experimental_features:
msc4143_enabled: true
msc3266_enabled: true
rtc:
enable: true
focus:
type: livekit
livekit_service_url: "[https://**](https://**)"
jwt_auth:
enabled: true
audience: "livekit"
public_baseurl: "[https://**/](https://**/)"
```
## 2. What do you click?
1. Open a direct-message room in Element X Android.
2. Tap the call button.
3. Try to start either an audio or a video call.
## 3. More steps…
### Expected result
The call should start successfully, as it does with Element X Android `26.08.1` using the same Matrix account and the same unchanged self-hosted infrastructure.
### Actual result
Element X Android `26.09.1 (202609010)` immediately shows:
```text
MISSING_MATRIX_RTC_TRANSPORT
```
The call is not created and the client does not proceed to connect to the LiveKit backend.
### Regression
| Element X Android version | Result |
|---|---|
| `26.08.1` | Calls work |
| `26.09.1 (202609010)` | Calls fail with `MISSING_MATRIX_RTC_TRANSPORT` |
No MatrixRTC, Synapse, Nginx, LiveKit, or `lk-jwt-service` configuration was changed between these tests.
### Why this may be client-side
- The MatrixRTC transport endpoint is present.
- The `.well-known/matrix/client` document exposes both `m.matrix.rtc` and `org.matrix.msc4143.rtc_foci`.
- The same homeserver and MatrixRTC backend work with Element X Android `26.08.1`.
- The failure begins only after updating to `26.09.1`.
Could you please check whether Element X Android `26.09.1` changed any of the following?
- The request made to `/_matrix/client/unstable/org.matrix.msc4143/rtc/transports`
- Inclusion of `Authorization: Bearer ` for that request
- Fallback behaviour from `rtc/transports` to `/.well-known/matrix/client`
- Handling of `m.matrix.rtc` or `org.matrix.msc4143.rtc_foci`
- Required `livekit_service_url` format for `lk-jwt-service`
- Compatibility with Synapse `rtc.focus` configuration
I can provide sanitized client logs and sanitized Synapse, Nginx, LiveKit, and `lk-jwt-service` logs from both:
- a successful call attempt with `26.08.1`; and
- a failed call attempt with `26.09.1`.
### Outcome
#### What did you expect?
#### What happened instead?
### Your phone model
_No response_
### Operating system version
_No response_
### Application version and app store
_No response_
### Homeserver
_No response_
### Will you send logs?
No
### Will you submit a Pull Request?
No
Contributor guide
Research direction
Start at the call-button flow and the request to /_matrix/client/unstable/org.matrix.msc4143/rtc/transports, then compare behavior between Element X Android 26.08.1 and 26.09.1. Check authenticated transport discovery and the .well-known MatrixRTC fallback against the reported Synapse and LiveKit setup; done means audio and video calls start successfully on the newer version.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- android, kotlin, nginx
- Domain
- api, audio-video-rtc, mobile
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 52/100