Jitsi meet server reconnects every 30 seconds


#1

Good Day Jitsi
Thanks in advance for your support.
I have installed the jitsi meet server build out option.
The server reconnects every 30 seconds.
Can You please assist me with a config change that can be done.
Regards
Johan


#2

Can you please show us your JavaScript console logs?


#3

Good Day
Is there a specific file you require.
Regards
Johan


#4

This is the process I followed to install the server


#5

Hi Sir
My install path is /opt/jitsi-meet which files do you require?
Thanks
Johan


#6

Copy and paste here the contents of the javascript console from your browser (when the problem occurs) https://developers.google.com/web/tools/chrome-devtools/console/


#7
<link rel="stylesheet" href="css/all.css">

<script>
    window.indexLoadedTime = window.performance.now();
    console.log("(TIME) index.html loaded:\t", indexLoadedTime);
    // XXX the code below listeners for errors and displays an error message
    // in the document body when any of the required files fails to load.
    // The intention is to prevent from displaying broken page.
    var criticalFiles = [
        "config.js",
        "utils.js",
        "do_external_connect.js",
        "interface_config.js",
        "logging_config.js",
        "lib-jitsi-meet.min.js",
        "app.bundle.min.js",
        "all.css"
    ];
    var loadErrHandler = function(e) {
        var target = e.target;
        // Error on <script> and <link>(CSS)
        // <script> will have .src and <link> .href
        var fileRef = (target.src ? target.src : target.href);
        if (("SCRIPT" === target.tagName || "LINK" === target.tagName)
            && criticalFiles.some(
                function(file) { return fileRef.indexOf(file) !== -1 })) {
            window.onload = function() {
                // The whole complex part below implements page reloads with
                // "exponential backoff". The retry attempt is passes as
                // "rCounter" query parameter
                var href = window.location.href;

                var retryMatch = href.match(/.+(\?|&)rCounter=(\d+)/);
                var retryCountStr = retryMatch ? retryMatch[2] : "0";
                var retryCount = Number.parseInt(retryCountStr);

                if (retryMatch == null) {
                    var separator = href.indexOf("?") === -1 ? "?" : "&";
                    var hashIdx = href.indexOf("#");

                    if (hashIdx === -1) {
                        href += separator + "rCounter=1";
                    } else {
                        var hashPart = href.substr(hashIdx);

                        href = href.substr(0, hashIdx)
                            + separator + "rCounter=1" + hashPart;
                    }
                } else {
                    var separator = retryMatch[1];

                    href = href.replace(
                        /(\?|&)rCounter=(\d+)/,
                        separator + "rCounter=" + (retryCount + 1));
                }

                var delay = Math.pow(2, retryCount) * 2000;
                if (isNaN(delay) || delay < 2000 || delay > 60000)
                    delay = 10000;

                var showMoreText = "show more";
                var showLessText = "show less";

                document.body.innerHTML
                    = "<div style='"
                    + "position: absolute;top: 50%;left: 50%;"
                    + "text-align: center;"
                    + "font-size: medium;"
                    + "font-weight: 400;"
                    + "transform: translate(-50%, -50%)'>"
                    + "Uh oh! We couldn't fully download everything we needed :("
                    + "<br/> "
                    + "We will try again shortly. In the mean time, check for problems with your Internet connection!"
                    + "<br/><br/> "
                    + "<div id='moreInfo' style='"
                    + "display: none;'>" + "Missing " + fileRef
                    + "<br/><br/></div>"
                    + "<a id='showMore' style='"
                    + "text-decoration: underline;"
                    + "font-size:small;"
                    + "cursor: pointer'>" + showMoreText + "</a>"
                    + "&nbsp;&nbsp;&nbsp;"
                    + "<a href='" + href + "' style='"
                    + "text-decoration: underline;"
                    + "font-size:small;"
                    + "'>reload now</a>"
                    + "</div>";

                var showMoreElem = document.getElementById("showMore");
                showMoreElem.addEventListener('click', function () {
                        var moreInfoElem
                                = document.getElementById("moreInfo");

                        if (showMoreElem.innerHTML === showMoreText) {
                            moreInfoElem.setAttribute(
                                "style",
                                "display: block;"
                                + "color:#FF991F;"
                                + "font-size:small;"
                                + "user-select:text;");
                            showMoreElem.innerHTML = showLessText;
                        }
                        else {
                            moreInfoElem.setAttribute(
                                "style", "display: none;");
                            showMoreElem.innerHTML = showMoreText;
                        }
                    });

                window.setTimeout(
                    function () { window.location.replace(href); }, delay);

                // Call extra handler if defined.
                if (typeof postLoadErrorHandler === "function") {
                    postLoadErrorHandler(fileRef);
                }
            };
            window.removeEventListener(
                'error', loadErrHandler, true /* capture phase */);
        }
    };
    window.addEventListener(
        'error', loadErrHandler, true /* capture phase type of listener */);
