-
-
Notifications
You must be signed in to change notification settings - Fork 801
Description
- 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
- 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).
- 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.
- 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.
- 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.
- 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).