jitsi / jitsi-meet

Jitsi Meet - Secure, Simple and Scalable Video Conferences that you use as a standalone app or embed in your web application.
https://jitsi.org/meet
Apache License 2.0
22.69k stars 6.66k forks source link

Screen share freeze jitsi meet #14916

Closed kasAlx closed 1 month ago

kasAlx commented 1 month ago

What happened?

In the process of broadcasting the screen, the video stream freezes for some participants. The problem started around 06/20/2024. Some participants have a black screen instead of broadcasting. It happens more often when a high-resolution screen is broadcast. It helps the participants to reschedule the meeting, but it is very inconvenient. There is no error information in the logs. There is a hypothesis that may be related to ws JVB, but it is unclear how it can be solved.

Platform

Browser / app / sdk version

2.0.9457

Relevant log output

No response

Reproducibility

More details?

No response

saghul commented 1 month ago

What versions of the server software are you running? Please share your config.js also.

kasAlx commented 1 month ago

What versions of the server software are you running? Please share your config.js also.

JVB", "version": "2.3.105-ge155b81e" "JiCoFo","version":"1.0.1078" Prosody 0.12.4 jitsi-meet-web 1.0.7952-1


var config = {};
config.hosts = {};
config.hosts.domain = 'jitsi.<<domain>>';
config.focusUserJid = 'focus@auth.jitsi.<<domain>>';

var subdir = '<!--# echo var="subdir" default="" -->';
var subdomain = '<!--# echo var="subdomain" default="" -->';
if (subdir.startsWith('<!--')) {
    subdir = '';
}
if (subdomain) {
    subdomain = subdomain.substring(0,subdomain.length-1).split('.').join('_').toLowerCase() + '.';
}
config.hosts.muc = 'conference.' + subdomain + 'jitsi.<<domain>>';
// Domain for authenticated users. Defaults to <domain>.
config.hosts.authdomain = 'jitsi.<<domain>>';
config.bosh = 'https://jitsi.<<domain>>/' + subdir + 'http-bind';
config.websocket = 'wss://jitsi.<<domain>>/' + subdir + 'xmpp-websocket';

// Video configuration.
//

config.resolution = 1080;
config.constraints = {
    video: {
        height: { ideal: 1080, max: 1080, min: 720 },
        width: { ideal: 1920, max: 1920, min: 1024},
    }
};

config.startVideoMuted = 3;
config.startWithVideoMuted = false;

config.flags = {
    sourceNameSignaling: true,
    sendMultipleVideoStreams: true,
    receiveMultipleVideoStreams: true
};

// ScreenShare Configuration.
//

// Audio configuration.
//

config.enableNoAudioDetection = true;
config.enableTalkWhileMuted = false;
config.disableAP = false;

config.audioQuality = {
    stereo: false
};

config.startAudioOnly = false;
config.startAudioMuted = 3;
config.startWithAudioMuted = false;
config.startSilent = false;
config.enableOpusRed = false;
config.disableAudioLevels = false;
config.enableNoisyMicDetection = true;

// Peer-to-Peer options.
//

config.p2p = {
    enabled: false
};

// Breakout Rooms
//

config.hideAddRoomButton = false;

// Etherpad
//

// Recording.
//

config.hiddenDomain = 'recorder.jitsi.<<domain>>';

config.recordingService = {
    // Whether to enable file recording or not using the "service" defined by the finalizer in Jibri
    enabled: true,

    // Whether to show the possibility to share file recording with other people
    // (e.g. meeting participants), based on the actual implementation
    // on the backend.
    sharingEnabled: false
};

// Live streaming configuration.
config.liveStreaming = {
    enabled: false,
    dataPrivacyLink: 'https://policies.google.com/privacy',
    helpLink: 'https://jitsi.org/live',
    termsLink: 'https://www.youtube.com/t/terms',
    validatorRegExpString: '^(?:[a-zA-Z0-9]{4}(?:-(?!$)|$)){4}'
};

