Firefox and Safari: endless loop with 'toUnifiedPlan'?

I have a docker based setup for jitsi with a custom angular frontend using lib-jitsi-meet (using official releases). For signalling I use BOSH and no websocket, RTP uses a TURN server.

The environment is freshly created when required, approx. once per two weeks using docker-compose and freshly pulled images on a freshly created server.

The application worked great for some time. But since a couple of weeks the following effect started:
Chrome works great as usual.
Safari and Firefox seem to have an endless loop working with SDP data.
The console shows the message “this does not look like plan-b” approx. 100times per second and the CPU load is quite high. This seems to be caused by the “toUnifiedPlan” method.
Using the profiling tools of the browser it seems to be triggered by “renegotiationneed”.

In “about:webrtc” many many sdp data elements are visible, but the view crashes and I can’t copy paste anything from there.

In addition to that huge amounts of memory are used. I could pinpoint that to the ‘trace’ method that pushes debug information into an unbounded array. Patching that to retain only a single entry mitigated the memory problem, but did not solve the overall problem.

This graphics shows the flame graph of a single iteration of the seemingly endless loop

I tried various setting changes, but no effect.
I tried updating the sdp-transform npm in a custom lib-jitsi-meet build, it did not help.
I disabled the bandwidth estimation in the jitsi server side, it did not help.

What can I do to get this fixed?

BTW: I could not reproduce this on meet.jit.si.

Can you describe the steps for reproducing this issue ?
Do you have p2p enabled ? Can you check if this goes away when p2p is disabled ?

P2P is disabled, simulcast is disabled. Authentication on TURN server uses JWT.

Tested if disabling audio levels has an effect, does not seem to have any.

Steps: Join conference with at least two users. Chrome has no problem, firefox and safari (desktop/ios) have.

If only safari or firefox is present, nothing happens until another user joins, then the problem occurs.

I would love to provide more detailed steps, but I have no clue what causes it.

Should I provide data from the about:webrtc (once I am able to get it?)
Turning on debug logging on the console immediately overwhelms the browser, I can’t get the data.

Would it help to provide you with a sample environment with the issue occurring?

This is the firefox console after about a second running, notice the many log repetitions about the plan-b

What version of the client are you using ? Some of these issues might have been fixed in the unstable. Does it happen all the time or only when join with sources muted ?

1 Like

I think the sources are muted since we don’t add audio/video tracks after the user toggles it. But we don’t set the config option explicitly but I think that would not be honored by the custom client anyway.

A custom build using the git master of lib-jitsi-meet as of dd902dd33 did not solve the problem.

Adding audio or video manually after joining did not fix the problem.
Using lib-jitsi-meet.min.js as deployed on meet.jit.si showed the same issue.

1 Like

I could gather a little more information using the info loglevel and halting via the debugger before the console overflowed / froze the browser.

jitsi

Using a similar approach I tried to gather “debug” level information from the browser. Unfortunately the beginning of the output is truncated.
Perhaps this could help diagnosing the issue?

output.txt (87.0 KB)

Can you pls check if this PR fixes the issue ? fix(RTC): Set transceiver direction after RTCRtpSender#replaceTrack. by jallamsetty1 · Pull Request #1618 · jitsi/lib-jitsi-meet · GitHub

1 Like

I checked it out, but it did not seem to fix the issue. (I checked only on Firefox)

For reference, this is how I built it

mkdir /tmp/jitsi             
cd /tmp/jitsi || exit
git clone --depth 1 https://github.com/jitsi/lib-jitsi-meet
cd lib-jitsi-meet || exit
npm install
curl -sSL -o - https://patch-diff.githubusercontent.com/raw/jitsi/lib-jitsi-meet/pull/1618.patch | patch -p1
npm run postinstall

In addition I tested with the :unstable tagged docker images for prosody/jvb/jicofo, does not seem to change anything.

Is there anything I can do to help triage the cause?

I have tried to cleanup the logs further by removing the SDP data from the trace. This is a snippet of two seconds without the SDP data, gathered on a local development setup (without TURN):

