Screen recording failure with MediaRecorder in Chrome 128 - DOMException

Hi all,

Trying to get the compliance screen recording to behave across a few different agent workstations. Everything was working fine until the recent Chrome update to 128.0.6613, and now recordings are just failing to start for a handful of users.

The browser console is throwing a specific error right when the session should be initializing. It’s not a permission denial, but it looks like a codec mismatch or a failure to negotiate the stream. The logs show this:

Uncaught (in promise) DOMException: Failed to execute 'start' on 'MediaRecorder': The provided constraints are not supported by the browser. 
at screen_capture.js:142:21
at async captureScreen (extension_runtime.js:45:12)

I’ve tried messing with the chrome://flags to force certain hardware acceleration settings and disabling the “Experimental Web Platform features” flag, but it didn’t do jack all. The recording policy is definitely active. I checked the retention settings using GET /api/v2/recording/mediaretentionpolicies/{policyId} and the policyId is correct and active, so it’s not a backend config issue.

Some agents are reporting that the mic stays hot but the screen capture never actually triggers the upload. Is there a specific Chrome flag for the new MediaStream API that needs to be toggled for Genesys Cloud recording? Or maybe something in the way the extension handles the VP8/VP9 handoff in this version?

Does anyone know if this is tied to a specific OS build or just the Chrome version?

GET /api/v2/recordings/screensessions/details

Chrome updates love to break the client-side recording hooks. If the browser’s tossing DOMExceptions, the agent’s experience is trashed and you’ve got gaps in your compliance logs. Use the endpoint above to see if the sessions are actually hitting the server or just dying in the browser. Workaround is usually forcing a cache clear and pinning the Chrome version until a patch drops.

// Quick check to see if the session is actually active on the backend 
// despite the Chrome DOMException
const response = await fetch('https://api.mypurecloud.com/api/v2/recordings/screensessions/details', {
 headers: { 'Authorization': `Bearer ${token}` }
});
const data = await response.json();
console.log(`Active sessions: ${data.totalActiveScreenRecordings}`);

Chrome 128 changed some of the internal handling for getDisplayMedia, which is likely why the MediaRecorder is choking. If the DOMException is hitting during the stream initialization, it’s usually a mismatch between the requested constraints and what the browser’s new security policy allows.

The developer docs for the Platform API mention that GET /api/v2/recordings/screensessions/details “Retrieves an object containing the total number of concurrent active screen recordings”. I’ve used this to figure out if the failure is purely client-side or if the session actually managed to register with the server before the browser killed it.

We hit a similar weirdness with a different stream last month where the browser thought the resource was busy. Spun up a quick Lambda to patch this by polling the session status so we could alert agents when their recording dropped without waiting for a compliance report.

Also, if you’re seeing timing offsets in your logs, it’s probably just the usual East Coast latency. I’ve noticed timestamps drifting by a few hundred milliseconds when hitting the v2 endpoints from US-East-1. Try forcing the browser to use a specific video constraint (like cursor: "always") to see if that bypasses the DOMException.