Rework video quality representation and stream selection refactor#13333
Merged
Idadelveloper merged 4 commits intoTeamNewPipe:refactorfrom Apr 3, 2026
Conversation
…tion Replace the previous string-based resolution/fps/etc. handling for VideoStreams by parsing the 'getResolution()'-string to a data class to improve maintainability. Video resolutions (e.g. "720p60") were previously compared and matched using regex-based string manipulation all over the place. This was fragile, required repeated parsing and made it difficult to extend the matching logic. It can handle all the strings like before: "720p", "720p60" Additionally this patch can also handle strings like: "720p60@123k", or "720p@2m" Main changes: - Introduce internal data class VideoQuality (resolution, fps, bitrate, formatRank). - Introduce internal VideoStreamWithQuality to associate streams with parsed quality. - Parse quality only once. - Replace resolution string sorting with a comparator based on resolution -> fps -> formatRank -> bitrate. - Rework stream selection to use a priority-based matching algorithm (format, resolution, fps, bitrate). - Prefer candidates with bitrate closest to the requested one when multiple streams match the same priority class.
a1d6e91 to
0e2e94d
Compare
Contributor
|
@evermind-zz @Idadelveloper thank you! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What is it?
refactorbranchDescription of the changes in your PR
Here is the more detail description of the 2nd commit:
This PR replaces the previous string-based resolution/fps/etc. handling for VideoStreams
by parsing the 'getResolution()'-string into a data class to improve maintainability.
Video resolutions (e.g. "720p60") were previously compared and matched using
regex-based string manipulation all over the place. This was fragile,
required repeated parsing and made it difficult to extend the matching logic.
It can handle all the strings like before: "720p", "720p60"
Additionally this patch can also handle strings like: "720p60@123k", or "720p@2m"
I know this feature is not (yet) needed for NewPipe but is used in my fork BravePipe
and does not hurt anyone.
Main changes:
resolution -> fps -> formatRank -> bitrate.
(format, resolution, fps, bitrate).
streams match the same priority class.
Further notes:
Fixes the following issue(s)
APK testing
The APK can be found by going to the "Checks" tab below the title. On the left pane, click on "CI", scroll down to "artifacts" and click "app" to download the zip file which contains the debug APK of this PR. You can find more info and a video demonstration on this wiki page.
Due diligence