Skip to content
Projects

jhomlala/betterplayer has 1,053 GitHub stars and 1,399 forks. GitHot measured +1 stars in 24 hours. Last checked 2026-11-09 11:29 UTC. Last push 2026-11-02.

How these counts are measured

Production-grade video player for Flutter (Android, iOS, Web, macOS, Windows, Linux) - HLS, DASH, DRM (Widevine & FairPlay), caching, PiP, VAST ads, and vertical video feeds.

Measured star growth

in 24h
+1
in 7 days
Update delayed
in 15 days
Update delayed
in 1 month
Update delayed

Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.

README.md

Original

Better Player Logo

Better Player

The complete, production-grade video player for Flutter.
One unified controller. Native performance. Zero bloated binaries.

Pub Version Pub Points Pub Likes GitHub Stars License

Documentation • Live Demo • Migrating to 1.x (from 0.0.x / better_player_plus) • Migrating from video_player • Migrating from chewie • Migrating from media_kit • Example App


Why Better Player?

Stop stitching video_player, separate UI packages, abandoned caching plugins, and custom DRM code together. Better Player packs the full video stack into a single, cohesive engine.

Feature Better Player video_player + chewie media_kit
App Size Overhead ~1-2 MB (Native OS engines) ~1-2 MB +30MB to 50MB (Bundled mpv binaries)
Out-of-the-box UI Built-in & customizable Chewie required Built-in
HLS / DASH Full native support Basic Native
DRM (Widevine / FairPlay) Native support None None
Smart Caching Built-in offline cache None (3rd party needed) None
Subtitles & Closed Captions SRT, WebVTT, TTML, CEA-608 / CEA-708 SRT only Advanced
Picture in Picture (PiP) Built-in None Platform-dependent
Playlists Built-in None Built-in
VAST / VMAP Ads Client-side ad engine (VAST 2.0-4.x, VMAP) None None
Telemetry & QoE Real-time video metrics, offline retention & cloud export None None
Watermarking & Screen Shield Dynamic forensic overlays & native OS screen capture protection None None
Video Feeds & Pooling Built-in (BetterPlayerFeed, BetterPlayerPool) None None
AirPlay & Remote Playback Native AirPlay (iOS/macOS) & Remote Playback (Web) None (3rd party needed) None

📱 Visual Showcase

Better Player Android Mobile Showcase
Mobile Overview
Picture in Picture
Native Picture-in-Picture (PiP)
Better Player Web and Desktop Showcase
Web & Desktop Overview
Touch & Fullscreen Controls
Touch & Fullscreen Controls
Adaptive HLS Quality Switching
Adaptive HLS Quality & Track Switching
Advanced Subtitles
Styled Subtitles (WebVTT, TTML, SRT)

📦 Quick Start

1. Install

flutter pub add better_player

2. Basic Playback

Play a network video with full controls in three lines:

import 'package:better_player/better_player.dart';

AspectRatio(
  aspectRatio: 16 / 9,
  child: BetterPlayer.network(
    "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4",
  ),
)

3. Production Playback (Caching, DRM & HLS)

Configure caching, custom headers, or DRM with a single controller:

final controller = BetterPlayerController(
  const PlayerConfiguration(
    aspectRatio: 16 / 9,
    autoPlay: true,
  ),
  betterPlayerDataSource: PlayerDataSource(
    DataSourceType.network,
    "https://example.com/stream.m3u8",
    // Cache video locally for instant playback:
    cacheConfiguration: const CacheConfiguration(useCache: true),
    // Or protect content with DRM:
    drmConfiguration: DrmConfiguration(
      drmType: DrmType.widevine,
      licenseUrl: "https://license.example.com",
    ),
  ),
);

BetterPlayer(controller: controller);

🌐 Platform Packages

Better Player uses a federated architecture. Each platform runs on its native, hardware-accelerated media engine:

Platform Package Engine Status
Android better_player_android Google Media3 / ExoPlayer pub
iOS better_player_ios Apple AVPlayer pub
macOS better_player_macos Apple AVPlayer pub
Web better_player_web Shaka Player / HTML5 pub
Windows better_player_windows libmpv pub
Linux better_player_linux libmpv pub

🔄 Migration Guides

Switching from another package? Follow the step-by-step migration guides:


🤖 AI Coding Agents

Better Player supports Dart package skills so tools like Cursor, Claude Code, Gemini, and Copilot understand the API out of the box:

dart run skills@ get -p better_player

📖 Resources & Docs


🤝 Contributing

Found a bug or missing a feature? Open an issue or submit a pull request.

💼 Enterprise Support

Need a custom video source adapter, bespoke DRM implementation, or tailored UI controls? I am available for consulting.

Contact on LinkedIn →

Explore related projects