jhomlala/betterplayer
72.3
Strong · 19 September 2026
23k
lines of production code
Dart
with Swift, Kotlin
1
measurement over time
What this system is
Better Player is a federated Flutter video player library that provides cross-platform playback capabilities for Android, iOS, and Web. It leverages native media frameworks—such as AndroidX Media3, AVPlayer via Swift FFI, and Shaka Player—to support advanced features like HLS, DASH, RTSP streaming, and DRM-protected content. The system exposes a unified API for controlling playback, managing data sources, and handling configuration, while relying on comprehensive end-to-end and unit tests to ensure stability across all supported platforms.
Features
Initial release of the Better Player web implementation
The \better\_player\_web\ package is now available, providing the official web platform implementation for the Better Player plugin. It utilizes Shaka Player to enable advanced playback features such as HLS and DASH streaming on the web. Users must include the Shaka Player library in their \web/index.html\ file to use this functionality. The package includes a full platform interface implementation, a dedicated web player class, and a comprehensive test suite to ensure stability.
_packages/better\_player\web · high confidence
New automation and testing scripts for GitHub workflows and web testing
Added several new Dart scripts to the \scripts/\ directory to streamline repository maintenance and testing. \create\_github\_release.dart\ automates the creation of GitHub releases by checking package versions on pub.dev, generating release notes from changelogs, and pushing git tags. \create\_pull\_request.dart\ and \add\_issue\_comment.dart\ facilitate creating PRs and posting comments via the GitHub API. \fetch\_issue\_data.dart\ and \fetch\_pr\_comments.dart\ allow exporting issue and PR metadata (including comments and reviews) to JSON files using GraphQL queries. Additionally, \run\_web\_tests.dart\ provides a wrapper to execute Flutter web tests in Chrome, automatically detecting pass/fail states and cleaning up the browser process.
scripts · high confidence
Project initialization and repository structure setup
The repository has been initialized with the core project structure, including the addition of AI agent guidelines (AGENTS.md) to guide development workflows, a comprehensive .pubignore file to control package publishing contents, and an updated README.md that serves as the primary documentation and feature showcase for the Better Player Flutter video library.
(repo-wide) · high confidence
Behavioural changes
Android player upgraded to Media3 1.11.0 with RTSP and DRM support
The Android implementation now requires a minimum SDK of 24 and upgrades the underlying \androidx.media3\ library from 1.1.1 to 1.11.0, which introduces support for RTSP streaming and configurable DRM security levels (enabling Widevine L1 playback). This is a breaking change for users on older Android versions and requires updating their build configuration to match the new library dependencies.
_packages/better\_player\android · high confidence
Better Player API renamed and restructured for version 1.x
The \better\_player\ package has been updated to version 1.x, introducing a comprehensive API rename and architectural restructuring. All public classes and enums have been renamed to remove the 'BetterPlayer' prefix (e.g., \BetterPlayerConfiguration\ is now \PlayerConfiguration\, \BetterPlayerDataSource\ is now \PlayerDataSource\, \BetterPlayerController\ is now \BetterPlayerController\ but events are \PlayerEvent\, etc.). This change is accompanied by a \fix\_data.yaml\ file to help users automatically migrate their code. The package also now includes a \.pubignore\ file to exclude build artifacts and temporary files from the published package, and the README has been updated with new documentation, AI agent guidelines, and migration guides.
_packages/better\player · high confidence
Better Player platform interface restructured with new configuration models and DRM support
The \better\_player\_platform\_interface\ package has been refactored to introduce a federated plugin architecture, defining the \BetterPlayerPlatform\ abstract class that native implementations must extend. This update adds a comprehensive set of configuration models, including \DataSource\ (supporting network, file, asset, and memory sources), \BufferingConfiguration\, \CacheConfiguration\, and \NotificationConfiguration\. It also introduces new DRM capabilities via \DrmConfiguration\, \DrmType\, and \DrmSecurityLevel\ enums, allowing users to configure security levels for Widevine and Shaka Player. Additionally, the interface now exposes detailed video state tracking through \VideoPlayerValue\ and event streaming via \VideoEvent\ and \VideoEventType\ models.
_packages/better\_player\_platform\interface/lib · high confidence
iOS plugin decoupled into federated package with FFI migration and build fixes
The iOS implementation is now a standalone federated plugin (\better\_player\_ios\) rather than being bundled in the core package. The native layer has been migrated to Swift FFI using \swiftgen\ to allow direct \AVPlayer\ interaction, replacing the previous MethodChannel approach. This update also introduces a native-to-Dart log streaming system via \setupLogCallback\, fixes a race condition where video duration was reported as zero on non-live sources, and resolves CocoaPods build issues related to protocol loading and static linking stripping.
_packages/better\_player\ios · high confidence
Test coverage
Added end-to-end test suites for Better Player on Android, iOS, and Web; Added unit tests for platform interface models.
Dependencies
Better Player 1.11.0: Android Media3 1.11.0, Flutter 3.47+, and Workspace Setup
Better Player version 1.11.0 introduces a major platform upgrade for Android, migrating the native implementation to AndroidX Media3 1.11.0 and raising the minimum SDK to 24. The package now requires Flutter 3.47.0 and Dart 3.12.0, and the project structure has been modernized into a Dart workspace with federated sub-packages (better\_player, better\_player\_android, better\_player\_ios, better\_player\_web) and dedicated FFI example apps. The documentation site has been migrated to Docusaurus 3.10.2, and the example app has been updated to use the latest stable video URLs.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Baseline
- First survey — no prior run to compare against. CAI 72.
Lenses
- Code Health 88
- Architecture 96
- Maturity 66
- Readiness 74
- Security 72
- Domain Modelling 100
Changes since last survey
- 300 commits — 234 feature/other, 66 fixes
By area
- (root) — 107 commits
- lib/src — 83 commits
- packages/better_player — 25 commits
- (repo) — 13 commits
- .github/workflows — 10 commits
- android/src — 9 commits
- example/lib — 9 commits
- .github/ISSUE_TEMPLATE — 6 commits
- packages/better_player_ios — 5 commits
- docs/index.html — 4 commits
- docs/install.md — 3 commits
- example/ios — 2 commits
- ios/better_player — 2 commits
- packages/better_player_android — 2 commits
- packages/better_player_example — 2 commits
- packages/better_player_web — 2 commits
- rules/publish.md — 2 commits
- rules/triage.md — 2 commits
- test/core — 2 commits
- assets/media — 1 commit
Notable commits
- fix: Bugfix/hot reload fix (#729)
- fix: DA fixes
- fix: Dart analysis fix
- fix: Feat/cupertino controls fixes (#1498)
- fix: Feature/ios crash fix (#728)
- fix: Feature/lint fixes (#182)
- fix: Feature/lint fixes (#183)
- fix: Fix 307 (#323)
- fix: Fix Android drmHeaders (#404)
- fix: Fix DRM widevine play in texture (#338)
- fix: Fix aspect ratio ignoring actual video dimensions (#1443)
- fix: Fix better_player_ios podspec source paths and include Objective-C files (#1506)
- fix: Fix controlsHideTime not respected in Material and Cupertino controls… (#1531)
- fix: Fix pub.dev score: Add iOS SPM support, modernize Android build and bump deps (#1428)
- fix: Fix/controls lag (#1534)
- fix: Fix/critical features (#1424)
- fix: Fix/docs rename (#1436)
- fix: Fix/web wasm compatibility (#1503)
- fix: Fix: Handle DASH streams on iOS with descriptive error and update docs (#1413)" (#1453)
- fix: Fixed Android loading indicator issue.
- …and 280 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
jhomlala/betterplayer was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 19 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 493d4608a400cb3578e6b0284a8bdb435caf23e4 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-13a154b7f5d1.