Repository navigation
v0.2.3
⭐ Enjoying crystal-clear studio music on YouTube? If this little extension makes your daily listening sessions happier, please consider dropping a shiny Star on GitHub — it truly means the world and keeps this project going! ♪
YTSpoofingStream v0.2.3
The v0.2.3 release (commit 667384a) resolves YouTube player UI volume control responsiveness, eliminates track-end autoplay replay glitches, fixes SABR/UMP micro-gap buffering stalls, and adds full native player loop support.
1. Restored Native Player Volume & Mute Controls (passedProbe Guard)
- Detached Probe Shield: Fixed YouTube's internal audio capability probe (
passedProbe) executed on detached DOM elements (r = Vj()). YouTube runs capability assertions on off-DOM elements (!this.isConnected). Intercepting descriptor getters/setters on disconnected elements previously caused YouTube to mark the browser as incapable of volume adjustment, permanently disabling the volume slider (aria-disabled="true") and hiding the drag handle. - Selective Prototype Routing: Added
if (!this.isConnected) return descVolume.get.call(this);anddescMuted.get.call(this)guards onHTMLMediaElement.prototype.volumeandmuted. YouTube's native probe passes naturally (passedProbe: true), fully restoring the native player volume slider, drag handle, and mute/unmute buttons.
2. Clean Autoplay Track-End Transitions (No Replay Glitch)
- Eliminated 1–1.5s Track Restart: Fixed the annoying track-ending glitch where a completed video rewound to
0:00and replayed the intro for 1–1.5s before advancing to the next video. - Root Cause & Resolution:
- Previously, when a song finished, the
<video>element was left playing while<audio>paused. The<video>firedplay/playingevents, resetting_trackEnded = false. The watchdog saw<video>playing while<audio>was paused and calledaudio.play(), which per HTML5 spec rewound<audio>to0:00, and drift resync rewound<video>to0:00. - Enforced immediate synchronous
video.pause()andaudio.pause()at track end (currentTime >= duration - 0.8s). - Added a strict guard in
onVideoEvent('play'): IfcurrentTime >= duration - 0.8s,_trackEnded = trueis never cleared and both elements remain paused. - Added a reliable fallback transition in
checkSyncWatchdog: Holds playback paused and cleanly dispatchesplayer.nextVideo()after a 2.5s delay (1.0s in playlist) if YouTube's native Autonav does not trigger immediately.
- Previously, when a song finished, the
3. SABR / UMP Stream Micro-Gap & Duplicate Fetch Resilience (UmpMseController774)
- Micro-Gap Buffer Stall Recovery: Fixed audio freezes around WebM cluster / chunk boundaries where audio stopped progressing (
audio.currentTimestalled > 2.5s) while video continued ahead. The watchdog now automatically jumps the micro-gap (audio.currentTime = video.currentTime), resuming seamless playback without dropped connections. - Segment Deduplication: Prevented re-appending duplicate segments into the
MediaSourceSourceBuffer(lastAppendedSeq === seg.seq) and removed destructivelastAppendedSeq = -1resets on seeks, eliminating infinite reconnection loops and buffer thrashing.
4. Native Player Loop & Single-Track Repeat Support
- Loop Mode Detection: Added
StudioEngine774.isLoopActive(), which inspectsvideo.loop,movie_player.getLoopVideo(), and single-track playlist repeat modes (singleVideoLoop). - Seamless 0:00 Loop Playback: When Loop mode is enabled, reaching the end of the track smoothly rewinds both Opus 774 audio and native video to
0:00and resumes playback without triggering premature Autonav or pausing.
5. Version Bumps & Documentation Sync
- Synchronized version string to
v0.2.3acrossmanifest.json,src/bridge.js,src/popup.html,src/popup.js, and all 6 language locale dictionaries (locales/*.json). - Updated English (
README.md) and Vietnamese (README-vi.md) documentation withv0.2.3badges, architecture diagrams, and release highlights.
Full Changelog: v0.2.2...v0.2.3