alyssaxuu/screenity · error
❌ No supported MIME types found
Error message
❌ No supported MIME types found
What it means
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.
Source
Thrown at src/pages/Recorder/mediaRecorderUtils.js:32
// boxes whose MediaRecorder then throws from start(), which loses the recording.
export function selectRecorderMime(stream = null) {
return (
MIME_TYPES.find(
(type) =>
MediaRecorder.isTypeSupported(type) &&
(!type.includes("mp4") || canStartMp4Recorder(stream, type)),
) || null
);
}
export function createMediaRecorder(
stream,
{ audioBitsPerSecond, videoBitsPerSecond }
) {
const mimeType = selectRecorderMime(stream);
if (!mimeType) {
throw new Error("❌ No supported MIME types found");
}
const recorder = new MediaRecorder(stream, {
mimeType,
audioBitsPerSecond,
videoBitsPerSecond,
});
// Carry our own container/mime: recorder.mimeType reflects it too, but the
// browser can normalize the string.
recorder.__screenityContainer = containerForMime(mimeType);
recorder.__screenityMime = mimeType;
return recorder;
}
View on GitHub (pinned to 512606387b)
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
Example fix
// before
const mimeType = selectRecorderMime(stream);
if (!mimeType) throw new Error("❌ No supported MIME types found");
// after
const mimeType = selectRecorderMime(stream)
?? (MediaRecorder.isTypeSupported("video/webm") ? "video/webm" : null);
if (!mimeType) return startWebCodecsFallback(stream); Defensive patterns
Strategy: fallback
Validate before calling
const supported = typeof MediaRecorder !== "undefined" &&
["video/webm;codecs=vp9,opus","video/webm;codecs=vp8,opus","video/webm","video/mp4"]
.some(t => MediaRecorder.isTypeSupported(t));
if (!supported) startWebCodecsFallback(); Type guard
function canRecordMime(stream) {
return typeof MediaRecorder !== "undefined" &&
["video/webm;codecs=vp9,opus","video/webm;codecs=vp8,opus","video/mp4"]
.some(t => MediaRecorder.isTypeSupported(t));
} Try / catch
try {
recorder = await createMediaRecorder(stream, opts);
} catch (e) {
if (String(e.message).includes("No supported MIME types")) {
recorder = new WebCodecsRecorder(stream, opts); // fallback engine
}
} Prevention
- 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
When it happens
Trigger: 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.
Common situations: 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.
Related errors
AI-assisted analysis of alyssaxuu/screenity@512606387b (2026-09-02).
Data as JSON: /api/errors/410c31f42671e93e.
Report an issue: GitHub.