fix(voice): allow av1 and vp9 screen shares in firefox (#3108)

This commit is contained in:
Hampus authored and GitHub committed 2026-10-02 14:08:41 +02:00
1 parent a9265cbb39
commit 2fb5fb1abb
5 files changed
+25 -28

No files matched your search

@@ -54,6 +54,7 @@ import {
supportsAV1,
supportsDynacast,
supportsH265,
supportsScalabilityMode,
supportsVideoCodec,
supportsVP9,
} from './room/utils.ts';
@@ -176,6 +177,7 @@ export {
supportsAV1,
supportsDynacast,
supportsH265,
supportsScalabilityMode,
supportsVideoCodec,
supportsVP9,
TrackPublication,
@@ -110,6 +110,7 @@ import {
selectPreferredVideoCodec,
sleep,
stopTransceiversForSender,
supportsScalabilityMode,
supportsVideoCodec,
usesLegacySVCEncodings,
} from '../utils.ts';
@@ -978,6 +979,9 @@ export default class LocalParticipant extends Participant {
}
const videoCodec = opts.videoCodec;
if (!supportsScalabilityMode()) {
delete opts.scalabilityMode;
}
track.on(TrackEvent.Muted, this.onTrackMuted);
track.on(TrackEvent.Unmuted, this.onTrackUnmuted);
@@ -1055,7 +1059,12 @@ export default class LocalParticipant extends Participant {
}
const svcSimulcast = isSVCSimulcast(videoCodec, opts);
if (isSVCCodec(videoCodec) && !svcSimulcast && track.source !== Track.Source.ScreenShare) {
if (
isSVCCodec(videoCodec) &&
!svcSimulcast &&
track.source !== Track.Source.ScreenShare &&
supportsScalabilityMode()
) {
opts.scalabilityMode = opts.scalabilityMode ?? 'L3T3_KEY';
}
@@ -66,7 +66,7 @@ export function supportsDynacast() {
}
export function supportsAV1(): boolean {
if (isSafari() || isFireFox()) {
if (isSafari()) {
return false;
}
return hasSenderMimeType('video/av1') || hasSenderMimeType('video/av1x');
@@ -80,9 +80,6 @@ export function supportsH265(): boolean {
}
export function supportsVP9(): boolean {
if (isFireFox()) {
return false;
}
if (isSafari()) {
const browser = getBrowser();
if (browser?.version && compareVersions(browser.version, '16') < 0) {
@@ -133,6 +130,10 @@ function hasSenderMimeType(mimeType: string): boolean {
return capabilities.codecs.some((codec) => codec.mimeType.toLowerCase() === lower);
}
export function supportsScalabilityMode(): boolean {
return !isFireFox();
}
export function isSVCCodec(codec?: string): boolean {
return codec === 'av1' || codec === 'vp9';
}