2021-05-21T18:45:33.436Z [JitsiMeetJS.js] <init>:  Analytics disabled, disposing. lib-jitsi-meet.min.js:31280
2021-05-21T18:45:33.436Z [modules/statistics/AnalyticsAdapter.js] <dispose>:  Disposing of analytics adapter. lib-jitsi-meet.min.js:31280
2021-05-21T18:45:33.437Z [modules/xmpp/xmpp.js] <_initStrophePlugins>:  P2P STUN servers:  
Array(3) [ {…}, {…}, {…} ]
lib-jitsi-meet.min.js:31280
2021-05-21T18:45:33.444Z [modules/xmpp/xmpp.js] <connectionHandler>:  (TIME) Strophe connecting:	 8564 lib-jitsi-meet.min.js:31280
2021-05-21T18:45:33.689Z [modules/RTC/RTCUtils.js] <onMediaDevicesListChanged>:  list of media devices has changed: 
Array(4) [ MediaDeviceInfo, MediaDeviceInfo, MediaDeviceInfo, MediaDeviceInfo ]
lib-jitsi-meet.min.js:31280
2021-05-21T18:45:33.690Z [modules/RTC/RTCUtils.js] <init/<>:  Available devices:  
Array(4) [ MediaDeviceInfo, MediaDeviceInfo, MediaDeviceInfo, MediaDeviceInfo ]
lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.256Z [modules/xmpp/XmppConnection.js] <_maybeEnableStreamResume>:  Stream resume enabled, but WebSockets are not enabled lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.256Z [modules/xmpp/strophe.ping.js] <startInterval>:  XMPP pings will be sent every 10000 ms lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.258Z [modules/xmpp/xmpp.js] <connectionHandler>:  (TIME) Strophe connected:	 9377 lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.258Z [modules/xmpp/xmpp.js] <connectionHandler>:  My Jabber ID: 65c237c3-e503-4a10-8461-5b47a3534fc7@meet.jitsi/W9JdwFgo lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.266Z [modules/RTC/CodecSelection.js] <CodecSelection>:  Codec preferences for the conference are JVB: vp8,
            P2P: h264 lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.268Z [modules/xmpp/xmpp.js] <createRoom>:  JID 65c237c3-e503-4a10-8461-5b47a3534fc7@meet.jitsi/W9JdwFgo using MUC nickname 65c237c3 lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.268Z [modules/xmpp/ChatRoom.js] <ChatRoom>:  Joined MUC as conference@muc.meet.jitsi/65c237c3 lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.269Z [modules/e2eping/e2eping.js] <E2ePing>:  Initializing e2e ping; pingInterval=-1, analyticsInterval=60000. lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.269Z [modules/qualitycontrol/ReceiveVideoController.js] <updateLastN>:  Updating ReceiverVideoConstraints lastN(1) lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.270Z [modules/connectivity/ParticipantConnectionStatus.js] <ParticipantConnectionStatusHandler>:  RtcMuteTimeout set to: 10000 lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.271Z [modules/statistics/AvgRTPStatsReporter.js] <AvgRTPStatsReporter>:  Avg RTP stats will be calculated every 15 samples lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.272Z [JitsiConference.js] <JitsiConference>:  backToP2PDelay: 5 lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.272Z [modules/videosipgw/VideoSIPGW.js] <VideoSIPGW>:  creating VideoSIPGW lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.273Z [modules/xmpp/moderator.js] <Moderator.prototype.setFocusUserJid>:  Focus jid set to:  undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.273Z [modules/xmpp/moderator.js] <Moderator.prototype.createConferenceIq>:  Session ID: null machine UID: fdb63212f81461daff8170e7199f2ef1 lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.589Z [modules/xmpp/strophe.jingle.js] <getStunAndTurnCredentials/<>:  getting turn credentials with extdisco:2 failed, trying extdisco:1 
