Skip to content

[video_player] Support adaptive bitrate streaming (ABR / dynamic quality switching) #183941

@sheershtehri7

Description

@sheershtehri7

Problem

The current video_player plugin relies on native player ABR (ExoPlayer / AVPlayer), but this does not handle all real-world cases of network degradation.

In testing, removing Dart-side adaptive logic resulted in:

  • No quality downgrade during buffering
  • Playback stalls under poor network conditions

This suggests native ABR alone is insufficient without app-level feedback.

Proposal

Introduce adaptive bitrate control via:

  • A public API: setBandwidthLimit(int bitrate)
  • Internal Dart-level manager that:
    • Observes buffering events
    • Dynamically adjusts bitrate

Why this is needed

  • Native ABR selects quality initially but does not always react to runtime buffering effectively
  • Apps need control over bandwidth ceilings
  • No existing API in video_player supports this

Platforms affected

  • Android (ExoPlayer)
  • iOS (AVPlayer)

Proposal Outcome

  • Better playback stability under fluctuating networks
  • Reduced buffering
  • Developer control over bitrate behavior

Related

Design doc will be attached for review.

Metadata

Metadata

Assignees

No one assigned

    Labels

    📜Issue was posted to Discord. Remove to have the issue reannounced. (For "design doc", "emergency")P2Important issues not at the top of the work listc: proposalA detailed proposal for a change to Flutterdesign docTracks a design discussion documentp: video_playerThe Video Player pluginpackageflutter/packages repository. See also p: labels.platform-androidAndroid applications specificallyplatform-iosiOS applications specificallyteam-ecosystemOwned by Ecosystem teamtriaged-ecosystemTriaged by Ecosystem team

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions