From 8162a628a1d2fc6152abdbb8daac498190489d0d Mon Sep 17 00:00:00 2001 From: davidkra230 Date: Thu, 5 Jun 2025 13:53:35 -0400 Subject: [PATCH] create the StreamingCodecDisabler plugin (#277) * create StreamingCodecDisabler * fixes * fix typo for av1 * Fixes --------- Co-authored-by: thororen1234 <78185467+thororen1234@users.noreply.github.com> --- README.md | 3 +- .../streamingCodecDisabler/index.ts | 81 +++++++++++++++++++ src/utils/constants.ts | 4 + 3 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 src/equicordplugins/streamingCodecDisabler/index.ts diff --git a/README.md b/README.md index f9f7103e..330c7b5d 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ You can join our [discord server](https://discord.gg/5Xh2W87egW) for commits, ch ### Extra included plugins
-183 additional plugins +184 additional plugins ### All Platforms @@ -160,6 +160,7 @@ You can join our [discord server](https://discord.gg/5Xh2W87egW) for commits, ch - StatusPresets by iamme - SteamStatusSync by niko - StickerBlocker by Samwich +- StreamingCodecDisabler by davidkra230 - TalkInReverse by Tolgchu - TeX by Kyuuhachi - TextToSpeech by Samwich diff --git a/src/equicordplugins/streamingCodecDisabler/index.ts b/src/equicordplugins/streamingCodecDisabler/index.ts new file mode 100644 index 00000000..47a38112 --- /dev/null +++ b/src/equicordplugins/streamingCodecDisabler/index.ts @@ -0,0 +1,81 @@ +/* + * Vencord, a Discord client mod + * Copyright (c) 2025 Vendicated and contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import { definePluginSettings, Settings } from "@api/Settings"; +import { EquicordDevs } from "@utils/constants"; +import definePlugin, { OptionType } from "@utils/types"; +import { findStoreLazy } from "@webpack"; + +const mediaEngine = findStoreLazy("MediaEngineStore"); + +const originalCodecStatuses: { + AV1: boolean, + H265: boolean, + H264: boolean; +} = { + AV1: true, + H265: true, + H264: true +}; + +const settings = definePluginSettings({ + disableAv1Codec: { + description: "Make Discord not consider using AV1 for streaming.", + type: OptionType.BOOLEAN, + default: false + }, + disableH265Codec: { + description: "Make Discord not consider using H265 for streaming.", + type: OptionType.BOOLEAN, + default: false + }, + disableH264Codec: { + description: "Make Discord not consider using H264 for streaming.", + type: OptionType.BOOLEAN, + default: false + }, +}); + +export default definePlugin({ + name: "StreamingCodecDisabler", + description: "Disable codecs for streaming of your choice", + authors: [EquicordDevs.davidkra230], + settings, + + patches: [ + { + find: "setVideoBroadcast(this.shouldConnectionBroadcastVideo", + replacement: { + match: /setGoLiveSource\(.,.\)\{/, + replace: "$&$self.updateDisabledCodecs();" + }, + } + ], + + async updateDisabledCodecs() { + mediaEngine.setAv1Enabled(originalCodecStatuses.AV1 && !Settings.plugins.StreamingCodecDisabler.disableAv1Codec); + mediaEngine.setH265Enabled(originalCodecStatuses.H265 && !Settings.plugins.StreamingCodecDisabler.disableH265Codec); + mediaEngine.setH264Enabled(originalCodecStatuses.H264 && !Settings.plugins.StreamingCodecDisabler.disableH264Codec); + }, + + async start() { + const engine = mediaEngine.getMediaEngine(); + const options = Object.keys(originalCodecStatuses); + // [{"codec":"","decode":false,"encode":false}] + const CodecCapabilities = JSON.parse(await new Promise(res => engine.getCodecCapabilities(res))); + CodecCapabilities.forEach((codec: { codec: string; encode: boolean; }) => { + if (options.includes(codec.codec)) { + originalCodecStatuses[codec.codec] = codec.encode; + } + }); + }, + + async stop() { + mediaEngine.setAv1Enabled(originalCodecStatuses.AV1); + mediaEngine.setH265Enabled(originalCodecStatuses.H265); + mediaEngine.setH264Enabled(originalCodecStatuses.H264); + } +}); diff --git a/src/utils/constants.ts b/src/utils/constants.ts index 87efce46..0fcdf007 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -1082,6 +1082,10 @@ export const EquicordDevs = Object.freeze({ name: "bbgaming25k", id: 851222385528274964n, }, + davidkra230: { + name: "davidkra230", + id: 652699312631054356n, + }, GroupXyz: { name: "GroupXyz", id: 950033410229944331n