</script>
<script>/* eslint-disable no-unused-vars, no-var */

var config = {
// Configuration
//

// Alternative location for the configuration.
// configLocation: './config.json',

// Custom function which given the URL path should return a room name.
// getroomnode: function (path) { return 'someprefixpossiblybasedonpath'; },


// Connection
//

hosts: {
    // XMPP domain.
    domain: 'btjitsi',

    // XMPP MUC domain. FIXME: use XEP-0030 to discover it.
    muc: 'conference.btjitsi'

    // When using authentication, domain for guest users.
    // anonymousdomain: 'guest.example.com',

    // Domain for authenticated users. Defaults to <domain>.
    // authdomain: 'btjitsi',

    // Jirecon recording component domain.
    // jirecon: 'jirecon.btjitsi',

    // Call control component (Jigasi).
    // call_control: 'callcontrol.btjitsi',

    // Focus component domain. Defaults to focus.<domain>.
    // focus: 'focus.btjitsi',
},

// BOSH URL. FIXME: use XEP-0156 to discover it.
bosh: '//btjitsi/http-bind',

// The name of client node advertised in XEP-0115 'c' stanza
clientNode: 'http://jitsi.org/jitsimeet',

// The real JID of focus participant - can be overridden here
// focusUserJid: 'focus@auth.btjitsi',


// Testing / experimental features.
//

testing: {
    // Enables experimental simulcast support on Firefox.
    enableFirefoxSimulcast: false,

    // P2P test mode disables automatic switching to P2P when there are 2
    // participants in the conference.
    p2pTestMode: false

    // Enables the test specific features consumed by jitsi-meet-torture
    // testMode: false
},

// Disables ICE/UDP by filtering out local and remote UDP candidates in
// signalling.
// webrtcIceUdpDisable: false,

// Disables ICE/TCP by filtering out local and remote TCP candidates in
// signalling.
// webrtcIceTcpDisable: false,


// Media
//

// Audio

// Disable measuring of audio levels.
// disableAudioLevels: false,

// Start the conference in audio only mode (no video is being received nor
// sent).
// startAudioOnly: false,

// Every participant after the Nth will start audio muted.
// startAudioMuted: 10,

// Start calls with audio muted. Unlike the option above, this one is only
// applied locally. FIXME: having these 2 options is confusing.
// startWithAudioMuted: false,

// Video

// Sets the preferred resolution (height) for local video. Defaults to 720.
// resolution: 720,

// w3c spec-compliant video constraints to use for video capture. Currently
// used by browsers that return true from lib-jitsi-meet's
// util#browser#usesNewGumFlow. The constraints are independency from
// this config's resolution value. Defaults to requesting an ideal aspect
// ratio of 16:9 with an ideal resolution of 1080p.
// constraints: {
//     video: {
//         aspectRatio: 16 / 9,
//         height: {
//             ideal: 1080,
//             max: 1080,
//             min: 240
//         }
//     }
// },

// Enable / disable simulcast support.
// disableSimulcast: false,

// Enable / disable layer suspension.  If enabled, endpoints whose HD
// layers are not in use will be suspended (no longer sent) until they
// are requested again.
// enableLayerSuspension: false,

// Suspend sending video if bandwidth estimation is too low. This may cause
// problems with audio playback. Disabled until these are fixed.
disableSuspendVideo: true,

// Every participant after the Nth will start video muted.
// startVideoMuted: 10,

// Start calls with video muted. Unlike the option above, this one is only
// applied locally. FIXME: having these 2 options is confusing.
// startWithVideoMuted: false,

// If set to true, prefer to use the H.264 video codec (if supported).
// Note that it's not recommended to do this because simulcast is not
// supported when  using H.264. For 1-to-1 calls this setting is enabled by
// default and can be toggled in the p2p section.
// preferH264: true,

// If set to true, disable H.264 video codec by stripping it out of the
// SDP.
// disableH264: false,

// Desktop sharing

// Enable / disable desktop sharing
// disableDesktopSharing: false,

// The ID of the jidesha extension for Chrome.
desktopSharingChromeExtId: null,

// Whether desktop sharing should be disabled on Chrome.
desktopSharingChromeDisabled: true,

// The media sources to use when using screen sharing with the Chrome
// extension.
desktopSharingChromeSources: [ 'screen', 'window', 'tab' ],

// Required version of Chrome extension
desktopSharingChromeMinExtVersion: '0.1',

// Whether desktop sharing should be disabled on Firefox.
desktopSharingFirefoxDisabled: false,

// Optional desktop sharing frame rate options. Default value: min:5, max:5.
// desktopSharingFrameRate: {
//     min: 5,
//     max: 5
// },

// Try to start calls with screen-sharing instead of camera video.
// startScreenSharing: false,

// Recording

// Whether to enable file recording or not.
// fileRecordingsEnabled: false,

// Whether to enable live streaming or not.
// liveStreamingEnabled: false,

// Misc

// Default value for the channel "last N" attribute. -1 for unlimited.
channelLastN: -1,

// Disables or enables RTX (RFC 4588) (defaults to false).
// disableRtx: false,

// Disables or enables TCC (the default is in Jicofo and set to true)
// (draft-holmer-rmcat-transport-wide-cc-extensions-01). This setting
// affects congestion control, it practically enables send-side bandwidth
// estimations.
// enableTcc: true,

// Disables or enables REMB (the default is in Jicofo and set to false)
// (draft-alvestrand-rmcat-remb-03). This setting affects congestion
// control, it practically enables recv-side bandwidth estimations. When
// both TCC and REMB are enabled, TCC takes precedence. When both are
// disabled, then bandwidth estimations are disabled.
// enableRemb: false,

// Defines the minimum number of participants to start a call (the default
// is set in Jicofo and set to 2).
// minParticipants: 2,

// Use XEP-0215 to fetch STUN and TURN servers.
// useStunTurn: true,

// Enable IPv6 support.
// useIPv6: true,

// Enables / disables a data communication channel with the Videobridge.
// Values can be 'datachannel', 'websocket', true (treat it as
// 'datachannel'), undefined (treat it as 'datachannel') and false (don't
// open any channel).
// openBridgeChannel: true,


// UI
//

// Use display name as XMPP nickname.
// useNicks: false,

// Require users to always specify a display name.
// requireDisplayName: true,

// Whether to use a welcome page or not. In case it's false a random room
// will be joined when no room is specified.
enableWelcomePage: true,

// Enabling the close page will ignore the welcome page redirection when
// a call is hangup.
// enableClosePage: false,

// Disable hiding of remote thumbnails when in a 1-on-1 conference call.
// disable1On1Mode: false,

// The minimum value a video's height (or width, whichever is smaller) needs
// to be in order to be considered high-definition.
minHDHeight: 540,

// Default language for the user interface.
// defaultLanguage: 'en',

// If true all users without a token will be considered guests and all users
// with token will be considered non-guests. Only guests will be allowed to
// edit their profile.
enableUserRolesBasedOnToken: false,

// Message to show the users. Example: 'The service will be down for
// maintenance at 01:00 AM GMT,
// noticeMessage: '',


// Stats
//

// Whether to enable stats collection or not in the TraceablePeerConnection.
// This can be useful for debugging purposes (post-processing/analysis of
// the webrtc stats) as it is done in the jitsi-meet-torture bandwidth
// estimation tests.
// gatherStats: false,

// To enable sending statistics to callstats.io you must provide the
// Application ID and Secret.
// callStatsID: '',
// callStatsSecret: '',

// enables callstatsUsername to be reported as statsId and used
// by callstats as repoted remote id
// enableStatsID: false

// enables sending participants display name to callstats
// enableDisplayNameInStats: false


// Privacy
//

// If third party requests are disabled, no other server will be contacted.
// This means avatars will be locally generated and callstats integration
// will not function.
// disableThirdPartyRequests: false,


// Peer-To-Peer mode: used (if enabled) when there are just 2 participants.
//

p2p: {
    // Enables peer to peer mode. When enabled the system will try to
    // establish a direct connection when there are exactly 2 participants
    // in the room. If that succeeds the conference will stop sending data
    // through the JVB and use the peer to peer connection instead. When a
    // 3rd participant joins the conference will be moved back to the JVB
    // connection.
    enabled: true,

    // Use XEP-0215 to fetch STUN and TURN servers.
    // useStunTurn: true,

    // The STUN servers that will be used in the peer to peer connections
    stunServers: [
        { urls: 'stun:stun.l.google.com:19302' },
        { urls: 'stun:stun1.l.google.com:19302' },
        { urls: 'stun:stun2.l.google.com:19302' }
    ],

    // Sets the ICE transport policy for the p2p connection. At the time
    // of this writing the list of possible values are 'all' and 'relay',
    // but that is subject to change in the future. The enum is defined in
    // the WebRTC standard:
    // https://www.w3.org/TR/webrtc/#rtcicetransportpolicy-enum.
    // If not set, the effective value is 'all'.
    // iceTransportPolicy: 'all',

    // If set to true, it will prefer to use H.264 for P2P calls (if H.264
    // is supported).
    preferH264: true

    // If set to true, disable H.264 video codec by stripping it out of the
    // SDP.
    // disableH264: false,

    // How long we're going to wait, before going back to P2P after the 3rd
    // participant has left the conference (to filter out page reload).
    // backToP2PDelay: 5
},

// A list of scripts to load as lib-jitsi-meet "analytics handlers".
// analyticsScriptUrls: [
//      "libs/analytics-ga.js", // google-analytics
//      "https://example.com/my-custom-analytics.js"
// ],

// The Google Analytics Tracking ID
// googleAnalyticsTrackingId = 'your-tracking-id-here-UA-123456-1',

// Information about the jitsi-meet instance we are connecting to, including
// the user region as seen by the server.
deploymentInfo: {
    // shard: "shard1",
    // region: "europe",
    // userRegion: "asia"
}

// List of undocumented settings used in jitsi-meet
/**
 autoRecord
 autoRecordToken
 debug
 debugAudioLevels
 deploymentInfo
 dialInConfCodeUrl
 dialInNumbersUrl
 dialOutAuthUrl
 dialOutCodesUrl
 disableRemoteControl
 displayJids
 enableLocalVideoFlip
 etherpad_base
 externalConnectUrl
 firefox_fake_device
 googleApiApplicationClientID
 iAmRecorder
 iAmSipGateway
 peopleSearchQueryTypes
 peopleSearchUrl
 requireDisplayName
 tokenAuthUrl
 */

// List of undocumented settings used in lib-jitsi-meet
/**
 _peerConnStatusOutOfLastNTimeout
 _peerConnStatusRtcMuteTimeout
 abTesting
 avgRtpStatsN
 callStatsConfIDNamespace
 callStatsCustomScriptUrl
 desktopSharingSources
 disableAEC
 disableAGC
 disableAP
 disableHPF
 disableNS
 enableLipSync
 enableTalkWhileMuted
 forceJVB121Ratio
 hiddenDomain
 ignoreStartMuted
 nick
 startBitrate
 */

};

