v32.0
Note
Release Highlights
This release fixes the recent video playback issues and that playlists contain no videos.
To overcome the video playback issues, we implemented YouTube's new, custom streaming protocol (called SABR). YouTube started to progressively remove support for traditional streaming protocols, so LibreTube's support for the new protocol should make video playback much more reliable.
Apart from this, the release includes support for podcasts and courses tabs on channels, a "resume all" option for downloads, as well as many minor bug fixes and small improvements.
✨ New Features
dde430c- use more user-friendly terms for audio tracks (commit by @FineFindus)151098f- sort available audio tracks by type (commit by @FineFindus)fca9b83- retrieve SABR streaming data from extractor (commit by @FineFindus)1875129- sabr: add protobuf files (commit by @FineFindus)07169aa- sabr: add UMP parser (commit by @FineFindus)8faf98a- sabr: add SABR client (commit by @FineFindus)203c864- sabr: add Representation (commit by @FineFindus)27b419f- sabr: add AdaptationSet (commit by @FineFindus)8c3f34d- sabr: add manifest (commit by @FineFindus)778f4dc- sabr: store and re-use sabr exception (commit by @FineFindus)d00105c- sabr: support retrieving DRC audio (commit by @FineFindus)80dbae9- sabr: implement data source (commit by @FineFindus)746078f- sabr: implement support for poTokens (commit by @FineFindus)18e8796- sabr: only log unhandled UMP parts (commit by @FineFindus)8214f0f- sabr: build and send BufferedRanges (commit by @FineFindus)d7b24c5- sabr: handle formats supporting voice boost (commit by @FineFindus)74b44fb- sabr: allow discontinuous playback (commit by @FineFindus)1c26249- sabr: synchronize buffered segments with chunksource queue (commit by @FineFindus)c5deccb- sabr: store init segment (commit by @FineFindus)d623543- sabr: assert that we never load segments past the end of stream (commit by @FineFindus)932b721- sabr: setOriginandRefererheader (commit by @FineFindus)08bef5e- sabr: setelapsedWallTimeMs(commit by @FineFindus)8a50eca- sabr: avoid retrieving segments from buffered segments (commit by @FineFindus)467a3ac- sabr: inform server about last seek timestamp (commit by @FineFindus)0a20a77- sabr: explicitly handle player reload request (commit by @FineFindus)684c3ea- sabr: inform server about manual format selection (commit by @FineFindus)eda9cfb- sabr: informat server about estimated bandwidth (commit by @FineFindus)254e205- sabr: experimentally cache generated PoToken (commit by @FineFindus)fc1ce48- SABR: skip re-selecting already selected format (commit by @FineFindus)1f933d1- SABR: clear formats on media refresh (commit by @FineFindus)55122ea- SABR: support external subtitles (commit by @FineFindus)0203dbe- SABR: enable lazy-loading of subtitle streams (commit by @FineFindus)86b2f68- SABR: extract language from Xtags (commit by @FineFindus)7fe7f75- implement "Resume All" functionality for downloads (commit by @bermount)3708d9c- Comments: keep scroll position when loading new data (commit by @FineFindus)e8599cb- Comments: add contentDescription/tooltipText to icons (commit by @FineFindus)54d8e5c- SABR: log error when failing to fetch data (commit by @FineFindus)b530e80- SABR: use web client version from NewPipeExtractor (commit by @FineFindus)f7222c5- downloads: add support for downloading SABR streams (commit by @Bnyro)d519e11- make the whole item list clickable inAddChannelToGroupSheet(commit by @dhanuarf)fe86af6- Channel: add support forPodcastsandCoursestabs (commit by @FineFindus)70dd800- SABR: use playerTime to request new segments (commit by @FineFindus)86d52f7- SABR: add additional properties to playback request (commit by @FineFindus)6b255dd- SABR: add request number to request URL (commit by @FineFindus)ad9df07- SABR: use visionOS client for playback requests (commit by @FineFindus)c860f39- show seek increment in pip forward/rewind actions (commit by @Bnyro)
🐛 Bug Fixes
9857d81- always display selected audio track (commit by @FineFindus)3fe9402- correctly set audio track language (commit by @FineFindus)de0ac46- display country for multiple audio tracks of the same language (commit by @FineFindus)cdac784- correctly set selected audio track (commit by @FineFindus)15add6e- sabr: correctly set null xtags (commit by @FineFindus)8b2a678- sabr: correctly retrieve new media segments (commit by @FineFindus)ca9bb90- remove unused import (commit by @FineFindus)649c9f4- sabr: disable SABR for live-streams (commit by @FineFindus)e3f6a83- sabr: use buffered and downloaded segments to build buffered ranges (commit by @FineFindus)d0b8f79- sabr: use segment start time to request (commit by @FineFindus)2b6abed- sabr: correctly set xtags from extractor (commit by @FineFindus)9046da6- sabr: use approximate stream duration milliseconds (commit by @FineFindus)cf03cd4- sabr: use correct segment number for media segments (commit by @FineFindus)8249236- sabr: avoid unnecessary request for init segment (commit by @FineFindus)9077796- sabr: avoid storing media data for buffered segments (commit by @FineFindus)238141c- sabr: clear unbuffered segments when requesting new segments (commit by @FineFindus)508b5a4- sabr: clear previous format when switching formats (commit by @FineFindus)f454482- SABR: update selected track when track selection changes (commit by @FineFindus)7f5b423- SABR: only update selected format for the next request (commit by @FineFindus)e3e90bf- update playlist info after removing a video (commit by @FirthR5)3de36d2- isFinished annotation on DownloadItem (commit by @FirthR5)b239fd8- default resolution not properly set (commit by @dhanuarf)5214127- default resolution not applied when switching to next video (commit by @dhanuarf)b1ebe8a- TextUtils: correctly format weeks with DST transitions (commit by @FineFindus)745c594- "ungrouped" subscription group count doesn't update after modifying groups (PR #8551 by @Phoenix1808)f81e375- downloads: nothing here indicator shown even if there are videos and playlists not clickable (commit by @Bnyro)8755780- Comments: reset comment count when resetting comments (commit by @FineFindus)345b6b9- crash when navigating through multiple channels due to stack overflow (PR #8562 by @YasinMoridi)9e080d1- fragments overlap each other due to transparent fragment backgrounds (PR #8566 by @YasinMoridi)↘️ fixes issue #8558 opened by @7lilnewbie
9dcd5ec- correctisFinishedlogic inDownloadItem(PR #8590 by @bermount)681c7a6- consider uploader name when searching in private playlists (PR #8597 by @nuturs)98d70d8- crash when showing snackbar on older android version (commit by @dhanuarf)5709862- keyboard shortcuts trigger even when typing in searchbar (commit by @Bnyro)a5f94fa- downloads UI when pausing and resuming downloads (commit by @Bnyro)2a1a4ec- don't show sponsorblock skip button in PiP mode (commit by @Bnyro)29a5eeb- crash when destroying activity while PiP params update (PR #8646 by @xhon-pelushi)↘️ fixes issue #8636 opened by @tkohlmeier
04ab2c2- DASH: only use non-SABR streams (commit by @FineFindus)
⚡ Performance Improvements
c192d63- sabr: avoid copying segment data (commit by @FineFindus)
♻️ Refactors
410d76f- sabr: use verbose instead of debug logging (commit by @FineFindus)c426bb4- sabr: convert sabr client to singleton object (commit by @FineFindus)38e758e- sabr: use representations to retrieve media data (commit by @FineFindus)ebc2b60- sabr: port to Kotlin (commit by @FineFindus)3a457fd- sabr: remove JVM field tags (commit by @FineFindus)1d5ef84- sabr: remove unused constructors (commit by @FineFindus)1518041- sabr: extract parsing and handling of xtags (commit by @FineFindus)d9b9c45- sabr/xtags: remove unnecessary field (commit by @FineFindus)233568d- sabr: mark Representation formatId as non-null (commit by @FineFindus)ab1df3e- sabr: markRepresentationHolderas data class (commit by @FineFindus)e0b3c34- sabr: only handle a single segment per chunk (commit by @FineFindus)174b40c- sabr: use idiomatic continue on null selection (commit by @FineFindus)55012ae- sabr: remove unnecessary null-safety assertion (commit by @FineFindus)04ca058- sabr: extract common format selection code (commit by @FineFindus)7cfc431- sabr: remove unusedpoTokenfrom manifest (commit by @FineFindus)af313b8- sabr: cleanup (commit by @FineFindus)ddd4aaa- sabr: createFormatIdforRepresentationdirectly from stream (commit by @FineFindus)f37ab6f- sabr: use idiomatic null check (commit by @FineFindus)768c658- sabr: convertSabrClientto a class (commit by @FineFindus)14e00ad- sabr: use idiomatic Kotlin builder (commit by @FineFindus)92d81df- sabr: use idiomatic Kotlin nullcheck (commit by @FineFindus)e21a12e- sabr: markadaptationSetssetter as private (commit by @FineFindus)ded067d- sabr: remove unsatifiable unbound index check (commit by @FineFindus)437fb19- SABR: directly return server response payload (commit by @FineFindus)63e7ca5- SABR/Xtags: keep attributes with non-integer values (commit by @FineFindus)6961ca3- SABR: remove unused variables (commit by @FineFindus)c415ca0- mergeEditChannelGroupsModelintoSubscriptionsViewModel(commit by @dhanuarf)3624d55- slightly improve player initialization (commit by @dhanuarf)86cbfb4- simplify navigation bar preference logic (commit by @Bnyro)f65df80- sabr: make audio format optional, add method to get end segment number, add docstrings (commit by @Bnyro)aba0be5- sabr: move media3 format construction to Representation (commit by @Bnyro)be7d924- downloads: adapt database scheme for SABR download support (commit by @Bnyro)3a260f5- downloads: simplify code and refactor internal downloader logic into DownloadProvider (commit by @Bnyro)8b3ce26- SABR: log data source error (commit by @FineFindus)4435a4c- SABR: avoid setting selected formats twice (commit by @FineFindus)b9ab84d- settings: remove label visibility, playback during call, behavior when minimized, notification stream thumbnails and watch history size settings (commit by @Bnyro)497a81d- simplify volume and brightness helpers (commit by @Bnyro)
🔧 Chores
fd088cb- prefer SABR when available (commit by @FineFindus)157f106- proto: renamelmttolast_modifiedtime (commit by @FineFindus)2200a4c- settings: remove max image cache size option (commit by @Bnyro)0189ecb- settings: remove max concurrent downloads options (commit by @Bnyro)0635edf- settings: add preference migrations for removed image cache size and parallel downloads option (commit by @Bnyro)5c7f59d- bump newpipeextractor (commit by @Bnyro)b9947ba- SABR: add TODOs (commit by @FineFindus)bb90b65- bump version to v32.0 (commit by @FineFindus)