NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #684 most downloaded on pub.dev
A cross-platform video player & audio player for Flutter & Dart. Performant, stable, feature-proof & modular.
Last release 9 months ago
13 Dec 2025
Ships unpredictably
gaps range from 9 days to 10 months
Nearly every release is documented
notes for 48 of 48 stable releases
Nothing withdrawn
no release was ever pulled
4 years old
48 releases · first in 2023
One column per quarter.
fix(windows): long file path support
fix(windows): long file path support
fix(windows): long file path support
fix(native): setShuffle behavior
isDefault property to Trackfeat: allow overriding PlatformPlayer in Player constructor
PlatformPlayer in Player constructor- fix: misc issues
REFACTOR: InitializerNativeCallable & InitializerIsolate.
NativePlayer.- feat: Media start & end
Media start & endfeat: prevent multiple calls to MediaKit.ensureInitialized
MediaKit.ensureInitializeddocs: document updated media_kit_video
media_kit_videofix: NativePlayer play after completed
NativePlayer._commandNativePlayer play after completedAssetLoader in release modePlayerConfiguration.muted for NativePlayer & WebPlayerfix: reset subtitle state/stream in Player.setSubtitleTrack
Player.setSubtitleTrackPlayerStream Stream.distinctrtp & udp to protocol_whitelist by defaultPlayer state/stream upon Player.openPlayer.stop memory leakUnsupportedError w/ SubtitleTrack.(auto|no)NativePlayer.seek to Isolatepackage:uuid version constraintdocs: document updated media_kit_video, media_kit_libs_video & media_kit_libs_audio
media_kit_video, media_kit_libs_video & media_kit_libs_audiodocs: document updated media_kit_video
media_kit_videofix: close PlatformPlayer.playlistModeController
PlatformPlayer.playlistModeControllerfix: movtext subtitles not working
android.view.Surface for every video output- feat: Media.memory
Media.memoryfeat: VideoTrack/AudioTrack/SubtitleTrack expose more parameters
VideoTrack/AudioTrack/SubtitleTrack expose more parametersNativePlayer.observeProperty & NativePlayer.unobservePropertyerror stream not being emitted in certain casesPlayer not exit bufferingBaseURL(s) with special characters not loading- docs: document updated - media_kit_video
media_kit_videofix: set subs-fallback & subs-with-matching-audio
EXT-X-KEY supportsubs-fallback & subs-with-matching-audiohwdec=autoSurfaceTexture.setDefaultBufferSize & render race- docs: document updated - media_kit_libs_ios_audio - media_kit_libs_ios_video - media_kit_libs_macos_audio - media_kit_libs_macos_video
media_kit_libs_ios_audiomedia_kit_libs_ios_videomedia_kit_libs_macos_audiomedia_kit_libs_macos_videofeat: export PlayerState & PlayerStream
PlayerState & PlayerStream- docs: document updated - media_kit_libs_ios_audio - media_kit_libs_ios_video - media_kit_libs_macos_audio - media_kit_libs_macos_video
media_kit_libs_ios_audiomedia_kit_libs_ios_videomedia_kit_libs_macos_audiomedia_kit_libs_macos_videofeat: Player.screenshot pixel-buffer support
Player.screenshot pixel-buffer supportmpv_lavc_set_java_vm in AndroidHelperPlayer.dispose & eliminate mpv_terminate_destroy delayfeat: Player.screenshot for capturing video snapshots as Uint8List
Player.screenshot for capturing video snapshots as Uint8ListAudioTrack.uriSubtitleTrack.uri & SubtitleTrack.dataPlayer.state.videoParams & Player.stream.videoParamsPlayer.state.subtitle & Player.stream.subtitlehwdec=mediacodec w/ enableHardwareAccelerationvid/aid/sid to no in disposeVideoController attachdeps: update `package:http` dependency constraint
package:http dependency constraintdeps: bump `package:http` to 1.1.0
package:http to 1.1.0fix: improve stability on Android emulator(s)
Player.stopbuffering stream behaviorPlayerState volume = 100.0Player.add, Player.remove, Player.jump & Player.move stabilityfix: audioDevices state/stream not being set/emit
audioDevices state/stream not being set/emitperf: emit distinct events in Player.stream
Player.streamPlayer.setAudioDevice not workingcompleted as false upon Player.seekdocs: update demo application links
fix(android): crash on Android 6.0 or lower
docs: document updated media_kit_video
media_kit_videofix: Player.dispose event loop clean-up
Player.dispose event loop clean-upPlayer implementation clean-upInitializer.dispose
InitializerIsolate.disposeInitializerNativeEventLoop.disposePlatformPlayer.waitForVideoControllerInitializationIfAttachedMediafix: MediaKit.ensureInitialized not passing optional libmpv argument
MediaKit.ensureInitialized not passing optional libmpv argumentdocs: document updated media_kit_libs_android_video and media_kit_libs_android_audio
media_kit_libs_android_video and media_kit_libs_android_audiofeat: synchronize Player methods
Player methodsPlaylist handling in Playerplaylist, audioBitrate & audioParams states/eventsfeat: video output width & height states/events:
Player.state.width: currently playing video's width as intPlayer.stream.width: currently playing video's width as Stream<int>Player.state.height: currently playing video's height as intPlayer.stream.height: currently playing video's height as Stream<int>MediaKit.ensureInitializedPlayer.state.buffer: currently buffered duration of the media stream as DurationPlayer.stream.buffer: currently buffered duration of the media stream as Stream<Duration>protocolWhitelist in PlayerConfiguration for whitelisting protocolsbufferSize in PlayerConfiguration for setting demuxer cache sizedocs: document updated media_kit_video
media_kit_videodocs: document updated media_kit_video & media_kit_libs_windows_audio
media_kit_video & media_kit_libs_windows_audiofix: opening Playlist (with index > 0) causes index to be treated 0 after internal queue was finished
Playlist (with index > 0) causes index to be treated 0 after internal queue was finishedplay calls making Player paused- docs(fix): images on pub.dev
fix: unable to publish iOS to AppStore
docs: document updated media_kit_native_event_loop
media_kit_native_event_loopdocs: document updated media_kit_video
media_kit_videodocs: document updated media_kit_video, media_kit_libs_macos_video and media_kit_libs_ios_video
media_kit_video, media_kit_libs_macos_video and media_kit_libs_ios_videofeat: draw first frame upon Player.open before Player.play
Player.open before Player.play (#69)Player.open now accepts Playable i.e. Media or PlaylistPlayer logs from internal backend e.g. libmpv
PlayerLogs: classPlayer.stream.logs: logs as Stream<PlayerLogs>Player.setAudioDevice: methodAudioDevice: classAudioDevice.auto: factory constructorPlayer.state.audioDevice: currently selected audio device as AudioDevicePlayer.stream.audioDevice: currently selected audio device as Stream<AudioDevice>Player.state.audioDevices: currently available audio device(s) as List<AudioDevice>Player.stream.audioDevices: currently available audio device(s) as Stream<List<AudioDevice>>Player.selectVideoTrack: methodPlayer.selectAudioTrack: methodPlayer.selectSubtitleTrack: methodVideoTrack: classAudioTrack: classSubtitleTrack: classVideoTrack.auto: factory constructorVideoTrack.no: factory constructorAudioTrack.auto: factory constructorAudioTrack.no: factory constructorSubtitleTrack.auto: factory constructorSubtitleTrack.no: factory constructorPlayer.state.track.video: currently selected video track as VideoTrackPlayer.stream.track.video: currently selected video track as Stream<VideoTrack>Player.state.track.audio: currently selected audio track as AudioTrackPlayer.stream.track.audio: currently selected audio track as Stream<AudioTrack>Player.state.track.subtitle: currently selected subtitle track as SubtitleTrackPlayer.stream.track.subtitle: currently selected subtitle track as Stream<SubtitleTrack>Player.state.tracks.video: currently available video track(s) as List<VideoTrack>Player.stream.tracks.video: currently available video track(s) as Stream<List<VideoTrack>>Player.state.tracks.audio: currently available audio track(s) as List<AudioTrack>Player.stream.tracks.audio: currently available audio track(s) as Stream<List<AudioTrack>>Player.state.tracks.subtitle: currently available subtitle track(s) as List<SubtitleTrack>Player.stream.tracks.subtitle: currently available subtitle track(s) as Stream<List<SubtitleTrack>>Player.volume setter to Player.setVolumePlayer.rate setter to Player.setRatePlayer.pitch setter to Player.setPitchPlayer.shuffle setter to Player.setShufflePlayer.state.isPlaying to Player.state.playingPlayer.state.isPaused to Player.state.pausedPlayer.state.isCompleted to Player.state.completedPlayer.state.isBuffering to Player.state.bufferingPlayer.stream.isPlaying to Player.stream.playingPlayer.stream.isPaused to Player.stream.pausedPlayer.stream.isCompleted to Player.stream.completedPlayer.stream.isBuffering to Player.stream.buffering- Microsoft Windows support - GNU/Linux support - Initial release
Your coding agent can read these notes before it upgrades. Set up the MCP server →