/* eslint-enable no-unused-vars, no-var */

<script src="libs/do_external_connect.min.js?v=1"></script>
<script>/* eslint-disable no-unused-vars, no-var, max-len */

var interfaceConfig = {
// TO FIX: this needs to be handled from SASS variables. There are some
// methods allowing to use variables both in css and js.
DEFAULT_BACKGROUND: ‘#474747’,

/**
 * Whether or not the blurred video background for large video should be
 * displayed on browsers that can support it.
 */
DISABLE_VIDEO_BACKGROUND: false,

INITIAL_TOOLBAR_TIMEOUT: 20000,
TOOLBAR_TIMEOUT: 4000,
TOOLBAR_ALWAYS_VISIBLE: false,
DEFAULT_REMOTE_DISPLAY_NAME: 'Fellow Jitster',
DEFAULT_LOCAL_DISPLAY_NAME: 'me',
SHOW_JITSI_WATERMARK: true,
JITSI_WATERMARK_LINK: 'https://jitsi.org',

// if watermark is disabled by default, it can be shown only for guests
SHOW_WATERMARK_FOR_GUESTS: true,
SHOW_BRAND_WATERMARK: false,
BRAND_WATERMARK_LINK: '',
SHOW_POWERED_BY: false,
SHOW_DEEP_LINKING_IMAGE: false,
GENERATE_ROOMNAMES_ON_WELCOME_PAGE: true,
DISPLAY_WELCOME_PAGE_CONTENT: true,
APP_NAME: 'Jitsi Meet',
NATIVE_APP_NAME: 'Jitsi Meet',
LANG_DETECTION: false, // Allow i18n to detect the system language
INVITATION_POWERED_BY: true,

/**
 * If we should show authentication block in profile
 */
AUTHENTICATION_ENABLE: true,

/**
 * The name of the toolbar buttons to display in the toolbar. If present,
 * the button will display. Exceptions are "livestreaming" and "recording"
 * which also require being a moderator and some values in config.js to be
 * enabled. Also, the "profile" button will not display for user's with a
 * jwt.
 */
TOOLBAR_BUTTONS: [
    'microphone', 'camera', 'desktop', 'fullscreen', 'fodeviceselection', 'hangup',
    'profile', 'info', 'chat', 'recording', 'livestreaming', 'etherpad',
    'sharedvideo', 'settings', 'raisehand', 'videoquality', 'filmstrip',
    'invite', 'feedback', 'stats', 'shortcuts'
],

SETTINGS_SECTIONS: [ 'devices', 'language', 'moderator', 'profile' ],

// Determines how the video would fit the screen. 'both' would fit the whole
// screen, 'height' would fit the original video height to the height of the
// screen, 'width' would fit the original video width to the width of the
// screen respecting ratio.
VIDEO_LAYOUT_FIT: 'both',

/**
 * Whether to only show the filmstrip (and hide the toolbar).
 */
filmStripOnly: false,

/**
 * Whether to show thumbnails in filmstrip as a column instead of as a row.
 */
VERTICAL_FILMSTRIP: true,

// A html text to be shown to guests on the close page, false disables it
CLOSE_PAGE_GUEST_HINT: false,
RANDOM_AVATAR_URL_PREFIX: false,
RANDOM_AVATAR_URL_SUFFIX: false,
FILM_STRIP_MAX_HEIGHT: 120,

// Enables feedback star animation.
ENABLE_FEEDBACK_ANIMATION: false,
DISABLE_FOCUS_INDICATOR: false,
DISABLE_DOMINANT_SPEAKER_INDICATOR: false,

/**
 * Whether the ringing sound in the call/ring overlay is disabled. If
 * {@code undefined}, defaults to {@code false}.
 *
 * @type {boolean}
 */
DISABLE_RINGING: false,
AUDIO_LEVEL_PRIMARY_COLOR: 'rgba(255,255,255,0.4)',
AUDIO_LEVEL_SECONDARY_COLOR: 'rgba(255,255,255,0.2)',
POLICY_LOGO: null,
LOCAL_THUMBNAIL_RATIO: 16 / 9, // 16:9
REMOTE_THUMBNAIL_RATIO: 1, // 1:1
// Documentation reference for the live streaming feature.
LIVE_STREAMING_HELP_LINK: 'https://jitsi.org/live',

/**
 * Whether the mobile app Jitsi Meet is to be promoted to participants
 * attempting to join a conference in a mobile Web browser. If
 * {@code undefined}, defaults to {@code true}.
 *
 * @type {boolean}
 */
MOBILE_APP_PROMO: true,

/**
 * Maximum coeficient of the ratio of the large video to the visible area
 * after the large video is scaled to fit the window.
 *
 * @type {number}
 */
MAXIMUM_ZOOMING_COEFFICIENT: 1.3,

/*
 * If indicated some of the error dialogs may point to the support URL for
 * help.
 */
SUPPORT_URL: 'https://github.com/jitsi/jitsi-meet/issues/new',

/**
 * Whether the connection indicator icon should hide itself based on
 * connection strength. If true, the connection indicator will remain
 * displayed while the participant has a weak connection and will hide
 * itself after the CONNECTION_INDICATOR_HIDE_TIMEOUT when the connection is
 * strong.
 *
 * @type {boolean}
 */
CONNECTION_INDICATOR_AUTO_HIDE_ENABLED: true,

/**
 * How long the connection indicator should remain displayed before hiding.
 * Used in conjunction with CONNECTION_INDICATOR_AUTOHIDE_ENABLED.
 *
 * @type {number}
 */
CONNECTION_INDICATOR_AUTO_HIDE_TIMEOUT: 5000,

/**
 * If true, hides the connection indicators completely.
 *
 * @type {boolean}
 */
CONNECTION_INDICATOR_DISABLED: false,

/**
 * The name of the application connected to the "Add people" search service.
 */
// ADD_PEOPLE_APP_NAME: "",

/**
 * If true, hides the video quality label indicating the resolution status
 * of the current large video.
 *
 * @type {boolean}
 */
VIDEO_QUALITY_LABEL_DISABLED: false

/**
 * Specify custom URL for downloading android mobile app.
 */
// MOBILE_DOWNLOAD_LINK_ANDROID: 'https://play.google.com/store/apps/details?id=org.jitsi.meet',

/**
 * Specify URL for downloading ios mobile app.
 */
// MOBILE_DOWNLOAD_LINK_IOS: 'https://itunes.apple.com/us/app/jitsi-meet/id1165103905',

/**
 * Specify mobile app scheme for opening the app from the mobile browser.
 */
// APP_SCHEME: 'org.jitsi.meet'

};