<iq id="a126fbf0-5dcf-48d5-b624-5a4c93171e31:sendIQ" from="meet.jitsi" xmlns="jabber:client" type="error" to="65c237c3-e503-4a10-8461-…fc7@meet.jitsi/W9JdwFgo">
lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.763Z [modules/xmpp/moderator.js] <Moderator.prototype.setFocusUserJid>:  Focus jid set to:  focus@auth.meet.jitsi lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.764Z [modules/xmpp/moderator.js] <Moderator.prototype.parseConfigOptions>:  Authentication enabled: true lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.766Z [modules/xmpp/moderator.js] <Moderator.prototype.parseConfigOptions>:  External authentication enabled: true lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.768Z [modules/xmpp/moderator.js] <Moderator.prototype.parseConfigOptions>:  Sip gateway enabled:  false lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.769Z [modules/xmpp/strophe.jingle.js] <getStunAndTurnCredentials/</<>:  getting turn credentials failed 
<iq id="9d60b75f-67ef-4d1c-8610-1ad103e3b778:sendIQ" from="meet.jitsi" xmlns="jabber:client" type="error" to="65c237c3-e503-4a10-8461-…fc7@meet.jitsi/W9JdwFgo">
lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.770Z [modules/xmpp/strophe.jingle.js] <getStunAndTurnCredentials/</<>:  is mod_turncredentials or similar installed and configured? lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.794Z [modules/xmpp/ChatRoom.js] <onPresence>:  entered conference@muc.meet.jitsi/de802395 
Object { affiliation: "owner", role: "moderator", jid: "de802395-c88c-43fb-907b-abd274911b56@meet.jitsi/xFXrbiwl", isFocus: false, isHiddenDomain: false, statsID: "Noble-J7E" }
lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.796Z [modules/xmpp/ChatRoom.js] <onPresence>:  entered conference@muc.meet.jitsi/4a2c0fd7 
Object { affiliation: "owner", role: "moderator", jid: "4a2c0fd7-68af-4e6a-a008-2220564599aa@meet.jitsi/ER2a5VJZ", isFocus: false, isHiddenDomain: false, statsID: "Pattie-L4C" }
lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.797Z [modules/event/Jvb121EventGenerator.js] <evaluateStatus>:  JVB121 status true => false lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.798Z [modules/xmpp/ChatRoom.js] <onPresence>:  entered conference@muc.meet.jitsi/3eb81cbf 
Object { affiliation: "owner", role: "moderator", jid: "3eb81cbf-15b9-40f2-bf36-772f25deb0e6@meet.jitsi/tz4Gz4gp", isFocus: false, isHiddenDomain: false, statsID: "Pattie-L4C" }
lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.799Z [modules/xmpp/ChatRoom.js] <onPresence>:  entered conference@muc.meet.jitsi/focus 
Object { affiliation: "owner", role: "moderator", jid: "focus@auth.meet.jitsi/focus", isFocus: true, isHiddenDomain: false }
lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.800Z [modules/version/ComponentsVersions.js] <ComponentsVersions.prototype.processVersions/<>:  Got focus version: 1.0.754 lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.800Z [modules/xmpp/ChatRoom.js] <onPresence>:  Jicofo supports restart by terminate: true lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.802Z [modules/xmpp/ChatRoom.js] <onPresence>:  (TIME) MUC joined:	 9921 lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.802Z [JitsiConference.js] <JitsiConference.prototype._maybeStartOrStopP2P>:  Auto P2P disabled lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.803Z [modules/xmpp/ChatRoom.js] <onMessage>:  Subject is changed to lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.946Z [modules/xmpp/strophe.jingle.js] <onJingle>:  on jingle session-initiate from conference@muc.meet.jitsi/focus 
<iq id="NjVjMjM3YzMtZTUwMy00YTEw…wB9MKAL27uLVhq/q96wolfF" from="conference@muc.meet.jitsi/focus" xmlns="jabber:client" type="set" to="65c237c3-e503-4a10-8461-…fc7@meet.jitsi/W9JdwFgo">
lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.947Z [modules/xmpp/strophe.jingle.js] <onJingle>:  (TIME) received session-initiate:	 10066 lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.947Z [modules/xmpp/strophe.jingle.js] <onJingle>:  Marking session from conference@muc.meet.jitsi/focus as *not* P2P lib-jitsi-meet.min.js:31280
SdpSimulcast: using 3 layers lib-jitsi-meet.min.js:58490
2021-05-21T18:45:34.951Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection>:  Create new TPC[1,JVB] lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.952Z [modules/RTC/BridgeChannel.js] <BridgeChannel>:  constructor() with peerconnection lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.953Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  createDataChannel JVB data channel lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.954Z [modules/xmpp/JingleSessionPC.js] <setOfferAnswerCycle>:  Queued setOfferAnswerCycle task on JingleSessionPC[JVB,initiator=false,sid=fllcuu45j1ebq] lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.955Z [JitsiConference.js] <JitsiConference.prototype._acceptJvbIncomingCall>:  Starting CallStats for JVB connection... lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.955Z [modules/statistics/RTPStatsCollector.js] <StatsCollector.prototype.start>:  Using RTCRtpSynchronizationSource for remote audio levels lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.958Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  onnegotiationneeded undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.959Z [modules/RTC/TraceablePeerConnection.js] <remoteDescription>:  getRemoteDescription no remoteDescription found lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.963Z [modules/RTC/TraceablePeerConnection.js] <localDescription>:  getLocalDescription no localDescription found lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.964Z [modules/xmpp/JingleSessionPC.js] <_responderRenegotiate>:  Renegotiate: setting remote description lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.965Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  setRemoteDescription::preTransform undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.971Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  setRemoteDescription::postTransform (Unified) undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.975Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  onsignalingstatechange have-remote-offer lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.975Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection.prototype._remoteTrackAdded>:  TPC[1,JVB] ignored remote 'stream added' event for non-user streamid: mixedmslabel lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.976Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection.prototype._remoteTrackAdded>:  TPC[1,JVB] ignored remote 'stream added' event for non-user streamid: mixedmslabel lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.983Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  setRemoteDescriptionOnSuccess undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.984Z [modules/xmpp/JingleSessionPC.js] <_responderRenegotiate/<>:  Renegotiate: creating answer lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.984Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  createAnswer {
 "offerToReceiveAudio": true,
 "offerToReceiveVideo": true
} lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.985Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  createAnswerOnSuccess::preTransform undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.986Z [modules/RTC/TraceablePeerConnection.js] <handleSuccess>:  Got local SSRCs MAP:  
Map(0)
lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.987Z [modules/xmpp/JingleSessionPC.js] <_responderRenegotiate/</<>:  Renegotiate: setting local description lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.987Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  setLocalDescription::preTransform undefined lib-jitsi-meet.min.js:31280
The description does not look like plan-b lib-jitsi-meet.min.js:55717
2021-05-21T18:45:34.988Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  setLocalDescription::postTransform (Unified Plan) undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.990Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  onsignalingstatechange stable lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.991Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  setLocalDescriptionOnSuccess undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.991Z [modules/xmpp/JingleSessionPC.js] <setOfferAnswerCycle/<>:  setOfferAnswerCycle task on JingleSessionPC[JVB,initiator=false,sid=fllcuu45j1ebq] done. lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.992Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getLocalDescription::preTransform undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.994Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getLocalDescription::postTransform (Plan B) undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.995Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getLocalDescription::postTransform (inject ssrc group) undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.998Z [modules/xmpp/JingleSessionPC.js] <sendSessionAccept>:  Sending session-accept 
<iq to="conference@muc.meet.jitsi/focus" type="set" xmlns="jabber:client">
lib-jitsi-meet.min.js:31280
2021-05-21T18:45:34.999Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  onnegotiationneeded undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.000Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getRemoteDescription::preTransform undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.002Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getRemoteDescription::postTransform (Plan B) undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.003Z [modules/xmpp/JingleSessionPC.js] <doInitialize/this.peerconnection.onnegotiationneeded>:  onnegotiationneeded fired on TPC[1,JVB] in state: stable lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.003Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  onicecandidate {
 "candidate": "candidate:0 1 UDP 2122252543 94adf4d5-bade-4bce-90e5-42177acfdc67.local 33046 typ host",
 "sdpMid": "0",
 "sdpMLineIndex": 0,
 "usernameFragment": "6e736af5"
} lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.005Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getLocalDescription::preTransform undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.007Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getLocalDescription::postTransform (Plan B) undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.009Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getLocalDescription::postTransform (inject ssrc group) undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.011Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  onicecandidate {
 "candidate": "candidate:1 1 TCP 2105524479 94adf4d5-bade-4bce-90e5-42177acfdc67.local 9 typ host tcptype active",
 "sdpMid": "0",
 "sdpMLineIndex": 0,
 "usernameFragment": "6e736af5"
} lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.013Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getLocalDescription::preTransform undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.014Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getLocalDescription::postTransform (Plan B) undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.015Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getLocalDescription::postTransform (inject ssrc group) undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.039Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  onicecandidate {
 "candidate": "",
 "sdpMid": "0",
 "sdpMLineIndex": 0,
 "usernameFragment": "6e736af5"
} lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.040Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getLocalDescription::preTransform undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.042Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getLocalDescription::postTransform (Plan B) undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.043Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getLocalDescription::postTransform (inject ssrc group) undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.044Z [modules/xmpp/JingleSessionPC.js] <sendIceCandidate>:  sendIceCandidate: last candidate. lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.044Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  onicecandidate null lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.045Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getLocalDescription::preTransform undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.045Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getLocalDescription::postTransform (Plan B) undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.046Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getLocalDescription::postTransform (inject ssrc group) undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.047Z [modules/xmpp/JingleSessionPC.js] <sendIceCandidate>:  sendIceCandidate: last candidate. lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.047Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getLocalDescription::preTransform undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.048Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getLocalDescription::postTransform (Plan B) undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.049Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getLocalDescription::postTransform (inject ssrc group) undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.050Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getRemoteDescription::preTransform undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.052Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getRemoteDescription::postTransform (Plan B) undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.053Z [modules/xmpp/JingleSessionPC.js] <_responderRenegotiate>:  Renegotiate: setting remote description lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.053Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  setRemoteDescription::preTransform undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.054Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  setRemoteDescription::postTransform (Unified) undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.056Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  oniceconnectionstatechange checking lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.056Z [modules/xmpp/JingleSessionPC.js] <doInitialize/this.peerconnection.oniceconnectionstatechange>:  (TIME) ICE checking JVB:	 10176 lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.057Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  onsignalingstatechange have-remote-offer lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.057Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  setRemoteDescriptionOnSuccess undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.057Z [modules/xmpp/JingleSessionPC.js] <_responderRenegotiate/<>:  Renegotiate: creating answer lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.058Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  createAnswer {
 "offerToReceiveAudio": true,
 "offerToReceiveVideo": true
} lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.059Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  createAnswerOnSuccess::preTransform undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.059Z [modules/RTC/TraceablePeerConnection.js] <handleSuccess>:  Got local SSRCs MAP:  
Map(0)
lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.060Z [modules/xmpp/JingleSessionPC.js] <_responderRenegotiate/</<>:  Renegotiate: setting local description lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.060Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  setLocalDescription::preTransform undefined lib-jitsi-meet.min.js:31280
The description does not look like plan-b lib-jitsi-meet.min.js:55717
2021-05-21T18:45:35.061Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  setLocalDescription::postTransform (Unified Plan) undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.062Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  onsignalingstatechange stable lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.063Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  setLocalDescriptionOnSuccess undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.063Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getLocalDescription::preTransform undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.065Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getLocalDescription::postTransform (Plan B) undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.066Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getLocalDescription::postTransform (inject ssrc group) undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.068Z [modules/xmpp/JingleSessionPC.js] <doInitialize/this.peerconnection.onnegotiationneeded/<>:  onnegotiationneeded executed - OK on JingleSessionPC[JVB,initiator=false,sid=fllcuu45j1ebq] lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.068Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  onnegotiationneeded undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.069Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getRemoteDescription::preTransform undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.071Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getRemoteDescription::postTransform (Plan B) undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.072Z [modules/xmpp/JingleSessionPC.js] <doInitialize/this.peerconnection.onnegotiationneeded>:  onnegotiationneeded fired on TPC[1,JVB] in state: stable lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.072Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getLocalDescription::preTransform undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.073Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getLocalDescription::postTransform (Plan B) undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.073Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getLocalDescription::postTransform (inject ssrc group) undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.074Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getRemoteDescription::preTransform undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.075Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getRemoteDescription::postTransform (Plan B) undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.076Z [modules/xmpp/JingleSessionPC.js] <_responderRenegotiate>:  Renegotiate: setting remote description lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.076Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  setRemoteDescription::preTransform undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.077Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  setRemoteDescription::postTransform (Unified) undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.079Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  onsignalingstatechange have-remote-offer lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.080Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  setRemoteDescriptionOnSuccess undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.080Z [modules/xmpp/JingleSessionPC.js] <_responderRenegotiate/<>:  Renegotiate: creating answer lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.080Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  createAnswer {
 "offerToReceiveAudio": true,
 "offerToReceiveVideo": true
} lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.081Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  createAnswerOnSuccess::preTransform undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.081Z [modules/RTC/TraceablePeerConnection.js] <handleSuccess>:  Got local SSRCs MAP:  
Map(0)
lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.082Z [modules/xmpp/JingleSessionPC.js] <_responderRenegotiate/</<>:  Renegotiate: setting local description lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.082Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  setLocalDescription::preTransform undefined lib-jitsi-meet.min.js:31280
The description does not look like plan-b lib-jitsi-meet.min.js:55717
2021-05-21T18:45:35.083Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  setLocalDescription::postTransform (Unified Plan) undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.084Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  onsignalingstatechange stable lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.084Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  setLocalDescriptionOnSuccess undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.084Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getLocalDescription::preTransform undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.085Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getLocalDescription::postTransform (Plan B) undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.087Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getLocalDescription::postTransform (inject ssrc group) undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.088Z [modules/xmpp/JingleSessionPC.js] <doInitialize/this.peerconnection.onnegotiationneeded/<>:  onnegotiationneeded executed - OK on JingleSessionPC[JVB,initiator=false,sid=fllcuu45j1ebq] lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.088Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  onnegotiationneeded undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.088Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getRemoteDescription::preTransform undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.089Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getRemoteDescription::postTransform (Plan B) undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.090Z [modules/xmpp/JingleSessionPC.js] <doInitialize/this.peerconnection.onnegotiationneeded>:  onnegotiationneeded fired on TPC[1,JVB] in state: stable lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.090Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getLocalDescription::preTransform undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.092Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getLocalDescription::postTransform (Plan B) undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.093Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getLocalDescription::postTransform (inject ssrc group) undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.093Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getRemoteDescription::preTransform undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.095Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  getRemoteDescription::postTransform (Plan B) undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.095Z [modules/xmpp/JingleSessionPC.js] <_responderRenegotiate>:  Renegotiate: setting remote description lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.095Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  setRemoteDescription::preTransform undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.096Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  setRemoteDescription::postTransform (Unified) undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.099Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  onsignalingstatechange have-remote-offer lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.099Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  setRemoteDescriptionOnSuccess undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.099Z [modules/xmpp/JingleSessionPC.js] <_responderRenegotiate/<>:  Renegotiate: creating answer lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.100Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  createAnswer {
 "offerToReceiveAudio": true,
 "offerToReceiveVideo": true
} lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.103Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  createAnswerOnSuccess::preTransform undefined lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.103Z [modules/RTC/TraceablePeerConnection.js] <handleSuccess>:  Got local SSRCs MAP:  
Map(0)
lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.104Z [modules/xmpp/JingleSessionPC.js] <_responderRenegotiate/</<>:  Renegotiate: setting local description lib-jitsi-meet.min.js:31280
2021-05-21T18:45:35.104Z [modules/RTC/TraceablePeerConnection.js] <TraceablePeerConnection/this.trace>:  setLocalDescription::preTransform undefined lib-jitsi-meet.min.js:31280
The description does not look like plan-b

