From 4e4e6eed0c31b90ed4cb7b1e44b5eabace7291c9 Mon Sep 17 00:00:00 2001 From: Vanilagy <1696106+Vanilagy@users.noreply.github.com> Date: Thu, 6 Aug 2026 11:07:15 +0200 Subject: [PATCH] Fix encodability checks throwing due to unsupported config feature set; now counts as not supported (fixes #456) --- src/encode.ts | 18 ++++++++++++++---- src/media-source.ts | 24 ++++++++++++++++++------ 2 files changed, 32 insertions(+), 10 deletions(-) diff --git a/src/encode.ts b/src/encode.ts index 1aacad2..656122d 100644 --- a/src/encode.ts +++ b/src/encode.ts @@ -1117,8 +1117,13 @@ export const canEncodeVideo = async ( } for (const { config, quantizer } of candidates) { - const support = await VideoEncoder.isConfigSupported(config); - if (!support.supported) { + try { + const support = await VideoEncoder.isConfigSupported(config); + if (!support.supported) { + continue; + } + } catch { + // Can type-error when unknown config features are used continue; } @@ -1245,8 +1250,13 @@ export const canEncodeAudio = async ( return false; } - const support = await AudioEncoder.isConfigSupported(encoderConfig); - return support.supported === true; + try { + const support = await AudioEncoder.isConfigSupported(encoderConfig); + return support.supported === true; + } catch { + // Can type-error when unknown config features are used + return false; + } })(); canEncodeAudioMemo.set(key, promise); diff --git a/src/media-source.ts b/src/media-source.ts index 67d872b..74bf8a7 100644 --- a/src/media-source.ts +++ b/src/media-source.ts @@ -705,10 +705,14 @@ class VideoEncoderWrapper { ); } - const support = await VideoEncoder.isConfigSupported(candidateConfig); - if (support.supported) { - selected = candidate; - break; + try { + const support = await VideoEncoder.isConfigSupported(candidateConfig); + if (support.supported) { + selected = candidate; + break; + } + } catch { + // Not supported } } @@ -2209,8 +2213,16 @@ class AudioEncoderWrapper { throw new Error('AudioEncoder is not supported by this browser.'); } - const support = await AudioEncoder.isConfigSupported(encoderConfig); - if (!support.supported) { + let supported: boolean; + + try { + const support = await AudioEncoder.isConfigSupported(encoderConfig); + supported = support.supported ?? false; + } catch { + supported = false; + } + + if (!supported) { throw new Error( `This specific encoder configuration (${encoderConfig.codec}, ${encoderConfig.bitrate} bps,` + ` ${encoderConfig.numberOfChannels} channels, ${encoderConfig.sampleRate} Hz) is not`