toc

content

I made a ton of changes in an effort to get voice channels working in matrix today for t/suki, but I was unsuccessful. For some reason, when you try to join a voice channel or do a 1-1 call with someone, the call fails. It tries to connect the call for only a few seconds before it ends with an error message.

The Tuwunel tutorial I'm following is at the webpages:

configuration

system configuration

ufw

sudo ufw status

Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere
80                         ALLOW       Anywhere
443                        ALLOW       Anywhere
8448                       ALLOW       Anywhere
7880/tcp                   ALLOW       Anywhere
7881/tcp                   ALLOW       Anywhere
50100:50200/udp            ALLOW       Anywhere
3478                       ALLOW       Anywhere
5349                       ALLOW       Anywhere
50201:65535/udp            ALLOW       Anywhere
Anywhere                   ALLOW       172.18.0.2
Anywhere                   ALLOW       172.18.0.3
22 (v6)                    ALLOW       Anywhere (v6)
80 (v6)                    ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)
8448 (v6)                  ALLOW       Anywhere (v6)
7880/tcp (v6)              ALLOW       Anywhere (v6)
7881/tcp (v6)              ALLOW       Anywhere (v6)
50100:50200/udp (v6)       ALLOW       Anywhere (v6)
3478 (v6)                  ALLOW       Anywhere (v6)
5349 (v6)                  ALLOW       Anywhere (v6)
50201:65535/udp (v6)       ALLOW       Anywhere (v6)
  • 8448 is for Tuwunel federation.
  • 7880/tcp and 7881/tcp are for Livekit.
  • 50100:50200/udp are for Livekit's ICE port range
  • 3478 is for the STUN protocol, for the TURN server that Livekit runs
  • 172.18.0.2 and 172.18.0.3 is so that the NGINX container can find the Livekit container which isn't part of the moonlight docker network and is running in the host network_mode instead.

swag

SWAG is the reverse proxy middleware docker container I use.

docker compose

/opt/swag/docker-compose.yml

networks:
  moonlight:
    external: true

services:
  swag:
    image: lscr.io/linuxserver/swag:latest
    container_name: swag
    cap_add:
      - NET_ADMIN
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Etc/UTC
      - URL=tsuki.games
      - VALIDATION=http
      - SUBDOMAINS=chat,git,matrix,matrix-rtc,turn
      - CERTPROVIDER=zerossl
      - EMAIL=usagi@tsuki.games
      - ONLY_SUBDOMAINS=true
    volumes:
      - ./config:/config
    extra_hosts:
      - host.docker.internal:host-gateway
    networks:
      - moonlight
    ports:
      - '80:80'
      - '443:443'
    restart: unless-stopped

It appears that extra_hosts is necessary so that the NGINX container can find the Livekit container, as the Livekit container is not part of the moonlight docker network.

nginx

config/nginx/proxy-confs/matrix-rtc.subdomain.conf

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    http2 on;
    server_name matrix-rtc.*;

    include /config/nginx/ssl.conf;

    # lk-jwt-service
    location ~ ^(/sfu/get|/get_token|/healthz) {
        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app matrix-rtc-jwt;
        set $upstream_port 8080;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;
    }

    # livekit
    location / {
        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app 172.17.0.1;
        set $upstream_port 7880;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;

        proxy_set_header Connection "upgrade";
        proxy_set_header Upgrade $http_upgrade;
    }
}

Notably, location ~ ^(/sfu/get|/get_token|/healthz) is not what the Tuwunel tutorial says to use, but I believe it is wrong. See 20260221100913.

docker ip

sudo docker compose exec swag cat /etc/hosts:

127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::	ip6-localnet
ff00::	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.17.0.1	host.docker.internal
172.18.0.3	35c8485c35ff

Sometimes SWAG gets assigned the IP address 172.18.0.2, which is why i have both 172.18.0.2 and 172.18.0.3 in the UFW configuration. I don't like this, but I don't know how else to get SWAG to proxy the container correctly; it will fail to find the container if I use the container name.

matrix

All of the matrix-related services are configured under /opt/matrix.

docker compose

/opt/matrix/docker-compose.yml

networks:
  moonlight:
    external: true