This looks very much like Sample Jitsi Project freezes Firefox when inviting Chrome · Issue #1382 · jitsi/lib-jitsi-meet · GitHub

Using git bisect it seems like this change ref: Always use a websocket if offered, remove the openSctp option. (… · jitsi/lib-jitsi-meet@1285f29 · GitHub is the first commit when the problem occurs.

Using ffcd4b2a does not show the problem with firefox, I will test Safari tomorrow.

Since in #1382 the “fix” seems to be using websockets as bridge channel, could it be the case that the rtc bridgechannel type causing a race condition leading to the endless loop? Though it is strange that this only happens after the logic to determine the bridge channel type changed.

@Boris_Grozev could you have a look at this?

I changed the current master revision by reverting the changes from 1285f29 and all problems with Firefox and Safari (macOS/iOS) vanished. Since using websockets is not an option in our environment I would be really happy if a fix could be provided upstream.

Have you enabled websockets in the bridge?

Is this true or false in your jvb config?

This is the section of the config

   websockets {
        enabled = false
        domain = "localhost:8443"
        tls = true
        server-id = "172.26.0.5"
    }

If websockets are enabled, an http error is logged in the browser network tab since I did not correctly configure the websocket forwarding. Which is good to notice if websockets are accidentally enabled.
These are the docker environment variables

 $ grep WEBSOCKET .env
 ENABLE_COLIBRI_WEBSOCKET=0
 ENABLE_XMPP_WEBSOCKET=0
1 Like

We don’t want to enable websockets as our experience is that the current setup works good even with users in enterprise environments.

Are you able to triage the bug I described?

Provided that you are talking about websockets in the bridge, you are fighting a losing battle. It’s clear that the Jitsi project and everyone using it have switched to websockets and are not using sctp anymore, so if you don’t want to use websockets for the bridge you will have to either fork the project and maintain yourself the sctp version with security patches and all, or use another sofware.