/* eslint-enable no-unused-vars, no-var, max-len /




Jitsi Meet

<template id = "welcome-page-additional-content-template"></template>

#8

Installed a clean ubuntu 16.04lts server
then followed the default install as per the jitsi-meet instructions
the 30 second issue stil the same
so this must be a code issue in the product
please assist


#9


#10

gives this every 30 seconds


#11

In order to help we need some information.
You need to provide either a link to your deployment, so we can test it ourselves. Or send the content of the browser javascript console and jicofo logs that you can find in /var/log/jitsi folder, but send all jicofo.log* files. If you don’t want to upload them publicly send them to me damencho at jitsi.org.


#12

Good Day Damenncho

I have send You the info as requested.

Thanks for your support.

Regards

Johan


#13

Installation method

You can also use our Ubuntu/Debian repository:

First install the Jitsi repository key onto your system:
wget -qO - https://download.jitsi.org/jitsi-key.gpg.key | sudo apt-key add -
Create a sources.list.d file with the repository:
sudo sh -c “echo ‘deb https://download.jitsi.org stable/’ > /etc/apt/sources.list.d/jitsi-stable.list”
Update your package list:
sudo apt-get -y update
Install the full suite:
sudo apt-get -y install jitsi-meet


#14

private final static String SINGLE_PARTICIPANT_TIMEOUT_CONFIG_PNAME
= “org.jitsi.jicofo.SINGLE_PARTICIPANT_TIMEOUT”;

/**
 * The default value for {@link #maxSourcesPerUser}.
 */
