What's Changed
- feat: implement music sharing functionality for Xiaomi Super Island w… by @ghhccghk in #269
- fix: decouple Lyricon position feed from playback progress update interval by @KyuharuTE in #268
New Contributors
- @KyuharuTE made their first contribution in #268
Full Changelog: NeriPlayer-22fba63f.07231240...NeriPlayer-2788a894.07281523
Commits
- 2788a89 feat: increase maximum target queue duration to 1500ms to prevent PCM drain
- fb573b0 feat: implement expedited YouTube deep seek recovery and USB exclusive refresh retries
- 29413b3 docs: update documentation for YouTube fallbacks, USB bit-perfect volume, and sync concurrency protection
- 93f34f1 chore: update submodule reference
- 9dbe949 feat(listen-together): require room credentials for joins
- 988fa9e fix(lyrics): keep translations aligned and cards bounded
- 948d9a3 fix(local): stage content URIs before sharing
- 1b421cc fix(sync): preserve tombstones and concurrent updates
- dae10d9 fix(download): preserve completed files during finalization
- fc6b227 fix(player): harden lifecycle and USB recovery
- ae9c3b6 fix(stats): serialize traffic accounting and deferred writes
- 31e14dd fix(youtube): harden session persistence and first playback
- 5176373 fix(usb): preserve PCM samples on compatible output
- 7d33ac6 perf(youtube): stop rediscovering that NewPipe cannot read this player.js
- 8e6ea15 perf(youtube): reuse the direct stream a missing PO token made us skip
- 8f93834 fix(youtube): stop a routine response from deleting the cookies youtube logs in with
- 7c883d3 fix(youtube): cache an anonymous bootstrap without archiving it
- fc51a40 perf(youtube): time the bootstrap parse and skip the experiment flag blob
- 47433e0 fix(youtube): stop persisting an anonymous bootstrap over a live login
- 9f38416 perf(youtube): stop making playback wait for work it already has an answer for
- 2bd2581 perf(youtube): stop refetching a bootstrap that was never the problem
- fac2738 perf(player): keep a back buffer so rewinding does not refetch what just played
- 6766dac perf(youtube): reuse a session-wide PO token instead of rebuilding the WebView
- 2b80162 fix(youtube): warm playback for anonymous sessions too
- 264abe7 fix(youtube): stop retrying cookie rotation Google keeps refusing
- 1c8cec1 perf(youtube): stop redownloading player.js on every cold start
- 661e368 perf(youtube): stop paying a full bootstrap parse on every cold start
- 1cf4c09 fix: implement USB exclusive foreground recovery policy and playback restoration
- de02dde feat(youtube): rotate the session cookies instead of hoping a page load does it
- 74d8ea7 test(player): cover the local fallback setting on a real device
- 7f684d1 fix(search): ask QQ Music for the translation it will not send unprompted
- 78806f1 fix(player): let prefetch carry the matched local fallback result
- 932a31b fix(youtube): keep identity cookies a rejected refresh was about to throw away
- bb53457 chore(youtube): report how many audio candidates were discarded before one stuck
- c8a9236 fix(search): tolerate a QQ Music lyric response that omits the lyric fields
- 9a9c646 perf(youtube): solve the signature and the throttling parameter in one pass
- 7bc4778 fix: display only track count for albums in Netease collection details
- 8aa1042 perf(youtube): scan the bootstrap html once per field instead of twice
- d8dde28 fix(youtube): stop wiping identity cookies a stale bundle never captured
- 12dad24 feat(player): fall back to matched local audio when netease is restricted
- 87c9b4f perf(youtube): stop making a tapped track wait behind the whole prefetch queue
- 73f66f1 perf(youtube): let a tapped track cut ahead of the queued prefetch solves
- 71abff6 fix(youtube): let a repeated startup stall give up on the direct stream
- bc7fbcc perf(youtube): stop paying a full webview rebuild for a token that is still valid
- 0169722 perf(youtube): stop refetching player.js just to read a signature timestamp
- 7101e05 style: normalize comment punctuation to ascii
- 3f87bf4 fix(youtube): let playback fall back off a direct stream the CDN keeps rejecting
- 153f022 fix(youtube): finish web login when the redirect chain lands off youtube
- 05d4404 fix(ui): keep nested detail scenes opaque so drawer transitions stop ghosting
- eabc2fc perf(youtube): shorten the solve queue sitting in front of an interactive request
- c3feb46 fix(youtube): never navigate to the sign-in page while login cookies are intact
- d57e0c2 fix(youtube): stop a client that cannot use web cookies from dropping the session
- 682352b fix(player): stop the now playing quality dialog from silently rewriting the default
- 9d4efa6 perf(youtube): cut first-play latency from repeated whole-document bootstrap scans
- cc0b628 fix(player): drop cache that holds a different representation of the same track
- 9727684 fix(youtube): show progress while the login WebView verifies cookies
- b3edb27 fix(youtube): restore playback and download on stale player.js and anonymous sessions
- c03a630 fix: sync/download/settings resilience, playback + favorites, lyrics, YouTube, USB
- 89dcc8f feat(sync): stream backups as raw GZIP(protobuf) bytes with read-both compat
- ff97c4f merge: integrate mobile pipeline stability fixes (download/youtube/sync/player/listen-together)
- 68ccbe2 fix(player): default playback wake mode to WAKE_MODE_NETWORK
- 0269983 fix: decouple Lyricon feed and align status-bar lyrics timing (#268)
- bdfe86e refactor: centralize song share URL generation with domain validation and unit tests
- 2c421c4 fix: decouple Lyricon feed and align status-bar lyrics timing
- 10c2a1b feat: implement music sharing functionality for Xiaomi Super Island with URL generation
实验性功能
- USB 独占目前仍然在测试,有待进一步反馈。如果遇到任何问题请及时反馈。
备份警告
- 当前同步数据模型已更新,不确保百分百向下兼容(理论不会丢数据,但是部分歌曲可能会被置顶),建议先备份后更新。
- 这则提示会在后续 2 个 release 中持续出现