diff --git a/extensions/shared/src/main/java/app/revanced/extension/shared/patches/spoof/SpoofStreamingDataPatch.java b/extensions/shared/src/main/java/app/revanced/extension/shared/patches/spoof/SpoofStreamingDataPatch.java
index 3dc60ea03..a5e25ba9a 100644
--- a/extensions/shared/src/main/java/app/revanced/extension/shared/patches/spoof/SpoofStreamingDataPatch.java
+++ b/extensions/shared/src/main/java/app/revanced/extension/shared/patches/spoof/SpoofStreamingDataPatch.java
@@ -21,6 +21,12 @@ import app.revanced.extension.shared.utils.Utils;
@SuppressWarnings("unused")
public class SpoofStreamingDataPatch extends BlockRequestPatch {
+ /**
+ * Even if the default client is not iOS, videos that cannot be played on Android VR or Android TV will fall back to iOS.
+ * Do not add a dependency that checks whether the default client is iOS or not.
+ */
+ private static final boolean SPOOF_STREAMING_DATA_SYNC_VIDEO_LENGTH =
+ SPOOF_STREAMING_DATA && BaseSettings.SPOOF_STREAMING_DATA_SYNC_VIDEO_LENGTH.get();
/**
* Key: videoId.
@@ -119,7 +125,7 @@ public class SpoofStreamingDataPatch extends BlockRequestPatch {
* Called after {@link #getStreamingData(String)}.
*/
public static void setFormats(String videoId, StreamingDataOuterClass$StreamingData originalStreamingData, StreamingDataOuterClass$StreamingData spoofed) {
- if (formatsIsEmpty(spoofed)) {
+ if (SPOOF_STREAMING_DATA_SYNC_VIDEO_LENGTH && formatsIsEmpty(spoofed)) {
formatsMap.put(videoId, getFormatsFromStreamingData(originalStreamingData));
Logger.printDebug(() -> "New formats video id: " + videoId);
}
@@ -165,7 +171,7 @@ public class SpoofStreamingDataPatch extends BlockRequestPatch {
* Called after {@link #getStreamingData(String)}.
*/
public static List> getOriginalFormats(String videoId, List> spoofedFormats) {
- if (SPOOF_STREAMING_DATA) {
+ if (SPOOF_STREAMING_DATA_SYNC_VIDEO_LENGTH) {
try {
if (videoId != null && !videoId.equals(MASKED_VIDEO_ID) && spoofedFormats.size() == 0) {
List> androidFormats = formatsMap.get(videoId);
diff --git a/extensions/shared/src/main/java/app/revanced/extension/youtube/settings/preference/SpoofStreamingDataSideEffectsPreference.java b/extensions/shared/src/main/java/app/revanced/extension/youtube/settings/preference/SpoofStreamingDataSideEffectsPreference.java
index 92eec6bcf..e6e27a972 100644
--- a/extensions/shared/src/main/java/app/revanced/extension/youtube/settings/preference/SpoofStreamingDataSideEffectsPreference.java
+++ b/extensions/shared/src/main/java/app/revanced/extension/youtube/settings/preference/SpoofStreamingDataSideEffectsPreference.java
@@ -64,7 +64,10 @@ public class SpoofStreamingDataSideEffectsPreference extends Preference {
private void updateUI() {
final ClientType clientType = Settings.SPOOF_STREAMING_DATA_TYPE.get();
- final String summaryTextKey = "revanced_spoof_streaming_data_side_effects_" + clientType.name().toLowerCase();
+ final String summaryTextKey = clientType == ClientType.IOS &&
+ !Settings.SPOOF_STREAMING_DATA_SYNC_VIDEO_LENGTH.get()
+ ? "revanced_spoof_streaming_data_side_effects_ios_skip_sync_video_length"
+ : "revanced_spoof_streaming_data_side_effects_" + clientType.name().toLowerCase();
setSummary(str(summaryTextKey));
setEnabled(Settings.SPOOF_STREAMING_DATA.get());
diff --git a/patches/src/main/resources/youtube/settings/host/values/strings.xml b/patches/src/main/resources/youtube/settings/host/values/strings.xml
index 6058923ae..d40077f58 100644
--- a/patches/src/main/resources/youtube/settings/host/values/strings.xml
+++ b/patches/src/main/resources/youtube/settings/host/values/strings.xml
@@ -1906,10 +1906,16 @@ Tap on the continue button and disable battery optimizations."
Android VR
Spoofing side effects
• Not yet found.
+ • Videos may end 1 second early.
"• Audio track menu is missing.
• Stable volume is not available."
"• Audio track menu is missing.
• Stable volume is not available."
+ Sync video length before playback
+ "Video length is synced before playback.
+Video length is exact value."
+ "Video length is not synced before playback.
+Video length may be a rounded value."
Show in Stats for nerds
Client used to fetch streaming data is shown in Stats for nerds.
Client used to fetch streaming data is hidden in Stats for nerds.
diff --git a/patches/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/patches/src/main/resources/youtube/settings/xml/revanced_prefs.xml
index 803961ae3..9accb1174 100644
--- a/patches/src/main/resources/youtube/settings/xml/revanced_prefs.xml
+++ b/patches/src/main/resources/youtube/settings/xml/revanced_prefs.xml
@@ -784,6 +784,7 @@
+
SETTINGS: SPOOF_STREAMING_DATA -->