private final static int DEFAULT_MAX_SSRC_PER_USER = 20;

/**
 * The default value for {@link #singleParticipantTimeout}.
 */
private final static long DEFAULT_SINGLE_PARTICIPANT_TIMEOUT = 20000;

/**
 * The name of the config property which specifies how long we're going to
 * wait for Jibri to start recording from the time it accepted START request
 */

#15

What do you mean by that?
This is the time for jicofo to wait when there is a single participant in the room, before destroying the call, just the media part, that participant UI does not change and user does not notice anything.
It has nothing to do with your problem.
You need to show me the browser js console log in order to see what is the problem, this is the initial step, without it we go in circles and keep guessing without fixing anything.


#16

Good Day I have emailed your last request, thanks


#17

strophe.js:5662 OPTIONS https://btjitsistd/http-bind?room=desperatereptiliansdrinkwearilynet::ERR_NAME_NOT_RESOLVED

The problem is that the setting in your config.js about bosh: contains a domain name which is not resolvable.

When you are installing jitsi-meet there is a prompt to enter the domain name of your deployment, that then you will use for accessing your deployment, like meet.jit si, it needs to have a valid dns entry as every website and to point the machine where you deploy jitsi-meet.


#18

Hi Sir

I will make the change thanks for your help.

Regards

Johan