services:
  tuwunel:
    image: jevolk/tuwunel:v1.5.0
    container_name: tuwunel
    restart: unless-stopped
    volumes:
      - ./db:/var/lib/tuwunel
      - ./tuwunel.toml:/etc/tuwunel.toml:ro
    environment:
      TUWUNEL_CONFIG: '/etc/tuwunel.toml'
    networks:
      - moonlight

  element:
    image: vectorim/element-web:latest
    container_name: element
    restart: unless-stopped
    volumes:
      - ./element.json:/app/config.json:ro
    depends_on:
      - tuwunel
    networks:
      - moonlight

  matrix-rtc-jwt:
    image: ghcr.io/element-hq/lk-jwt-service:latest
    container_name: matrix-rtc-jwt
    environment:
      - LIVEKIT_URL=wss://matrix-rtc.tsuki.games
      - LIVEKIT_KEY=<livekit_key>
      - LIVEKIT_SECRET=<livekit_secret>
      - LIVEKIT_FULL_ACCESS_HOMESERVERS=tsuki.games
    restart: unless-stopped
    networks:
      - moonlight

  matrix-rtc-livekit:
    image: livekit/livekit-server:latest
    container_name: matrix-rtc-livekit
    command: --config /etc/livekit.yaml
    restart: unless-stopped
    volumes:
      - ./livekit.yaml:/etc/livekit.yaml:ro
    network_mode: host

tuwunel

/opt/matrix/tuwunel.toml

[global]
server_name = "tsuki.games"
address = "0.0.0.0"
query_over_tcp_only = true
allow_registration = false
require_auth_for_profile_requests = true
allow_public_room_directory_over_federation = true
show_all_local_users_in_user_directory = true
trusted_servers = [
  "matrix.expiredpopsicle.com",
]
turn_uris = [
  "turns:turn.tsuki.games?transport=udp",
  "turns:turn.tsuki.games?transport=tcp",
]
turn_secret = "<coturn_secret>"
auto_join_rooms = [ "#tsuki:tsuki.games", "#general:tsuki.games" ]
single_sso = true

[[global.identity_provider]]
brand = "Discourse"
client_id = "matrix"
client_secret = "<discourse_secret>"
issuer_url = "https://forum.tsuki.games/oauth2"
callback_url = "https://matrix.tsuki.games/_matrix/client/unstable/login/sso/callback/matrix"
base_path = "oauth2"

[global.well_known]
client = "https://matrix.tsuki.games"
server = "matrix.tsuki.games:443"

[[global.well_known.rtc_transports]]
type = "livekit"
livekit_service_url = "https://matrix-rtc.tsuki.games"

I'm pretty confident there's something wrong with this configuration. I'm using the TURN server that is built into Livekit, but turn_uris is referring to the URL I intended to host Coturn at. However, even if I change it to point to turn:matrix-rtc.tsuki.games?transport=udp and turn:matrix-rtc.tsuki.games?transport=tcp, it still fails in exactly the same way in both the element web client and the Livekit server.

Moreover, I have no idea what the secret would be, or if there's a username and password, or anything else to authenticate to the TURN server with. If I'm understanding the Livekit server logs well enough, it seems like it creates those on the fly whenever a room is needed, so I think the client or Tuwunel might not even use the turn_uris field at all when Livekit is in use.

livekit

/opt/matrix/livekit.yaml

port: 7880
bind_addresses:
  - ""
rtc:
  tcp_port: 7881
  port_range_start: 50100
  port_range_end: 50200
  use_external_ip: true
  enable_loopback_candidate: false
turn:
  enabled: true
  udp_port: 3478
  relay_range_start: 50300
  relay_range_end: 65535
  domain: matrix-rtc.tsuki.games
keys:
  <livekit_key>: <livekit_secret>

I would like TURN to use TLS, but given how much trouble I'm having I've decided that I'll try to set that up later.

logs

livekit

This is what it looks like from the perspective of the livekit server when I try to connect to a voice channel in Element Web:

docker compose logs matrix-rtc-livekit

