From 6a799110d7c791c6940611bbcab69075ca70f627 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Wed, 1 Oct 2025 22:37:10 +0400 Subject: [PATCH] refactor(YouTube - Spoof video streams): Add 'supportsMultiAudioTracks' field --- .../music/patches/ForceOriginalAudioPatch.java | 2 +- .../shared/patches/ForceOriginalAudioPatch.java | 6 ++---- .../extension/shared/spoof/ClientType.java | 14 ++++++++++++++ .../youtube/patches/ForceOriginalAudioPatch.java | 2 +- .../shared/misc/audio/ForceOriginalAudioPatch.kt | 2 +- 5 files changed, 19 insertions(+), 7 deletions(-) diff --git a/extensions/music/src/main/java/app/revanced/extension/music/patches/ForceOriginalAudioPatch.java b/extensions/music/src/main/java/app/revanced/extension/music/patches/ForceOriginalAudioPatch.java index 30a2cb8f2..26589623e 100644 --- a/extensions/music/src/main/java/app/revanced/extension/music/patches/ForceOriginalAudioPatch.java +++ b/extensions/music/src/main/java/app/revanced/extension/music/patches/ForceOriginalAudioPatch.java @@ -8,7 +8,7 @@ public class ForceOriginalAudioPatch { /** * Injection point. */ - public static void setPreferredLanguage() { + public static void setEnabled() { app.revanced.extension.shared.patches.ForceOriginalAudioPatch.setEnabled( Settings.FORCE_ORIGINAL_AUDIO.get(), Settings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get() diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/ForceOriginalAudioPatch.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/ForceOriginalAudioPatch.java index 762a77352..8ae454e69 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/ForceOriginalAudioPatch.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/ForceOriginalAudioPatch.java @@ -10,14 +10,12 @@ public class ForceOriginalAudioPatch { private static final String DEFAULT_AUDIO_TRACKS_SUFFIX = ".4"; - private static volatile boolean enabled = false; + private static volatile boolean enabled; public static void setEnabled(boolean isEnabled, ClientType client) { enabled = isEnabled; - if (isEnabled - && SpoofVideoStreamsPatch.spoofingToClientWithNoMultiAudioStreams() - && !client.useAuth) { + if (isEnabled && !client.useAuth && !client.supportsMultiAudioTracks) { // If client spoofing does not use authentication and lacks multi-audio streams, // then can use any language code for the request and if that requested language is // not available YT uses the original audio language. Authenticated requests ignore diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/ClientType.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/ClientType.java index 96299facc..cfd79b972 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/ClientType.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/ClientType.java @@ -31,6 +31,7 @@ public enum ClientType { "132.0.6808.3", "1.61.48", false, + false, "Android VR 1.61" ), /** @@ -50,6 +51,7 @@ public enum ClientType { "107.0.5284.2", "1.43.32", ANDROID_VR_1_61_48.useAuth, + ANDROID_VR_1_61_48.supportsMultiAudioTracks, "Android VR 1.43" ), /** @@ -69,6 +71,7 @@ public enum ClientType { "132.0.6779.0", "23.47.101", true, + false, "Android Studio" ), /** @@ -83,6 +86,7 @@ public enum ClientType { "0.1", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Safari/605.1.15", false, + false, "visionOS" ), /** @@ -107,6 +111,7 @@ public enum ClientType { "19.22.3", "com.google.ios.youtube/19.22.3 (iPad7,6; U; CPU iPadOS 17_7_10 like Mac OS X; " + Locale.getDefault() + ")", false, + true, "iPadOS" ); @@ -180,6 +185,11 @@ public enum ClientType { */ public final boolean useAuth; + /** + * If the client supports multiple audio tracks. + */ + public final boolean supportsMultiAudioTracks; + /** * Friendly name displayed in stats for nerds. */ @@ -200,6 +210,7 @@ public enum ClientType { @NonNull String cronetVersion, String clientVersion, boolean useAuth, + boolean supportsMultiAudioTracks, String friendlyName) { this.id = id; this.clientName = clientName; @@ -213,6 +224,7 @@ public enum ClientType { this.cronetVersion = cronetVersion; this.clientVersion = clientVersion; this.useAuth = useAuth; + this.supportsMultiAudioTracks = supportsMultiAudioTracks; this.friendlyName = friendlyName; Locale defaultLocale = Locale.getDefault(); @@ -238,6 +250,7 @@ public enum ClientType { String clientVersion, String userAgent, boolean useAuth, + boolean supportsMultiAudioTracks, String friendlyName) { this.id = id; this.clientName = clientName; @@ -248,6 +261,7 @@ public enum ClientType { this.clientVersion = clientVersion; this.userAgent = userAgent; this.useAuth = useAuth; + this.supportsMultiAudioTracks = supportsMultiAudioTracks; this.friendlyName = friendlyName; this.packageName = null; this.androidSdkVersion = null; diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/ForceOriginalAudioPatch.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/ForceOriginalAudioPatch.java index 5540b670d..ed65e7fba 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/ForceOriginalAudioPatch.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/ForceOriginalAudioPatch.java @@ -8,7 +8,7 @@ public class ForceOriginalAudioPatch { /** * Injection point. */ - public static void setPreferredLanguage() { + public static void setEnabled() { app.revanced.extension.shared.patches.ForceOriginalAudioPatch.setEnabled( Settings.FORCE_ORIGINAL_AUDIO.get(), Settings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get() diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/misc/audio/ForceOriginalAudioPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/misc/audio/ForceOriginalAudioPatch.kt index 0f5d8f1ac..5c0d8c907 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/misc/audio/ForceOriginalAudioPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/misc/audio/ForceOriginalAudioPatch.kt @@ -59,7 +59,7 @@ internal fun forceOriginalAudioPatch( mainActivityOnCreateFingerprint.method.addInstruction( 0, - "invoke-static { }, $subclassExtensionClassDescriptor->setPreferredLanguage()V" + "invoke-static { }, $subclassExtensionClassDescriptor->setEnabled()V" ) // Disable feature flag that ignores the default track flag