Skip to content
CAI
Software that uses CAICheck a score

jhomlala/betterplayer

72.3

Strong · 19 September 2026

23k

lines of production code

Dart

with Swift, Kotlin

1

measurement over time

CAI band scale
CAI lens gauges

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.