2026-02-21T10:19:54.923Z	INFO	livekit	routing/interfaces.go:180	using single-node routing
2026-02-21T10:19:55.063Z	INFO	livekit	rtcconfig/ip.go:195	found external IP via STUN	{"localAddr": "172.17.0.1:50117", "stunServer": "global.stun.twilio.com:3478", "externalIP": "216.98.13.223"}
2026-02-21T10:19:55.067Z	INFO	livekit	rtcconfig/ip.go:195	found external IP via STUN	{"localAddr": "216.98.13.223:50117", "stunServer": "global.stun.twilio.com:3478", "externalIP": "216.98.13.223"}
2026-02-21T10:19:55.076Z	INFO	livekit	rtcconfig/ip.go:195	found external IP via STUN	{"localAddr": "172.21.0.1:50117", "stunServer": "global.stun.twilio.com:3478", "externalIP": "216.98.13.223"}
2026-02-21T10:19:55.099Z	INFO	livekit	rtcconfig/ip.go:195	found external IP via STUN	{"localAddr": "172.22.0.1:50117", "stunServer": "global.stun.twilio.com:3478", "externalIP": "216.98.13.223"}
2026-02-21T10:19:55.106Z	INFO	livekit	rtcconfig/ip.go:195	found external IP via STUN	{"localAddr": "172.20.0.1:50117", "stunServer": "global.stun.twilio.com:3478", "externalIP": "216.98.13.223"}
2026-02-21T10:19:55.110Z	INFO	livekit	rtcconfig/ip.go:195	found external IP via STUN	{"localAddr": "172.19.0.1:50117", "stunServer": "global.stun.twilio.com:3478", "externalIP": "216.98.13.223"}
2026-02-21T10:19:55.110Z	INFO	livekit	rtcconfig/ip.go:195	found external IP via STUN	{"localAddr": "172.18.0.1:50117", "stunServer": "global.stun.twilio.com:3478", "externalIP": "216.98.13.223"}
2026-02-21T10:19:56.068Z	WARN	livekit	rtcconfig/ip.go:278	could not validate external IP	{"ip": "216.98.13.223", "from": "172.17.0.1:50117", "error": "context canceled"}
2026-02-21T10:19:56.068Z	WARN	livekit	rtcconfig/ip.go:278	could not validate external IP	{"ip": "216.98.13.223", "from": "172.22.0.1:50117", "error": "context canceled"}
2026-02-21T10:19:56.068Z	WARN	livekit	rtcconfig/ip.go:278	could not validate external IP	{"ip": "216.98.13.223", "from": "172.20.0.1:50117", "error": "context canceled"}
2026-02-21T10:19:56.068Z	WARN	livekit	rtcconfig/ip.go:278	could not validate external IP	{"ip": "216.98.13.223", "from": "172.21.0.1:50117", "error": "context canceled"}
2026-02-21T10:19:56.068Z	WARN	livekit	rtcconfig/ip.go:278	could not validate external IP	{"ip": "216.98.13.223", "from": "172.19.0.1:50117", "error": "context canceled"}
2026-02-21T10:19:56.068Z	WARN	livekit	rtcconfig/ip.go:278	could not validate external IP	{"ip": "216.98.13.223", "from": "172.18.0.1:50117", "error": "context canceled"}
2026-02-21T10:19:56.118Z	INFO	livekit	rtcconfig/webrtc_config.go:284	failed to get external ip	{"local": "172.18.0.1", "err": "context canceled"}
2026-02-21T10:19:56.119Z	INFO	livekit	rtcconfig/webrtc_config.go:284	failed to get external ip	{"local": "172.20.0.1", "err": "context canceled"}
2026-02-21T10:19:56.120Z	INFO	livekit	rtcconfig/webrtc_config.go:284	failed to get external ip	{"local": "172.22.0.1", "err": "context canceled"}
2026-02-21T10:19:56.121Z	INFO	livekit	rtcconfig/webrtc_config.go:284	failed to get external ip	{"local": "172.19.0.1", "err": "context canceled"}
2026-02-21T10:19:56.121Z	INFO	livekit	rtcconfig/webrtc_config.go:284	failed to get external ip	{"local": "172.21.0.1", "err": "context canceled"}
2026-02-21T10:19:56.122Z	INFO	livekit	rtcconfig/webrtc_config.go:284	failed to get external ip	{"local": "172.17.0.1", "err": "context canceled"}
2026-02-21T10:19:56.122Z	INFO	livekit	rtcconfig/webrtc_config.go:102	using external IPs	{"ips": ["216.98.13.223/216.98.13.223", "172.22.0.1/172.22.0.1", "172.21.0.1/172.21.0.1", "172.19.0.1/172.19.0.1", "172.20.0.1/172.20.0.1", "172.18.0.1/172.18.0.1", "172.17.0.1/172.17.0.1"]}
2026-02-21T10:19:56.126Z	INFO	livekit	service/turn.go:145	Starting TURN server	{"turn.relay_range_start": 50300, "turn.relay_range_end": 65535, "turn.portUDP": 3478}
2026-02-21T10:19:56.127Z	INFO	livekit	service/server.go:264	starting LiveKit server	{"portHttp": 7880, "nodeID": "ND_dXCkQkRTwsoq", "nodeIP": "216.98.13.223", "version": "1.9.11", "bindAddresses": [""], "rtc.portTCP": 7881, "rtc.portICERange": [50100, 50200]}
2026-02-21T10:26:40.249Z	INFO	livekit.api	service/twirp.go:145	API RoomService.CreateRoom	{"service": "RoomService", "method": "CreateRoom", "room": "8N6bSBs2HemI/y37vwbBXadc1hZby2N3J9c0hqrBlNk", "request": {"name": "8N6bSBs2HemI/y37vwbBXadc1hZby2N3J9c0hqrBlNk", "emptyTimeout": 300, "departureTimeout": 20}, "duration": "3.244734ms", "status": "200"}
2026-02-21T10:26:41.053Z	INFO	livekit.api	service/twirp.go:145	API RoomService.CreateRoom	{"service": "RoomService", "method": "CreateRoom", "room": "8N6bSBs2HemI/y37vwbBXadc1hZby2N3J9c0hqrBlNk", "request": {"name": "8N6bSBs2HemI/y37vwbBXadc1hZby2N3J9c0hqrBlNk", "emptyTimeout": 300, "departureTimeout": 20}, "duration": "361.833µs", "status": "200"}
2026-02-21T10:26:41.379Z	INFO	livekit	service/roommanager.go:413	starting RTC session	{"room": "8N6bSBs2HemI/y37vwbBXadc1hZby2N3J9c0hqrBlNk", "roomID": "RM_BBcYDhp2aLkT", "participant": "@exodrifter:tsuki.games:zI36Tz2oRS", "pID": "PA_X8AzSeKHtkVj", "remote": false, "room": "8N6bSBs2HemI/y37vwbBXadc1hZby2N3J9c0hqrBlNk", "nodeID": "ND_dXCkQkRTwsoq", "numParticipants": 0, "participantInit": {"Identity": "@exodrifter:tsuki.games:zI36Tz2oRS", "Reconnect": false, "ReconnectReason": "RR_UNKNOWN", "AutoSubscribe": true, "AutoSubscribeDataTrack": "not-set", "Client": {"sdk": "JS", "version": "2.15.13", "protocol": 16, "os": "Linux", "deviceModel": "Other", "browser": "Firefox", "browserVersion": "147.0"}, "Grants": {"Identity": "@exodrifter:tsuki.games:zI36Tz2oRS", "Kind": "", "KindDetails": [], "Video": {"RoomCreate": false, "RoomList": false, "RoomRecord": false, "RoomAdmin": false, "RoomJoin": true, "Room": "8N6bSBs2HemI/y37vwbBXadc1hZby2N3J9c0hqrBlNk", "CanPublish": true, "CanSubscribe": true, "CanPublishData": "not-set", "CanPublishSources": [], "CanUpdateOwnMetadata": "not-set", "IngressAdmin": false, "Hidden": false, "Recorder": false, "Agent": false, "CanSubscribeMetrics": "not-set", "DestinationRoom": ""}, "SIP": {}, "Agent": {}, "Inference": {}, "Observability": {}, "RoomConfig": {}, "RoomPreset": ""}, "Region": "", "AdaptiveStream": true, "ID": "", "SubscriberAllowPause": "not-set", "DisableICELite": false, "CreateRoom": {"name": "8N6bSBs2HemI/y37vwbBXadc1hZby2N3J9c0hqrBlNk"}, "AddTrackRequests": [], "PublisherOffer": {}, "SyncState": {}, "UseSinglePeerConnection": false}}
2026-02-21T10:26:41.381Z	INFO	livekit	service/roommanager.go:1006	created TURN password	{"username": "<username>", "password": "<password>"}
2026-02-21T10:26:56.462Z	INFO	livekit	rtc/participant.go:1367	participant closing	{"room": "8N6bSBs2HemI/y37vwbBXadc1hZby2N3J9c0hqrBlNk", "roomID": "RM_BBcYDhp2aLkT", "participant": "@exodrifter:tsuki.games:zI36Tz2oRS", "pID": "PA_X8AzSeKHtkVj", "remote": false, "sendLeave": false, "reason": "SIGNAL_SOURCE_CLOSE", "isExpectedToResume": false}
2026-02-21T10:26:56.463Z	INFO	livekit	rtc/room.go:1431	removing participant without connection	{"room": "8N6bSBs2HemI/y37vwbBXadc1hZby2N3J9c0hqrBlNk", "roomID": "RM_BBcYDhp2aLkT", "participant": "@exodrifter:tsuki.games:zI36Tz2oRS", "pID": "PA_X8AzSeKHtkVj", "remote": false, "publisherCandidates": ["[local][trickle] udp4 host 216.98.13.223:50193 (resolved: 216.98.13.223:50193)", "[local][trickle] tcp4 host 216.98.13.223:7881 (resolved: 216.98.13.223:7881)", "[local][trickle] udp4 host 172.22.0.1:50132 (resolved: 172.22.0.1:50132)", "[local][trickle] tcp4 host 172.22.0.1:7881 (resolved: 172.22.0.1:7881)", "[local][trickle] udp4 host 172.21.0.1:50115 (resolved: 172.21.0.1:50115)", "[local][trickle] tcp4 host 172.21.0.1:7881 (resolved: 172.21.0.1:7881)", "[local][trickle] udp4 host 172.19.0.1:50129 (resolved: 172.19.0.1:50129)", "[local][trickle] tcp4 host 172.19.0.1:7881 (resolved: 172.19.0.1:7881)", "[local][trickle] udp4 host 172.20.0.1:50112 (resolved: 172.20.0.1:50112)", "[local][trickle] tcp4 host 172.20.0.1:7881 (resolved: 172.20.0.1:7881)", "[local][trickle] udp4 host 172.18.0.1:50180 (resolved: 172.18.0.1:50180)", "[local][trickle] tcp4 host 172.18.0.1:7881 (resolved: 172.18.0.1:7881)", "[local][trickle] udp4 host 172.17.0.1:50126 (resolved: 172.17.0.1:50126)", "[local][trickle] tcp4 host 172.17.0.1:7881 (resolved: 172.17.0.1:7881)"], "subscriberCandidates": ["[local][trickle] udp4 host 216.98.13.223:50117 (resolved: 216.98.13.223:50117)", "[local][trickle] tcp4 host 216.98.13.223:7881 (resolved: 216.98.13.223:7881)", "[local][trickle] tcp4 host 172.22.0.1:7881 (resolved: 172.22.0.1:7881)", "[local][trickle] udp4 host 172.22.0.1:50196 (resolved: 172.22.0.1:50196)", "[local][trickle] udp4 host 172.21.0.1:50138 (resolved: 172.21.0.1:50138)", "[local][trickle] tcp4 host 172.21.0.1:7881 (resolved: 172.21.0.1:7881)", "[local][trickle] udp4 host 172.19.0.1:50139 (resolved: 172.19.0.1:50139)", "[local][trickle] tcp4 host 172.19.0.1:7881 (resolved: 172.19.0.1:7881)", "[local][trickle] tcp4 host 172.20.0.1:7881 (resolved: 172.20.0.1:7881)", "[local][trickle] udp4 host 172.20.0.1:50102 (resolved: 172.20.0.1:50102)", "[local][trickle] udp4 host 172.18.0.1:50102 (resolved: 172.18.0.1:50102)", "[local][trickle] tcp4 host 172.18.0.1:7881 (resolved: 172.18.0.1:7881)", "[local][trickle] udp4 host 172.17.0.1:50114 (resolved: 172.17.0.1:50114)", "[local][trickle] tcp4 host 172.17.0.1:7881 (resolved: 172.17.0.1:7881)"], "connectionType": "unknown", "reason": "SIGNAL_SOURCE_CLOSE", "clientInfo": {"sdk": "JS", "version": "2.15.13", "protocol": 16, "os": "Linux", "deviceModel": "Other", "browser": "Firefox", "browserVersion": "147.0"}}
2026-02-21T10:27:16.510Z	INFO	livekit.room	rtc/room.go:807	closing room	{"room": "8N6bSBs2HemI/y37vwbBXadc1hZby2N3J9c0hqrBlNk", "roomID": "RM_BBcYDhp2aLkT"}
2026-02-21T10:27:16.510Z	INFO	livekit	service/roommanager.go:187	deleting room state	{"room": "8N6bSBs2HemI/y37vwbBXadc1hZby2N3J9c0hqrBlNk"}
2026-02-21T10:27:16.510Z	INFO	livekit.room	service/roommanager.go:667	room closed	{"room": "8N6bSBs2HemI/y37vwbBXadc1hZby2N3J9c0hqrBlNk", "roomID": "RM_BBcYDhp2aLkT"}
2026-02-21T10:27:16.510Z	INFO	livekit.room	rtc/room.go:791	closing idle room	{"room": "8N6bSBs2HemI/y37vwbBXadc1hZby2N3J9c0hqrBlNk", "roomID": "RM_BBcYDhp2aLkT", "reason": "departure timeout"}
2026-02-21T10:32:40.076Z	INFO	livekit	server/main.go:314	exit requested, shutting down	{"signal": "terminated", "force": false}

