mirror of
https://github.com/fluxerapp/fluxer
synced 2026-10-17 13:05:32 +09:00
fix(voice): allow av1 and vp9 screen shares in firefox (#3108)
This commit is contained in:
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';
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user