eatshots_video_player 0.2.4
eatshots_video_player: ^0.2.4 copied to clipboard
DEPRECATED: This package has been renamed to video_view_player. Please migrate to video_view_player.
0.2.4 (DEPRECATED) #
- This package has been deprecated and renamed to
video_view_player. - All further updates and features will be released under
video_view_player. - All public APIs in this package have been annotated as
@deprecated. Please migrate tovideo_view_player.
0.2.2 #
- iOS & macOS Maintenance:
- Added explicit framework dependencies (
AVFoundation,Network,CoreTelephony,MobileCoreServices) to iOS and macOS podspecs to ensure more reliable linking and build stability. - Updated podspec metadata and platform configurations.
- Added explicit framework dependencies (
0.2.1 #
- Android Build Fix:
- Removed redundant
org.jetbrains.kotlin.androidplugin fromandroid/build.gradle.ktsto resolve build warnings/errors in newer Gradle versions.
- Removed redundant
0.2.0 #
- HLS Support, iOS Caching & Platform Compatibility:
- Android: Added
media3-exoplayer-hlsdependency to ExoPlayer to natively support parsing and streaming of HLS (.m3u8) playlists. - iOS Platform Compatibility: Resolved Swift compiler compatibility errors for older target versions (such as iOS 12):
- Replaced all
.clear()calls onSetinstances with.removeAll(). - Added
valueCompat(forHTTPHeaderField:)extension onHTTPURLResponseto safely handle HTTP headers under iOS 13.0.
- Replaced all
- iOS HLS Rendering Fix (Black Screen):
- Trigger
textureFrameAvailableunconditionally inonDisplayLinkcallback. - Added
currentTimefallback tocopyPixelBufferwhenitemTime(forHostTime:)returns an invalid/indefinite time. This resolves the black screen issue with HLS streams that have dynamic or rolling timelines.
- Trigger
- iOS Caching Fix for Dynamic URLs:
- Implemented query parameter stripping on iOS URLs when generating safe cache filenames and tracking active downloaders. This ensures that CDN URLs with dynamic tokens or dynamic signatures resolve to the same cache key/file, preventing cache misses and duplicate downloads.
- Android: Added
0.1.8 #
- Zero-Delay Seeking, Platform Compatibility & HLS (m3u8) Support:
- Added native HLS (
.m3u8) playback support on iOS by detecting HLS feeds and bypassing the progressive downloader to stream them natively via AVPlayer. - Added HLS prefetch manifest warming on iOS using background data tasks to cache
.m3u8playlist indices and accelerate startup latency. - Implemented
EatshotsSingleRequestStreameron iOS to stream byte-range requests incrementally during seeks, ensuring instantaneous seek playback. - Refactored
serveLocalFileon iOS to strictly serve fully cached assets synchronously and instantly, removing unreachable network code. - Resolved potential dynamic linker (
dyld) load crashes on iOS 12/13 by removing the directUniformTypeIdentifiersframework import and usingMobileCoreServicesAPI fallbacks. - Added compatibility checks for Android 5.0/5.1 (API 21/22) in
VideoCache.getNetworkType()to fall back safely toConnectivityManager.activeNetworkInfoand avoidNoSuchMethodErrorcrashes. - Updated iOS deployment target to 12.0 in Swift Package Manager and CocoaPods configurations.
- Added native HLS (
0.1.7 #
- iOS Performance & Caching Engine Overhaul:
- Implemented
EatshotsMediaDownloader, a thread-safe, sequential background cache downloader shared between prefetching and playing. - Added dynamic range request streaming to bypass caching during seeks or non-sequential container layouts, preventing player freezes.
- Added direct local playback via
file://URLs for fully cached videos, bypassing the resource loader delegate for optimal native performance. - Implemented proper thread-safe background prefetch cancellation (
cancelPrefetch) on iOS, preventing network congestion when scrolling rapidly. - Ensured the local caches directory is automatically created during prefetching to prevent initial write failures.
- Implemented
0.1.6 #
- iOS Caching & Video Playback Fixes:
- Resolved video playback issue on iOS devices caused by a UTI vs. MIME type mismatch in
AVAssetResourceLoadingContentInformationRequest.contentType. - Refactored
EatshotsResourceLoaderDelegateto use atomic cache writing with.tmpand.metafiles, preventing corrupted cache files on initial probes. - Added a hybrid playback strategy where uncached videos stream natively over standard
http/httpsURLs, while cached/prefetched videos use a custom scheme (eatshotscache/eatshotscaches) and support seamless range requests.
- Resolved video playback issue on iOS devices caused by a UTI vs. MIME type mismatch in
0.1.5 #
- iOS Xcode Build Fix:
- Resolved Swift compilation error (
'nil' is not compatible with expected argument type 'any FlutterTexture') inEatshotsVideoPlayerPlugin.swift. - Refactored
EatshotsVideoPlayerinitialization to register the player instance with the texture registry after initialization, matching the macOS plugin implementation pattern.
- Resolved Swift compilation error (
0.1.4 #
- Native Lifecycle & Log Warning Fixes:
- Implemented
onActivityPausedcallback inside the Android native Activity callbacks to loop through all active players and trigger a native pause. - Added
handleActivityPaused()in theEatshotsVideoPlayerclass, which callsexoPlayer?.playWhenReady = falseto stop frame decoding before the OS suspends the graphics surface rendering, preventing "pipeline full" log warnings.
- Implemented
0.1.3 #
- Android Build Fix:
- Added missing
android.net.ConnectivityManagerimport inEatshotsVideoPlayerPlugin.ktto resolve Gradle Kotlin compiler errors.
- Added missing
0.1.2 #
- Connection-Aware Native Caching & Performance Optimizations:
- Implemented an EventChannel stream (
eatshots_video_player/network_events) on Android and iOS to broadcast network connection status reactively to Dart. - Added native bandwidth estimation using ExoPlayer's
DefaultBandwidthMeteron Android to dynamically adjust background prefetch sizes based on real-time speeds. - Implemented
AVAssetResourceLoaderDelegate(EatshotsResourceLoaderDelegate) in Swift on iOS to cache progressive streaming MP4 videos directly to the local disk caches directory. - Optimized ExoPlayer's load control buffering settings for fast startup: reduced initial play buffer to 250ms on Wi-Fi and 500ms on Cellular data.
- Corrected buffering visibility logic in the video player widget to avoid showing the starting thumbnail during buffer stalls.
- Implemented an EventChannel stream (
0.1.1 #
- Fix diagonal rendering shearing and green lines glitch:
- Dynamically resize the
SurfaceTexturedefault buffer size to match actual video dimensions on Android. - Resolves layout/stride mismatch rendering artifacts on certain GPUs (such as Mali and PowerVR) common in Redmi/Xiaomi devices.
- Dynamically resize the
0.1.0 #
- Cellular Network Optimization & adaptive zero-delay playback:
- Added native network connectivity checks (Wi-Fi, 5G, 4G, 3G) using
ConnectivityManagerlink bandwidth estimation on Android, andNWPathMonitorframework on iOS/macOS. - Implemented dynamic ExoPlayer buffer adjustment: fast startup buffers on Wi-Fi (800ms) and safer buffers (2000-3000ms) on cellular to prevent playback stutters under jitter.
- Implemented active prefetch cancellation when scrolling fast via native
CacheWriter.cancel(). - Added adaptive prefetching sizes and queue depths based on network speeds (1.5MB for Wi-Fi/5G, 384KB for 4G, 128KB for 3G).
- Added floating glassmorphic Network Quality HUD overlay and simulated connection speed controls in example app.
- Added native network connectivity checks (Wi-Fi, 5G, 4G, 3G) using
0.0.9 #
- Optimize video startup latency:
- Implemented a custom
DefaultLoadControlreducing the required startup buffer to500ms(down from the default2.5s), resulting in near-instant playback. - Optimized
DefaultRenderersFactoryto skip software extension renderer checks, utilizing the platform hardware decoders immediately.
- Implemented a custom
0.0.8 #
- Fix Android Media3 setter bug:
- Initialized
DefaultMediaSourceFactoryusing the constructor that accepts the data source factory directly, bypassing a bug in some Media3 versions wheresetDataSourceFactoryis ignored.
- Initialized
0.0.7 #
- Fix Android asset playback:
- Wrapped ExoPlayer's CacheDataSource upstream factory with
DefaultDataSource.Factory. - Resolved
unknown protocol: assetexception when trying to load local Flutter video assets.
- Wrapped ExoPlayer's CacheDataSource upstream factory with
0.0.6 #
- Add macOS platform support:
- Implemented native macOS video player in Swift using AVFoundation.
- Used a Swift Timer running at 60fps to drive frame rendering updates.
- Enabled client network access entitlements in the macOS example runner to allow playing video streams in sandboxed mode.
- Declared macOS platform support in pubspec.yaml.
- Fix fast-scrolling concurrency crashes:
- Implemented a coalesced sequential update queue in
EatshotsVideoPlayerPoolManagerto serialize active index updates and skip intermediate indices during fast scrolling. - Added an initialization guard to
EatshotsVideoPlayerController.setDataSourceto wait for native player setup to finish before changing data sources, avoiding native decoder races and crashes.
- Implemented a coalesced sequential update queue in
0.0.5 #
- Updated repository and homepage URLs to the correct GitHub path (
Narukarudra10/eatshots_video_player). - Updated README dependency reference versions.
0.0.4 #
- Expanded documentation in the README with:
- Feature overview highlighting native controller pooling, aggressive caching, and background prefetching.
- API reference documentation for
EatshotsVideoPlayerController. - Detailed usage example code for initialization and playback settings.
0.0.3 #
- Enhanced initialization lifecycle:
- Added caching of volume, looping, and play states set before native initialization finishes, automatically applying them once the player is ready.
- Refactored volume, looping, and playback status controls to be resilient to pre-initialization states.
0.0.2 #
- Expanded source capabilities:
- Added
EatshotsVideoPlayerController.networkUrl,.file, and.assetconstructors. - Added volume controls (
setVolume) and looping toggles (setLooping) in Dart API, platform interface, and Android/iOS native implementations.
- Added
0.0.1 #
- Initial release of eatshots_video_player.