element web

This is what it looks like from the perspective of the element web client when I try to connect to a voice channel (errors, warnings, and info logs only, with stack traces elided):

03:12:18.572 Trying to get JWT from call's active focus URL of https://matrix-rtc.tsuki.games...
03:12:19.155 Got JWT from call's active focus URL.
03:12:19.157 [MatrixRTCSession !yxsNczGtn0cyc0KUsx:tsuki.games] Using experimental to-device transport for encryption keys
03:12:19.158 [MatrixRTCSession !yxsNczGtn0cyc0KUsx:tsuki.games] Using to-device with room fallback transport for encryption keys
03:12:19.160 [MatrixRTCSession !yxsNczGtn0cyc0KUsx:tsuki.games][EncryptionManager] Joining room
03:12:19.182 [LivekitRoom] Create LiveKit room
03:12:19.192 [Lifecycle] GroupCallView Component unmounted
03:12:19.194 [Lifecycle] InCallView Component mounted, livekit room state disconnected
03:12:19.198 Session in room !yxsNczGtn0cyc0KUsx:tsuki.games changed to joined
03:12:19.229 Failed to set E2EE enabled on room Error: e2ee not configured, please set e2ee settings within the room options
03:12:19.263 Uncaught (in promise) Error: Not connected yet
03:12:19.265 Failed to send layout change to widget API G3: Unknown or unsupported action: io.element.tile_layout
03:12:19.321 [MatrixRTCSession !yxsNczGtn0cyc0KUsx:tsuki.games][MembershipManager] Not using delayed event because the endpoint is not supported
03:12:19.432 [MatrixRTCSession !yxsNczGtn0cyc0KUsx:tsuki.games] Memberships for call in room !yxsNczGtn0cyc0KUsx:tsuki.games have changed: emitting (1 members)
03:12:19.448 Updated state entry org.matrix.msc3401.call.member _@exodrifter:tsuki.games_zI36Tz2oRS_m.call to $b9yHSFhlh7MkvuqIb8p6S1eXUdP2pfNbl_sVYa6MdpU
03:12:19.448 [MatrixRTCSession !yxsNczGtn0cyc0KUsx:tsuki.games] Memberships for call in room !yxsNczGtn0cyc0KUsx:tsuki.games have changed: emitting (1 members)
03:12:19.449 Got new active focus from membership: @exodrifter:tsuki.games/zI36Tz2oRS.
          Updated focus (focus switch) from undefined to {"livekit_alias":"!yxsNczGtn0cyc0KUsx:tsuki.games","livekit_service_url":"https://matrix-rtc.tsuki.games","type":"livekit"}
