Screenshare is of poor quality when simulcast is enabled after jitsi meet upgrade

We upgraded Jitsi Meet from version 2.0.4548 to 2.0.6726 (all components were upgraded).
Basic functionality works as expected with our exiting configuration except screenshare.

We observed that screenshare is very clear when the source is firefox, whereas blurred when shared from Chrome in a meeting with > 2 participants.

Our existing configuration has desktopSharingFrameRate.min = 15 and desktopSharingFrameRate.max = 25 - Does this affect in newer versions (the comment in the config says the value set for max determines if simulcast should be enabled)

The moment simulcast is disabled everything is clear even with Chrome.

My questions are:

  1. Should simulcast be disabled for an ideal screen share quality?
  2. What is the frame rate min/max range which disables simulcast or enables simulcast?
  3. Will disabling simulcast result in poor quality to support large conferences like 150+ participants (we have such meetings on our instance which worked perfectly fine with no additional customizations than frame rate min/max)

Am I missing some configuration during the upgrade?

Thanks in advance for the help!

Did you ever migrate from SCTP multiplexing to colibri websockets? Share your browser js console log.

reading ths thread could possibly be of interest.

Thanks for the quick response.

Can you please tell me which config should I check to confirm if migration to colibri websockets is done? If it means the jvb.conf and nginx config - then yes.

I am unable to upload attachments here - it says new users are not allowed to upload