// Local recording configuration.
config.localRecording = {
    disable: false,
    notifyAllParticipants: true,
    disableSelfRecording: true
};

// Analytics.
//

config.analytics = {};

// Dial in/out services.
//

// Calendar service integration.
//

config.enableCalendarIntegration = false;

// Invitation service.
//

// Miscellaneous.
//

// Prejoin page.
config.prejoinConfig = {
    enabled: true,

    // Hides the participant name editing field in the prejoin screen.
    hideDisplayName: true
};

// List of buttons to hide from the extra join options dropdown on prejoin screen.
// Welcome page.
config.welcomePage = {
    disabled: true
};

// Close page.
config.enableClosePage = false;

// Default language.
// Require users to always specify a display name.
config.requireDisplayName = true;

// Chrome extension banner.
// Disables profile and the edit of all fields from the profile settings (display name and email)
config.disableProfile = false;

// Room password (false for anything, number for max digits)
config.roomPasswordNumberOfDigits = false;
// Advanced.
//

// Transcriptions (subtitles and buttons can be configured in interface_config)
config.transcription = {
    enabled: false,
    translationLanguages: [],
    translationLanguagesHead: ['en'],
    useAppLanguage: true,
    preferredLanguage: 'en-US',
    disableStartForAll: false,
    autoCaptionOnRecord: false,
};

// Dynamic branding
// Deployment information.
//

config.deploymentInfo = {};

// Deep Linking
config.disableDeepLinking = true; 

// P2P preferred codec
// Video quality settings.
//

config.videoQuality = {};
config.videoQuality.preferredCodec = 'AV1';
config.videoQuality.av1 = {};

config.videoQuality.av1.low = 512000;

config.videoQuality.av1.standard = 1600000;

config.videoQuality.av1.high = 2600000;

config.videoQuality.av1.fullHd = 4200000;

config.videoQuality.av1.ultraHd = 6800000;

config.videoQuality.av1.ssHigh = 8192000;
config.videoQuality.h264 = {};

config.videoQuality.h264.low = 512000;

config.videoQuality.h264.standard = 1024000;

config.videoQuality.h264.high = 2048000;

config.videoQuality.h264.fullHd = 4196000;

config.videoQuality.h264.ultraHd = 8192000;

config.videoQuality.h264.ssHigh = 12800000;
config.videoQuality.vp8 = {};

config.videoQuality.vp8.low = 256000;

config.videoQuality.vp8.standard = 1024000;

config.videoQuality.vp8.high = 2048000;

config.videoQuality.vp8.fullHd = 4096000;

config.videoQuality.vp8.ssHigh = 12800000;
config.videoQuality.vp9 = {};

config.videoQuality.vp9.low = 256000;

config.videoQuality.vp9.standard = 512000;

config.videoQuality.vp9.high = 2048000;

config.videoQuality.vp9.fullHd = 4096000;

config.videoQuality.vp9.ultraHd = 8192000;
// Reactions
config.disableReactions = false;

// Polls
config.disablePolls = false;

// Configure toolbar buttons
// Hides the buttons at pre-join screen
// Configure remote participant video menu
config.remoteVideoMenu = {
    disabled: false,
    disableKick: false,
    disableGrantModerator: false,
    disablePrivateChat: true
};

// Configure e2eping
config.e2eping = {
    enabled: false
};

// Settings for the Excalidraw whiteboard integration.
config.whiteboard = {
    enabled: false,
    collabServerBaseUrl: ''
};

// Testing
config.testing = {
    enableAv1Support: true
};
config.videoQuality.codecPreferenceOrder= [ 'H264','AV1','VP9','VP8' ];
 // 'VP9', 'VP8', 'H264'