03:12:19.471 Updated state entry org.matrix.msc3401.call.member _@exodrifter:tsuki.games_zI36Tz2oRS_m.call to $SGEyShUFlNmiAIATEFDHJj3tU2KwDcMHfVND48L25bU
03:12:19.476 Received event $SGEyShUFlNmiAIATEFDHJj3tU2KwDcMHfVND48L25bU org.matrix.msc3401.call.member
03:12:19.955 Trying to get JWT from call's active focus URL of https://matrix-rtc.tsuki.games...
03:12:20.000 Stopping queue 'message' as it is now empty init.js:1:1407231
03:12:20.028 Updated state entry org.matrix.msc3401.call.member _@exodrifter:tsuki.games_zI36Tz2oRS_m.call to $SGEyShUFlNmiAIATEFDHJj3tU2KwDcMHfVND48L25bU
03:12:20.088 Got JWT from call's active focus URL.
03:12:20.094 Pre-creating microphone track
03:12:20.106 Pre-created microphone track
03:12:20.106 [Lifecycle] Connecting & publishing
03:12:20.106 [Lifecycle] Connecting to livekit room wss://matrix-rtc.tsuki.games ...
03:12:20.251 WebRTC: ICE failed, your TURN server appears to be broken, see about:webrtc for more details
03:12:20.251 WebRTC: ICE failed, your TURN server appears to be broken, see about:webrtc for more details
03:12:25.562 [MatrixRTCSession !yxsNczGtn0cyc0KUsx:tsuki.games] Leaving call session in room !yxsNczGtn0cyc0KUsx:tsuki.games
03:12:25.569 [Lifecycle] InCallView Component unmounted, livekit room state connecting
03:12:25.571 [Lifecycle] GroupCallView Component mounted
03:12:25.572 Session in room !yxsNczGtn0cyc0KUsx:tsuki.games changed to left
03:12:25.575 disconnect from room 
Object { room: "8N6bSBs2HemI/y37vwbBXadc1hZby2N3J9c0hqrBlNk", roomID: "RM_ytqH67beUYUy", participant: "@exodrifter:tsuki.games:zI36Tz2oRS", pID: "PA_eFFjY6vyCQZi" }
03:12:25.575 Abort connection attempt due to user initiated disconnect 
Object { room: "8N6bSBs2HemI/y37vwbBXadc1hZby2N3J9c0hqrBlNk", roomID: "RM_ytqH67beUYUy", participant: "@exodrifter:tsuki.games:zI36Tz2oRS", pID: "PA_eFFjY6vyCQZi" }
03:12:25.575 abort transport connection 
Object { room: "8N6bSBs2HemI/y37vwbBXadc1hZby2N3J9c0hqrBlNk", roomID: "RM_ytqH67beUYUy", participant: "@exodrifter:tsuki.games:zI36Tz2oRS", pID: "PA_eFFjY6vyCQZi" }
03:12:25.575 abort transport connection 
Object { room: "8N6bSBs2HemI/y37vwbBXadc1hZby2N3J9c0hqrBlNk", roomID: "RM_ytqH67beUYUy", participant: "@exodrifter:tsuki.games:zI36Tz2oRS", pID: "PA_eFFjY6vyCQZi" }
03:12:25.576 [Lifecycle] Failed to connect ConnectionError: Client initiated disconnect
03:12:25.587 [Lifecycle] Disconnected from livekit room, state:disconnected
03:12:25.705 [MatrixRTCSession !yxsNczGtn0cyc0KUsx:tsuki.games] Memberships for call in room !yxsNczGtn0cyc0KUsx:tsuki.games have changed: emitting (0 members) init.js:1:1407231
03:12:25.713 [MatrixRTCSession !yxsNczGtn0cyc0KUsx:tsuki.games] Memberships for call in room !yxsNczGtn0cyc0KUsx:tsuki.games have changed: emitting (0 members)
03:12:25.715 Updated state entry org.matrix.msc3401.call.member _@exodrifter:tsuki.games_zI36Tz2oRS_m.call to $_8Hz5yNbZGWXXgP8NtHRZ-3MlvyErcg7YMD6YHjTFwQ
03:12:25.719 Received event $_8Hz5yNbZGWXXgP8NtHRZ-3MlvyErcg7YMD6YHjTFwQ org.matrix.msc3401.call.member

webrtc

As far as I can tell, the most interesting part of Firefox's about:webrtc page is the connection log. Most messages are not interesting, except for this error:

ICE(PC:{e823fbe5-46f4-4a66-86f6-e77b0ceb8c9b} 1771672340227021 (id=19327352898 url=https://chat.tsuki.games/widgets/element-call/index.html?widgetId=Au07zTrE6cNkRMJCFxhC5vzs&parentUrl=https%3A%2F%2Fchat.tsuki.games%2F#?perParticipantE2EE=false&userId=%40exodrift): failed to find default addresses

Looking up this error message doesn't seem to get me very useful information though.

meta

created:

backlinks: t/suki logs

commit: c7b114df