fix virtual camera support (#1215)

Co-authored-by: V <vendicated@riseup.net>
This commit is contained in:
creations
2025-12-24 15:24:32 +01:00
committed by GitHub
co-authored by V
parent e9ff3cbb3b
commit d372a6d165
@@ -7,33 +7,45 @@
import { Logger } from "@vencord/types/utils";
import { MediaEngineStore } from "renderer/common";
const logger = new Logger("FixAutoGain");
const logger = new Logger("VesktopStreamFixes");
function fixTrackConstraints(constraint: MediaTrackConstraints) {
function fixAudioTrackConstraints(constraint: MediaTrackConstraints) {
const target = constraint.advanced?.find(opt => Object.hasOwn(opt, "autoGainControl")) ?? constraint;
target.autoGainControl = MediaEngineStore.getAutomaticGainControl();
}
function fixStreamConstraints(constraints: MediaStreamConstraints | undefined) {
if (!constraints?.audio) return;
function fixVideoTrackConstraints(constraint: MediaTrackConstraints) {
if (typeof constraint.deviceId === "string" && constraint.deviceId !== "default") {
constraint.deviceId = { exact: constraint.deviceId };
}
}
function fixStreamConstraints(constraints: MediaStreamConstraints | undefined) {
if (!constraints) return;
if (constraints.audio) {
if (typeof constraints.audio !== "object") {
constraints.audio = {};
}
fixAudioTrackConstraints(constraints.audio);
}
fixTrackConstraints(constraints.audio);
if (constraints.video) {
if (typeof constraints.video !== "object") {
constraints.video = {};
}
fixVideoTrackConstraints(constraints.video);
}
}
const originalGetUserMedia = navigator.mediaDevices.getUserMedia;
navigator.mediaDevices.getUserMedia = function (constraints) {
try {
fixStreamConstraints(constraints);
logger.debug("Fixed getUserMedia constraints", constraints);
} catch (e) {
logger.error("Failed to fix getUserMedia constraints", e);
}
return originalGetUserMedia.call(this, constraints);
};
@@ -41,10 +53,13 @@ const originalApplyConstraints = MediaStreamTrack.prototype.applyConstraints;
MediaStreamTrack.prototype.applyConstraints = function (constraints) {
if (constraints) {
try {
fixTrackConstraints(constraints);
logger.debug("Fixed applyConstraints constraints", constraints);
if (this.kind === "audio") {
fixAudioTrackConstraints(constraints);
} else if (this.kind === "video") {
fixVideoTrackConstraints(constraints);
}
} catch (e) {
logger.error("Failed to fix applyConstraints constraints", e);
logger.error("Failed to fix constraints", e);
}
}
return originalApplyConstraints.call(this, constraints);