test-call:63 (TIME) index.html loaded: 79
Logger.js:154 2022-02-21T08:41:32.742Z [modules/browser/BrowserCapabilities.js] <new >: This appears to be chrome, ver: 97.0.4692.71
Logger.js:182 2022-02-21T08:41:33.019Z [features/base/redux] <Object.persistState>: redux state persisted. 8bb5de6d63639199c8af4472d74eca0d → 1060f334774270492570f08a7b77b5b7
Logger.js:182 2022-02-21T08:41:33.086Z [features/base/config] Extending config with: {“startWithAudioMuted”:true,“startWithVideoMuted”:true}
Logger.js:154 2022-02-21T08:41:33.089Z [FeatureFlags] <Object.init>: Source name signaling: false
Logger.js:154 2022-02-21T08:41:33.093Z [modules/statistics/AnalyticsAdapter.js] <Object.dispose>: Disposing of analytics adapter.
r @ Logger.js:154
Logger.js:182 2022-02-21T08:41:33.094Z [features/analytics] Initialized 0 analytics handlers
Logger.js:182 2022-02-21T08:41:33.095Z [features/base/media] Start muted: audio, video
Logger.js:182 2022-02-21T08:41:33.098Z [features/base/media] Start audio only set to false
Logger.js:182 2022-02-21T08:41:33.208Z [index.web] <HTMLDocument.>: (TIME) document ready: 558.6000000014901
olm.js:35 wasm streaming compile failed: TypeError: Failed to execute ‘compile’ on ‘WebAssembly’: Incorrect response MIME type. Expected ‘application/wasm’.
(anonymous) @ olm.js:35
olm.js:35 falling back to ArrayBuffer instantiation
(anonymous) @ olm.js:35
test-call:46 Service worker registered. ServiceWorkerRegistration
Logger.js:154 2022-02-21T08:41:33.307Z [modules/RTC/RTCUtils.js] : list of media devices has changed: Array(6)
Logger.js:154 2022-02-21T08:41:33.452Z [modules/RTC/RTCUtils.js] Audio output device set to default
Logger.js:154 2022-02-21T08:41:33.536Z [modules/xmpp/xmpp.js] <Ur._initStrophePlugins>: P2P STUN servers: Array(1)
Logger.js:154 2022-02-21T08:41:33.552Z [modules/xmpp/xmpp.js] <Ur.connectionHandler>: (TIME) Strophe connecting: 902.8000000007451
Logger.js:154 2022-02-21T08:41:33.556Z [modules/RTC/RTCUtils.js] <vi.>: Got media constraints: {“video”:false,“audio”:{“autoGainControl”:true,“echoCancellation”:true,“noiseSuppression”:true}}
Logger.js:154 2022-02-21T08:41:34.162Z [modules/RTC/RTCUtils.js] onUserMediaSuccess
Logger.js:154 2022-02-21T08:41:34.334Z [modules/xmpp/XmppConnection.js] <ds._maybeEnableStreamResume>: Stream resume enabled, but WebSockets are not enabled
r @ Logger.js:154
Logger.js:154 2022-02-21T08:41:34.335Z [modules/xmpp/strophe.ping.js] <as.startInterval>: XMPP pings will be sent every 10000 ms
Logger.js:154 2022-02-21T08:41:34.335Z [modules/xmpp/xmpp.js] <Ur.connectionHandler>: (TIME) Strophe connected: 1685.800000000745
Logger.js:154 2022-02-21T08:41:34.335Z [modules/xmpp/xmpp.js] <Ur.connectionHandler>: My Jabber ID: lc_ug4s6-sbeoudq@meet.ursc.dos.gov.in/VwkRwU1D
Logger.js:154 2022-02-21T08:41:34.342Z [modules/xmpp/xmpp.js] <Ur.createRoom>: JID lc_ug4s6-sbeoudq@meet.ursc.dos.gov.in/VwkRwU1D using MUC nickname e2f334bd
Logger.js:154 2022-02-21T08:41:34.342Z [modules/xmpp/ChatRoom.js] : Joined MUC as test-call@conference.meet.ursc.dos.gov.in/e2f334bd
Logger.js:154 2022-02-21T08:41:34.343Z [modules/e2eping/e2eping.js] : Initializing e2e ping; pingInterval=10000, analyticsInterval=60000.
Logger.js:154 2022-02-21T08:41:34.344Z [modules/connectivity/ParticipantConnectionStatus.js] : RtcMuteTimeout set to: 10000
Logger.js:154 2022-02-21T08:41:34.348Z [modules/statistics/AvgRTPStatsReporter.js] : Avg RTP stats will be calculated every 15 samples
Logger.js:154 2022-02-21T08:41:34.349Z [JitsiConference.js] : backToP2PDelay: 5
Logger.js:154 2022-02-21T08:41:34.350Z [JitsiConference.js] : End-to-End Encryption is supported
Logger.js:154 2022-02-21T08:41:34.377Z [modules/xmpp/moderator.js] <Ls.setFocusUserJid>: Focus jid set to: undefined
Logger.js:154 2022-02-21T08:41:34.378Z [modules/xmpp/moderator.js] <Ls.createConferenceIq>: Session ID: null machine UID: 80b03eddba5d3666eb27f1a392d5de91
Logger.js:182 2022-02-21T08:41:34.384Z [conference.js] Initialized with 0 local tracks
Logger.js:182 2022-02-21T08:41:35.298Z [modules/UI/videolayout/LargeVideoManager.js] hover in e2f334bd
Logger.js:182 2022-02-21T08:41:35.315Z [features/base/redux] <Object.persistState>: redux state persisted. 1060f334774270492570f08a7b77b5b7 → ceb22c8d0f888a28a1581a87a1054020
Logger.js:154 2022-02-21T08:41:35.317Z [modules/xmpp/moderator.js] <Ls.setFocusUserJid>: Focus jid set to: focus@auth.meet.ursc.dos.gov.in
Logger.js:154 2022-02-21T08:41:35.317Z [modules/xmpp/moderator.js] <Ls.parseConfigOptions>: Authentication enabled: false
Logger.js:154 2022-02-21T08:41:35.318Z [modules/xmpp/moderator.js] <Ls.parseConfigOptions>: External authentication enabled: false
Logger.js:154 2022-02-21T08:41:35.319Z [modules/xmpp/moderator.js] <Ls.parseConfigOptions>: Sip gateway enabled: false
Logger.js:154 2022-02-21T08:41:35.330Z [modules/xmpp/ChatRoom.js] <Us.onPresence>: (TIME) MUC join started: 2680.7000000011176
Logger.js:154 2022-02-21T08:41:35.332Z [modules/xmpp/ChatRoom.js] <Us.onPresence>: entered test-call@conference.meet.ursc.dos.gov.in/focus Object
Logger.js:154 2022-02-21T08:41:35.335Z [modules/version/ComponentsVersions.js] Got focus version: 1.0.832
Logger.js:154 2022-02-21T08:41:35.337Z [JitsiConference.js] <jc._updateProperties>: Audio unmute permissions set by Jicofo to false
Logger.js:154 2022-02-21T08:41:35.338Z [JitsiConference.js] <jc._updateProperties>: Video unmute permissions set by Jicofo to false
Logger.js:154 2022-02-21T08:41:35.338Z [modules/xmpp/ChatRoom.js] <Us.onPresence>: Jicofo supports restart by terminate: true
Logger.js:182 2022-02-21T08:41:35.339Z [conference.js] <r.>: My role changed, new role: none
Logger.js:154 2022-02-21T08:41:35.342Z [modules/xmpp/ChatRoom.js] <Us.onPresence>: (TIME) MUC joined: 2693
Logger.js:154 2022-02-21T08:41:35.371Z [modules/xmpp/ChatRoom.js] <Us.onMessage>: Subject is changed to
Logger.js:182 2022-02-21T08:41:35.799Z [conference.js] <r.>: My role changed, new role: moderator
Logger.js:154 2022-02-21T08:41:44.324Z [modules/RTC/ScreenObtainer.js] <Object.obtainScreenFromGetDisplayMedia>: Using getDisplayMedia for screen sharing Object
Logger.js:154 2022-02-21T08:41:47.957Z [JitsiConference.js] <jc._doReplaceTrack>: _doReplaceTrack - no JVB JingleSession
Logger.js:154 2022-02-21T08:41:47.958Z [JitsiConference.js] <jc._doReplaceTrack>: _doReplaceTrack - no P2P JingleSession
Logger.js:182 2022-02-21T08:41:47.960Z [features/base/tracks] Replace video track - unmuted
Logger.js:182 2022-02-21T08:41:48.025Z [modules/UI/videolayout/LargeVideoManager.js] hover in e2f334bd
Logger.js:182 2022-02-21T08:41:48.073Z [conference.js] Screen sharing started
Logger.js:182 2022-02-21T08:41:48.411Z [modules/UI/videolayout/LargeVideoManager.js] hover in e2f334bd
Logger.js:154 2022-02-21T08:41:56.774Z [modules/xmpp/ChatRoom.js] <Us.onPresence>: entered test-call@conference.meet.ursc.dos.gov.in/483f3157 Object
Logger.js:182 2022-02-21T08:41:56.839Z [conference.js] <r.>: USER 483f3157 connected: ai
Logger.js:154 2022-02-21T08:41:58.043Z [modules/xmpp/strophe.jingle.js] <Rr.onJingle>: Found a JSON-encoded element in session-initiate, translating to standard Jingle.
Logger.js:154 2022-02-21T08:41:58.045Z [modules/xmpp/strophe.jingle.js] <Rr.onJingle>: (TIME) received session-initiate: 25393.60000000149
Logger.js:154 2022-02-21T08:41:58.060Z [modules/RTC/TraceablePeerConnection.js] : Using RTCRtpTransceiver#setCodecPreferences for codec selection
index.js:44 SdpSimulcast: using 3 layers
Logger.js:154 2022-02-21T08:41:58.062Z [modules/RTC/TraceablePeerConnection.js] : Create new TPC[id=1,type=JVB]
Logger.js:154 2022-02-21T08:41:58.068Z [JitsiConference.js] <jc._acceptJvbIncomingCall>: Starting CallStats for JVB connection…
Logger.js:154 2022-02-21T08:41:58.069Z [modules/statistics/RTPStatsCollector.js] <kn.start>: Using RTCRtpSynchronizationSource for remote audio levels
Logger.js:154 2022-02-21T08:41:58.073Z [modules/RTC/TraceablePeerConnection.js] <ha.addTrack>: TPC[id=1,type=JVB] adding LocalTrack[2,video]
index.js:146 Halt: There are no SSRC groups in the remote description.
Logger.js:154 2022-02-21T08:41:58.120Z [modules/RTC/TraceablePeerConnection.js] <ha._remoteTrackAdded>: TPC[id=1,type=JVB] ignored remote ‘stream added’ event for non-user stream[id=mixedmslabel]
Logger.js:154 2022-02-21T08:41:58.120Z [modules/RTC/TraceablePeerConnection.js] <ha._remoteTrackAdded>: TPC[id=1,type=JVB] ignored remote ‘stream added’ event for non-user stream[id=mixedmslabel]
index.js:414 SdpSimulcast: current ssrc cache: Array(0)
index.js:415 SdpSimulcast: parsed primary ssrc 2407539919
index.js:424 SdpSimulcast: Have not seen primary ssrc before, generating source data
interop.js:346 The description does not look like plan-b
toUnifiedPlan @ interop.js:346
Logger.js:154 2022-02-21T08:41:58.139Z [modules/RTC/BridgeChannel.js] <WebSocket.e.onopen>: websocket channel opened
Logger.js:154 2022-02-21T08:41:58.141Z [JitsiConferenceEventManager.js] <r.>: (TIME) data.channel.opened: 25491.400000000373
Logger.js:154 2022-02-21T08:41:58.143Z [modules/RTC/BridgeChannel.js] <Kr.sendNewReceiverVideoConstraintsMessage>: Sending ReceiverVideoConstraints with {“constraints”:{“483f3157”:{“maxHeight”:180},“e2f334bd”:{“maxHeight”:2160}},“defaultConstraints”:{“maxHeight”:0},“lastN”:-1,“onStageEndpoints”:[“e2f334bd”],“selectedEndpoints”:}
Logger.js:154 2022-02-21T08:41:58.151Z [modules/RTC/BridgeChannel.js] <WebSocket.e.onmessage>: Received ServerHello, version=undefined.
Logger.js:154 2022-02-21T08:41:58.189Z [modules/xmpp/JingleSessionPC.js] <br.sendSessionAccept>: JingleSessionPC[session=JVB,initiator=false,sid=c5cgnk9eub9ho] Sending session-accept
Logger.js:154 2022-02-21T08:41:58.193Z [modules/xmpp/JingleSessionPC.js] <ha.peerconnection.oniceconnectionstatechange>: (TIME) ICE checking JVB: 25544.200000001118
Logger.js:154 2022-02-21T08:41:58.279Z [modules/xmpp/JingleSessionPC.js] <br.sendIceCandidate>: JingleSessionPC[session=JVB,initiator=false,sid=c5cgnk9eub9ho] sendIceCandidate: last candidate
Logger.js:154 2022-02-21T08:41:58.280Z [modules/xmpp/JingleSessionPC.js] <ha.peerconnection.oniceconnectionstatechange>: (TIME) ICE connected JVB: 25630.60000000149
Logger.js:154 2022-02-21T08:41:58.343Z [modules/xmpp/strophe.jingle.js] <Rr.onJingle>: Found a JSON-encoded element in source-add, translating to standard Jingle.
Logger.js:154 2022-02-21T08:41:58.355Z [modules/xmpp/JingleSessionPC.js] JingleSessionPC[session=JVB,initiator=false,sid=c5cgnk9eub9ho] Processing addRemoteStream
index.js:146 Halt: There are no SSRC groups in the remote description.
Logger.js:154 2022-02-21T08:41:58.391Z [modules/xmpp/JingleSessionPC.js] <br.sendIceCandidates>: JingleSessionPC[session=JVB,initiator=false,sid=c5cgnk9eub9ho] sendIceCandidates [{“candidate”:“candidate:664034207 1 udp 2122260223 10.21.16.54 59496 typ host generation 0 ufrag 48l9 network-id 1”,“sdpMid”:“0”,“sdpMLineIndex”:0},{“candidate”:“candidate:1763157871 1 tcp 1518280447 10.21.16.54 9 typ host tcptype active generation 0 ufrag 48l9 network-id 1”,“sdpMid”:“0”,“sdpMLineIndex”:0}]
Logger.js:154 2022-02-21T08:41:58.397Z [modules/RTC/BridgeChannel.js] <WebSocket.e.onmessage>: SenderVideoConstraints: {“idealHeight”:2160}
Logger.js:154 2022-02-21T08:41:58.398Z [modules/xmpp/JingleSessionPC.js] <br.setSenderVideoConstraint>: JingleSessionPC[session=JVB,initiator=false,sid=c5cgnk9eub9ho] setSenderVideoConstraint: 2160
Logger.js:154 2022-02-21T08:41:58.400Z [modules/RTC/TraceablePeerConnection.js] <ha.setSenderVideoConstraints>: TPC[id=1,type=JVB] Setting degradation preference [preference=maintain-framerate,track=LocalTrack[2,video]
Logger.js:154 2022-02-21T08:41:58.403Z [modules/RTC/TraceablePeerConnection.js] <ha.setSenderVideoConstraints>: TPC[id=1,type=JVB] setting max height=2160,encodings=[{“active”:true,“adaptivePtime”:false,“networkPriority”:“low”,“priority”:“low”,“maxBitrate”:200000},{“active”:true,“adaptivePtime”:false,“networkPriority”:“low”,“priority”:“low”,“maxBitrate”:700000},{“active”:true,“adaptivePtime”:false,“networkPriority”:“low”,“priority”:“low”,“maxBitrate”:2500000}]
Logger.js:154 2022-02-21T08:41:58.404Z [modules/RTC/TraceablePeerConnection.js] <ha._remoteTrackAdded>: TPC[id=1,type=JVB] adding remote track for stream[id=483f3157-audio-1,type=audio]
Logger.js:154 2022-02-21T08:41:58.404Z [modules/RTC/TraceablePeerConnection.js] <ha._remoteTrackAdded>: TPC[id=1,type=JVB] creating remote track[endpoint=483f3157,ssrc=2413170594,type=audio,sourceName=undefined]
interop.js:346 The description does not look like plan-b
toUnifiedPlan @ interop.js:346
JitsiRemoteTrack.js:224 (TIME) Render audio: 25950.60000000149
JitsiRemoteTrack.js:243 (TIME) TTFM audio: -369.5
Logger.js:154 2022-02-21T08:41:58.609Z [modules/xmpp/JingleSessionPC.js] JingleSessionPC[session=JVB,initiator=false,sid=c5cgnk9eub9ho] addRemoteStream - OK
Logger.js:154 2022-02-21T08:41:58.621Z [modules/RTC/BridgeChannel.js] <Kr.sendNewReceiverVideoConstraintsMessage>: Sending ReceiverVideoConstraints with {“constraints”:{“483f3157”:{“maxHeight”:180},“e2f334bd”:{“maxHeight”:2160}},“defaultConstraints”:{“maxHeight”:0},“lastN”:-1,“onStageEndpoints”:[“e2f334bd”],“selectedEndpoints”:}
Logger.js:154 2022-02-21T08:41:58.621Z [modules/xmpp/JingleSessionPC.js] <br.setSenderVideoConstraint>: JingleSessionPC[session=JVB,initiator=false,sid=c5cgnk9eub9ho] setSenderVideoConstraint: 2160
Logger.js:154 2022-02-21T08:41:58.622Z [modules/RTC/TraceablePeerConnection.js] <ha.setSenderVideoConstraints>: TPC[id=1,type=JVB] Setting degradation preference [preference=maintain-framerate,track=LocalTrack[2,video]
Logger.js:154 2022-02-21T08:41:58.624Z [modules/RTC/TraceablePeerConnection.js] <ha.setSenderVideoConstraints>: TPC[id=1,type=JVB] setting max height=2160,encodings=[{“active”:true,“adaptivePtime”:false,“maxBitrate”:200000,“networkPriority”:“low”,“priority”:“low”},{“active”:true,“adaptivePtime”:false,“maxBitrate”:700000,“networkPriority”:“low”,“priority”:“low”},{“active”:true,“adaptivePtime”:false,“maxBitrate”:2500000,“networkPriority”:“low”,“priority”:“low”}]
Logger.js:154 2022-02-21T08:42:18.311Z [modules/RTC/BridgeChannel.js] <Kr.sendNewReceiverVideoConstraintsMessage>: Sending ReceiverVideoConstraints with {“constraints”:{“483f3157”:{“maxHeight”:2160}},“defaultConstraints”:{“maxHeight”:0},“lastN”:-1,“onStageEndpoints”:,“selectedEndpoints”:}
Logger.js:154 2022-02-21T08:42:18.325Z [modules/RTC/BridgeChannel.js] <Kr.sendNewReceiverVideoConstraintsMessage>: Sending ReceiverVideoConstraints with {“constraints”:{“483f3157”:{“maxHeight”:720}},“defaultConstraints”:{“maxHeight”:0},“lastN”:-1,“onStageEndpoints”:,“selectedEndpoints”:}
Logger.js:182 2022-02-21T08:42:18.646Z [modules/UI/videolayout/LargeVideoManager.js] hover in 483f3157
Logger.js:154 2022-02-21T08:42:20.688Z [modules/RTC/BridgeChannel.js] <Kr.sendNewReceiverVideoConstraintsMessage>: Sending ReceiverVideoConstraints with {“constraints”:{“483f3157”:{“maxHeight”:720}},“defaultConstraints”:{“maxHeight”:0},“lastN”:-1,“onStageEndpoints”:[“483f3157”],“selectedEndpoints”:}
Logger.js:154 2022-02-21T08:42:20.690Z [modules/RTC/BridgeChannel.js] <Kr.sendNewReceiverVideoConstraintsMessage>: Sending ReceiverVideoConstraints with {“constraints”:{“483f3157”:{“maxHeight”:2160}},“defaultConstraints”:{“maxHeight”:0},“lastN”:-1,“onStageEndpoints”:[“483f3157”],“selectedEndpoints”:}
Logger.js:154 2022-02-21T08:42:23.508Z [modules/RTC/BridgeChannel.js] <Kr.sendNewReceiverVideoConstraintsMessage>: Sending ReceiverVideoConstraints with {“constraints”:{“483f3157”:{“maxHeight”:2160}},“defaultConstraints”:{“maxHeight”:0},“lastN”:-1,“onStageEndpoints”:,“selectedEndpoints”:}
Logger.js:154 2022-02-21T08:42:23.513Z [modules/RTC/BridgeChannel.js] <Kr.sendNewReceiverVideoConstraintsMessage>: Sending ReceiverVideoConstraints with {“constraints”:{“483f3157”:{“maxHeight”:720}},“defaultConstraints”:{“maxHeight”:0},“lastN”:-1,“onStageEndpoints”:,“selectedEndpoints”:}
Logger.js:154 2022-02-21T08:42:25.984Z [modules/RTC/BridgeChannel.js] <Kr.sendNewReceiverVideoConstraintsMessage>: Sending ReceiverVideoConstraints with {“constraints”:{“483f3157”:{“maxHeight”:720}},“defaultConstraints”:{“maxHeight”:0},“lastN”:-1,“onStageEndpoints”:[“483f3157”],“selectedEndpoints”:}
Logger.js:154 2022-02-21T08:42:25.986Z [modules/RTC/BridgeChannel.js] <Kr.sendNewReceiverVideoConstraintsMessage>: Sending ReceiverVideoConstraints with {“constraints”:{“483f3157”:{“maxHeight”:2160}},“defaultConstraints”:{“maxHeight”:0},“lastN”:-1,“onStageEndpoints”:[“483f3157”],“selectedEndpoints”:}
Logger.js:154 2022-02-21T08:42:27.808Z [modules/RTC/BridgeChannel.js] <Kr.sendNewReceiverVideoConstraintsMessage>: Sending ReceiverVideoConstraints with {“constraints”:{“483f3157”:{“maxHeight”:180},“e2f334bd”:{“maxHeight”:2160}},“defaultConstraints”:{“maxHeight”:0},“lastN”:-1,“onStageEndpoints”:[“e2f334bd”],“selectedEndpoints”:}
Logger.js:182 2022-02-21T08:42:28.118Z [modules/UI/videolayout/LargeVideoManager.js] hover in e2f334bd

There was an issue with the port set for websocket in jvb.conf - I think the screenshare quality has improved after fixing that. The browser logs pasted is the one got after fixing the port issue.

Can you please confirm that the websocket config played a role with the screenshare quality?

Does this mean Chrome uses websockets but Firefox uses the http port 9090 and that’s why there was no problem when the source was firefox?

If the WS channel with the bridge is not properly functioning it won’t be possible for the client to select which resolution it requires and will get stuck on the lowest. So yeah, it does have an impact.

Thanks-this gives good clarity. Does this mean Firefox is not dependent on WS?

Also, in general is there a guide which talks on the steps to be taken care while upgrading Jitsi Meet across versions? Have I missed it?

It would be of great help if my questions (in the original post) regarding the understanding of frame rate and simulcast could be clarified, although the community has helped me confirm the actual issue

All browsers rely on the WS channel.

No, there isn’t. In general things should Just Work ™, but in real life, there are many different setups and since you jumped so many releases, something must have not worked.

No.

There is a dedicated config option for disabling simulcast.

Disabling simulcast means every participant would send a 720p stream to everyone else. That’s not going to work.

In addition, there was a major move from SCTP multiplexing to colibri websockets in 2020, if I recall the date correctly. You were supposed to migrate your deployment at that time. Every new release since then has been configured to run websockets by default.

Thanks @Freddie and @saghul for explaining so many things.