No video or audio (suddenly) for all participants

From last 5 days suddenly self hosted (EC2) jitsi stopped working, participants are not able to view video / audio from other participants. Where as if we open multiple tabs/browser windows on same laptop, it works fine.
We check all possible solutions, server is not behind NAT, ports are open. And it was working fine till last week, but suddenly stopped working without any changes on the server.
Please help us debug this.

Could be related to Plan B deprecation. What errors do you see in JS console?

In the browser long there is only one error -

Logger.js:154 2021-12-16T10:56:34.625Z [modules/xmpp/xmpp.js] <A.tryParseJSONAndVerify>:  SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)
    at A.tryParseJSONAndVerify (xmpp.js:723)
    at A._onPrivateMessage (xmpp.js:768)
    at I.Handler.run (strophe.umd.js:1875)
    at strophe.umd.js:3157
    at Object.forEachChild (strophe.umd.js:830)
    at I.Connection._dataRecv (strophe.umd.js:3146)
    at O.Bosh._onRequestStateChange (strophe.umd.js:5012)
o @ Logger.js:154
tryParseJSONAndVerify @ xmpp.js:743
_onPrivateMessage @ xmpp.js:768
run @ strophe.umd.js:1875
(anonymous) @ strophe.umd.js:3157
forEachChild @ strophe.umd.js:830
_dataRecv @ strophe.umd.js:3146
_onRequestStateChange @ strophe.umd.js:5012
XMLHttpRequest.send (async)
d @ strophe.umd.js:5123
_processRequest @ strophe.umd.js:5137
_throttledRequestHandler @ strophe.umd.js:5290
_onIdle @ strophe.umd.js:4901
_onIdle @ strophe.umd.js:3881
(anonymous) @ strophe.umd.js:3886
setTimeout (async)
_onIdle @ strophe.umd.js:3885
(anonymous) @ strophe.umd.js:3886
setTimeout (async)
_onIdle @ strophe.umd.js:3885
(anonymous) @ strophe.umd.js:3886
setTimeout (async)
_onIdle @ strophe.umd.js:3885
(anonymous) @ strophe.umd.js:3886
setTimeout (async)
_onIdle @ strophe.umd.js:3885
(anonymous) @ strophe.umd.js:3886
setTimeout (async)
_onIdle @ strophe.umd.js:3885
(anonymous) @ strophe.umd.js:3886
setTimeout (async)
_onIdle @ strophe.umd.js:3885
(anonymous) @ strophe.umd.js:5257
setTimeout (async)
_send @ strophe.umd.js:5256
send @ strophe.umd.js:2583
_onDiscoInfo @ strophe.disco.js:186
run @ strophe.umd.js:1875
(anonymous) @ strophe.umd.js:3157
forEachChild @ strophe.umd.js:830
_dataRecv @ strophe.umd.js:3146
_onRequestStateChange @ strophe.umd.js:5012
XMLHttpRequest.send (async)
d @ strophe.umd.js:5123
_processRequest @ strophe.umd.js:5137
_throttledRequestHandler @ strophe.umd.js:5290
_onIdle @ strophe.umd.js:4901
_onIdle @ strophe.umd.js:3881
(anonymous) @ strophe.umd.js:3886
setTimeout (async)
_onIdle @ strophe.umd.js:3885
(anonymous) @ strophe.umd.js:3886
setTimeout (async)
_onIdle @ strophe.umd.js:3885
(anonymous) @ strophe.umd.js:5257
setTimeout (async)
_send @ strophe.umd.js:5256
send @ strophe.umd.js:2583
sendIQ @ strophe.umd.js:2740
sendIQ @ XmppConnection.js:435
sendIceCandidates @ JingleSessionPC.js:746
(anonymous) @ JingleSessionPC.js:655
setTimeout (async)
sendIceCandidate @ JingleSessionPC.js:651
peerconnection.onicecandidate @ JingleSessionPC.js:442
A.peerconnection.onicecandidate @ TraceablePeerConnection.js:347
Logger.js:154

ON debugging the error I found → this variable JsonString is coming as empty string -

tryParseJSONAndVerify(jsonString) {
        try {
            const json = JSON.parse(jsonString);

            // Handle non-exception-throwing cases:
            // Neither JSON.parse(false) or JSON.parse(1234) throw errors,
            // hence the type-checking,
            // but... JSON.parse(null) returns null, and
            // typeof null === "object",
            // so we must check for that, too.
            // Thankfully, null is falsey, so this suffices:
            if (json && typeof json === 'object') {
                const type = json[JITSI_MEET_MUC_TYPE];

                if (typeof type !== 'undefined') {
                    return json;
                }

                logger.debug('parsing valid json but does not have correct '
                    + 'structure', 'topic: ', type);
            }
        } catch (e) {
            logger.error(e);

            return false;
        }

        return false;

Also attaching the following log → where some error is - Logger.js:154 2021-12-16T11:04:52.709Z [modules/xmpp/JingleSessionPC.js] Jingle error: {“reason”:“item-not-found”,“session”:“JingleSessionPC[p2p=true,initiator=false,sid=972916f3a0b1]”}

meet.techweirdo.in-1639652733594.log (529.7 KB)

I see this in your logs:

[Deprecation] Plan B SDP semantics, which is used when constructing an RTCPeerConnection with {sdpSemantics:“plan-b”}, is a legacy version of the Session Description Protocol that has severe compatibility issues on modern browsers. The standardized SDP format, “unified-plan”, has been used by default since M72 (January, 2019). Dropping support for Plan B is targeted for M93. See [WebRTC] Deprecate and Remove Plan B - Chrome Platform Status for more details, including the possibility of registering for a Deprecation Trial in order to extend the Plan B deprecation deadline for a limited amount of time.

You’re still using an old version of Jitsi that uses Plan B which is no longer supported in Chrome. You will need to upgrade to a more recent Jitsi that has moved on to using Unified Plan.

If upgrading is not an option for you, you can register for Origin Trial for your site to extend support till May (Origin Trials ) but you will need to upgrade eventually.

If you need more details about this, do search the forum as there are plenty of discussions regarding this.

1 Like

Thanks for pointing that out… I will first try to Origin Trial registration, and gradually upgrade.

It is resolved now. Thanks a lot for the help.

Awesome. Glad I could help. :+1: