这是indexloc提供的服务,不要输入任何密码
Skip to content

Not able to present screen on Google Meet, Zoom , MS teams #2636

@deeptrue-AI

Description

@deeptrue-AI
  • Min Version:
  • Operating system:

electron/shell/renderer/electron_ipc_native.cc:30] Attempted to get the 'ipcNative' object but it was missing [61811:0904/185325.116630:ERROR:third_party/webrtc/pc/sdp_offer_answer.cc:430] A BUNDLE group contains a codec collision for payload_type='111. All codecs must share the same type, encoding name, clock rate and parameters.

Expected Behavior

Actual Behavior

To Reproduce

Presented screen on Google meet.

Here's a chatGPT thread with the solution.

https://chatgpt.com/share/68b998d9-2218-8006-825f-4f8c24d7c3de

✅ Steps to fully support Google Meet screen share in Electron

  1. Use a recent Electron version

Google Meet is very picky about Chromium + WebRTC version.

Make sure you’re on Electron v30+ (Chromium 124+) or later.
Older builds have codec mismatches (payload_type=111 collision you saw).

  1. Enable getDisplayMedia

Meet relies on navigator.mediaDevices.getDisplayMedia.
By default, Electron disables it unless explicitly turned on.

const win = new BrowserWindow({
webPreferences: {
nodeIntegration: false,
contextIsolation: true,
sandbox: true,
webSecurity: true,
enableBlinkFeatures: 'getDisplayMedia'
}
});

This makes Meet’s native screen picker show up instead of failing.

  1. Handle permissions properly

Electron will block capture unless you explicitly grant it.

const { session } = require('electron');

session.defaultSession.setPermissionRequestHandler((webContents, permission, callback) => {
if (permission === 'media' || permission === 'display-capture') {
callback(true); // ✅ allow screen share + mic/cam
} else {
callback(false);
}
});

Without this, the Meet UI may appear but clicking Share won’t do anything.

  1. Fix the codec collision

If you’re still seeing:

A BUNDLE group contains a codec collision for payload_type='111'

That’s a WebRTC bug with multiple Opus entries. Usually fixed in newer Electron, but if it persists:

Force SDP cleanup on the renderer side:

function fixSdpCollision(sdp) {
const lines = sdp.split('\n');
const seen = new Set();
return lines.filter(line => {
if (line.startsWith('a=rtpmap:111')) {
if (seen.has('111')) return false;
seen.add('111');
}
return true;
}).join('\n');
}

const pc = new RTCPeerConnection();
pc.createOffer().then(offer => {
offer.sdp = fixSdpCollision(offer.sdp);
return pc.setLocalDescription(offer);
});

Google Meet’s client already prefers Opus → so deduping 111 is safe.

  1. Test your flow

Go to meet.google.com inside your Electron browser.

Join a meeting.

Click Present now → A tab / A window / Entire screen.

You should see the native Chrome-style picker, not a blank popup.

🚨 Limitations to know:

Some DRM’d or restricted streams (like Netflix tab share) may still fail — that’s expected in Electron.

You need to keep Electron updated regularly; Google Meet breaks often if your Chromium is behind.

Hardware acceleration should stay enabled (app.disableHardwareAcceleration() should NOT be used).

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions