fix(YouTube - Spoof streaming data): On iOS clients, livestreams always start from the beginning

This commit is contained in:
inotia00 2024-12-16 21:54:57 +09:00
parent e8090243b1
commit d1b2fe16db
5 changed files with 31 additions and 10 deletions

View File

@ -78,6 +78,16 @@ public class SpoofStreamingDataPatch {
return SPOOF_STREAMING_DATA; return SPOOF_STREAMING_DATA;
} }
/**
* Injection point.
*/
public static boolean fixHLSCurrentTime(boolean original) {
if (!SPOOF_STREAMING_DATA) {
return original;
}
return false;
}
/** /**
* Injection point. * Injection point.
*/ */

View File

@ -64,13 +64,7 @@ public class SpoofStreamingDataSideEffectsPreference extends Preference {
private void updateUI() { private void updateUI() {
final ClientType clientType = Settings.SPOOF_STREAMING_DATA_TYPE.get(); final ClientType clientType = Settings.SPOOF_STREAMING_DATA_TYPE.get();
final String summaryTextKey = "revanced_spoof_streaming_data_side_effects_" + clientType.name().toLowerCase();
final String summaryTextKey;
if (clientType == ClientType.IOS && Settings.SPOOF_STREAMING_DATA_IOS_SKIP_LIVESTREAM_PLAYBACK.get()) {
summaryTextKey = "revanced_spoof_streaming_data_side_effects_ios_skip_livestream_playback";
} else {
summaryTextKey = "revanced_spoof_streaming_data_side_effects_" + clientType.name().toLowerCase();
}
setSummary(str(summaryTextKey)); setSummary(str(summaryTextKey));
setEnabled(Settings.SPOOF_STREAMING_DATA.get()); setEnabled(Settings.SPOOF_STREAMING_DATA.get());

View File

@ -12,6 +12,7 @@ import app.revanced.patcher.util.smali.ExternalLabel
import app.revanced.patches.shared.extension.Constants.SPOOF_PATH import app.revanced.patches.shared.extension.Constants.SPOOF_PATH
import app.revanced.util.findInstructionIndicesReversedOrThrow import app.revanced.util.findInstructionIndicesReversedOrThrow
import app.revanced.util.fingerprint.definingClassOrThrow import app.revanced.util.fingerprint.definingClassOrThrow
import app.revanced.util.fingerprint.injectLiteralInstructionBooleanCall
import app.revanced.util.fingerprint.matchOrThrow import app.revanced.util.fingerprint.matchOrThrow
import app.revanced.util.fingerprint.methodOrThrow import app.revanced.util.fingerprint.methodOrThrow
import app.revanced.util.getReference import app.revanced.util.getReference
@ -209,6 +210,15 @@ fun baseSpoofStreamingDataPatch(
// endregion // endregion
// region Fix iOS livestream current time.
hlsCurrentTimeFingerprint.injectLiteralInstructionBooleanCall(
HLS_CURRENT_TIME_FEATURE_FLAG,
"$EXTENSION_CLASS_DESCRIPTOR->fixHLSCurrentTime(Z)Z"
)
// endregion
executeBlock() executeBlock()
} }

View File

@ -134,3 +134,12 @@ internal val protobufClassParseByteBufferFingerprint = legacyFingerprint(
), ),
customFingerprint = { method, _ -> method.name == "parseFrom" }, customFingerprint = { method, _ -> method.name == "parseFrom" },
) )
internal const val HLS_CURRENT_TIME_FEATURE_FLAG = 45355374L
internal val hlsCurrentTimeFingerprint = legacyFingerprint(
name = "hlsCurrentTimeFingerprint",
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
parameters = listOf("Z", "L"),
literals = listOf(HLS_CURRENT_TIME_FEATURE_FLAG),
)

View File

@ -1903,9 +1903,7 @@ Tap on the continue button and disable battery optimizations."</string>
<string name="revanced_spoof_streaming_data_type_entry_android_unplugged">Android TV</string> <string name="revanced_spoof_streaming_data_type_entry_android_unplugged">Android TV</string>
<string name="revanced_spoof_streaming_data_type_entry_android_vr">Android VR</string> <string name="revanced_spoof_streaming_data_type_entry_android_vr">Android VR</string>
<string name="revanced_spoof_streaming_data_side_effects_title">Spoofing side effects</string> <string name="revanced_spoof_streaming_data_side_effects_title">Spoofing side effects</string>
<string name="revanced_spoof_streaming_data_side_effects_ios">"• Livestreams start from the beginning. <string name="revanced_spoof_streaming_data_side_effects_ios">• Videos may end 1 second early.</string>
• Videos may end 1 second early."</string>
<string name="revanced_spoof_streaming_data_side_effects_ios_skip_livestream_playback">• Videos may end 1 second early.</string>
<string name="revanced_spoof_streaming_data_side_effects_android_unplugged">"• Audio track menu is missing. <string name="revanced_spoof_streaming_data_side_effects_android_unplugged">"• Audio track menu is missing.
• Stable volume is not available."</string> • Stable volume is not available."</string>
<string name="revanced_spoof_streaming_data_side_effects_android_vr">"• Audio track menu is missing. <string name="revanced_spoof_streaming_data_side_effects_android_vr">"• Audio track menu is missing.