{"record":{"id":"410c31f42671e93e","repo":"alyssaxuu/screenity","slug":"no-supported-mime-types-found","errorCode":null,"errorMessage":"❌ No supported MIME types found","messagePattern":"❌ No supported MIME types found","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/pages/Recorder/mediaRecorderUtils.js","lineNumber":32,"sourceCode":"// boxes whose MediaRecorder then throws from start(), which loses the recording.\nexport function selectRecorderMime(stream = null) {\n  return (\n    MIME_TYPES.find(\n      (type) =>\n        MediaRecorder.isTypeSupported(type) &&\n        (!type.includes(\"mp4\") || canStartMp4Recorder(stream, type)),\n    ) || null\n  );\n}\n\nexport function createMediaRecorder(\n  stream,\n  { audioBitsPerSecond, videoBitsPerSecond }\n) {\n  const mimeType = selectRecorderMime(stream);\n\n  if (!mimeType) {\n    throw new Error(\"❌ No supported MIME types found\");\n  }\n\n  const recorder = new MediaRecorder(stream, {\n    mimeType,\n    audioBitsPerSecond,\n    videoBitsPerSecond,\n  });\n  // Carry our own container/mime: recorder.mimeType reflects it too, but the\n  // browser can normalize the string.\n  recorder.__screenityContainer = containerForMime(mimeType);\n  recorder.__screenityMime = mimeType;\n  return recorder;\n}\n","sourceCodeStart":14,"sourceCodeEnd":46,"githubUrl":"https://github.com/alyssaxuu/screenity/blob/512606387b8d07dda5e63bb428bd063f0a2a3ed0/src/pages/Recorder/mediaRecorderUtils.js#L14-L46","documentation":"createMediaRecorder calls selectRecorderMime(stream) and throws when no MIME type offered by MediaRecorder.isTypeSupported matches the available tracks (audio/video combination). Without a supported container/codec string, MediaRecorder cannot be constructed reliably.","triggerScenarios":"The browser's MediaRecorder.isTypeSupported returns false for every candidate MIME for the given stream — e.g. a browser without MediaRecorder codec support, or a stream whose track kinds do not match any probed combination.","commonSituations":"Unsupported or uncommon browser (no webm/mp4 H.264 recording support), Safari/older Edge with limited codec sets, headless or embedded webviews lacking MediaRecorder codecs, hardware where H.264 encoding is disabled.","solutions":["Check MediaRecorder support and show a fallback (e.g. WebCodecs-based recording) before starting","Extend selectRecorderMime's candidate list to include more codecs/containers (mp4, h264, vp9, vp8, opus, aac)","Update the browser to a version with MediaRecorder codec support","Feature-detect window.MediaRecorder and isTypeSupported at app startup and surface a clear UX message"],"exampleFix":"// before\nconst mimeType = selectRecorderMime(stream);\nif (!mimeType) throw new Error(\"❌ No supported MIME types found\");\n// after\nconst mimeType = selectRecorderMime(stream)\n  ?? (MediaRecorder.isTypeSupported(\"video/webm\") ? \"video/webm\" : null);\nif (!mimeType) return startWebCodecsFallback(stream);","handlingStrategy":"fallback","validationCode":"const supported = typeof MediaRecorder !== \"undefined\" &&\n  [\"video/webm;codecs=vp9,opus\",\"video/webm;codecs=vp8,opus\",\"video/webm\",\"video/mp4\"]\n    .some(t => MediaRecorder.isTypeSupported(t));\nif (!supported) startWebCodecsFallback();","typeGuard":"function canRecordMime(stream) {\n  return typeof MediaRecorder !== \"undefined\" &&\n    [\"video/webm;codecs=vp9,opus\",\"video/webm;codecs=vp8,opus\",\"video/mp4\"]\n      .some(t => MediaRecorder.isTypeSupported(t));\n}","tryCatchPattern":"try {\n  recorder = await createMediaRecorder(stream, opts);\n} catch (e) {\n  if (String(e.message).includes(\"No supported MIME types\")) {\n    recorder = new WebCodecsRecorder(stream, opts); // fallback engine\n  }\n}","preventionTips":["Feature-detect MediaRecorder and isTypeSupported at startup","Include webm and mp4 candidates in the MIME probe list","Offer a non-MediaRecorder fallback recording path","Test on Safari/Firefox and codec-restricted Chromium builds"],"tags":["mediarecorder","browser-compatibility","mime","recording"],"backgroundTag":"no-supported-mime-type","analyzedSha":"512606387b8d07dda5e63bb428bd063f0a2a3ed0","analyzedAt":"2026-09-02T20:59:09.419Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-10T02:17:09.455Z"}