config.tileView.disabled=false;
config.tileView.numberOfVisibleTiles=20
config.disableTileView=true
config.mainToolbarButtons= [
       [ 'microphone', 'camera', 'desktop', 'chat', 'raisehand', 'recording', 'participants-pane', 'tileview' ],
       [ 'microphone', 'camera', 'desktop', 'chat', 'raisehand', 'recording', 'tileview' ],
       [ 'microphone', 'camera', 'desktop', 'chat', 'raisehand', 'participants-pane' ],
       [ 'microphone', 'camera', 'desktop', 'tileview', 'participants-pane' ],
       [ 'microphone', 'camera', 'chat', 'participants-pane' ],
       [ 'microphone', 'camera', 'chat' ],
       [ 'microphone', 'camera' ]
   ];
saghul commented 1 month ago

config.videoQuality.codecPreferenceOrder= [ 'H264','AV1','VP9','VP8' ];

I don't think we support H.264 very well, right @jallamsetty1 ?

jallamsetty1 commented 1 month ago

There is a Chrome bug with H.264 and screenshare. When the content doesn't change and capture fps drops to 0, screenshare doesn't recover after that. Can you try disabling hardware accelerated encode on the screensharer and see if it fixes for them until the fix lands in Chrome?

jallamsetty1 commented 1 month ago

Or you can switch to one of the other codecs since this is specific to H.264 only.

kasAlx commented 1 month ago

Or you can switch to one of the other codecs since this is specific to H.264 only.

We switched the codec to AV1, let's see how the broadcast changes.

jallamsetty1 commented 1 month ago

Or you can switch to one of the other codecs since this is specific to H.264 only.

We switched the codec to AV1, let's see how the broadcast changes.

Are you running into the frozen screenshare issue with AV1?

kasAlx commented 1 month ago

Or you can switch to one of the other codecs since this is specific to H.264 only.

We switched the codec to AV1, let's see how the broadcast changes.

Are you running into the frozen screenshare issue with AV1?

Good afternoon! Yes, the problem continues, yesterday at one employee's meeting, immediately after turning on the screen demonstration, the broadcast became of poor quality, and then turned into a black screen, when trying to restart the broadcast, the black screen immediately appeared. At the same time, another employee in this meeting broadcast the video normally.

kasAlx commented 1 month ago

Or you can switch to one of the other codecs since this is specific to H.264 only.

We switched the codec to AV1, let's see how the broadcast changes.

Are you running into the frozen screenshare issue with AV1?

Good afternoon! Yes, the problem continues, yesterday at one employee's meeting, immediately after turning on the screen demonstration, the broadcast became of poor quality, and then turned into a black screen, when trying to restart the broadcast, the black screen immediately appeared. At the same time, another employee in this meeting broadcast the video normally.

There may also have been problems with Internet speed. I'm trying to repeat it on a stable Internet.

kasAlx commented 1 month ago

Good afternoon! Today the problem has repeated itself, the sequence of actions: 1. The speaker turned on the microphone and video camera. 2. Started the screen broadcast. 3. The broadcast froze after 30 seconds. For some reason, the H264 codec turned on and consumed quite a lot of traffic - as can be seen in the screenshot. IMG_6427

jallamsetty1 commented 1 month ago

The issue with H.264 is a Chromium bug that hasn't been fixed yet. We suggest switching to another codec until the fix is released.

kasAlx commented 1 month ago

The issue with H.264 is a Chromium bug that hasn't been fixed yet. We suggest switching to another codec until the fix is released.

We have set the config settings.videoQuality.codecPreferenceOrder= [ 'AV1','H264','VP9','VP8' ]; How to set it correctly so that H264 is not turned on ? Turn it off altogether?

jallamsetty1 commented 1 month ago

The issue with H.264 is a Chromium bug that hasn't been fixed yet. We suggest switching to another codec until the fix is released.

We have set the config settings.videoQuality.codecPreferenceOrder= [ 'AV1','H264','VP9','VP8' ]; How to set it correctly so that H264 is not turned on ? Turn it off altogether?

I suggest moving H.264 to the end of the list so that when endpoints that don't support AV1 join the call, the senders will switch to VP9 instead of H.264.

jallamsetty1 commented 1 month ago

Closing this issue since the root cause is a Chromium bug and no fix can be provided in the application.