lux_video_thumbnail_ios
The endorsed iOS implementation of lux_video_thumbnail. Depend on the main
package to use its API, embedded picker, and dialog. Requires iOS 13+, Flutter
3.38.10+ and Dart 3.10.9+.
Uses AVFoundation for local absolute paths, file:// URLs, HTTP(S) URLs and raw
video bytes. Supports reusable sessions, microsecond seek requests, rotation,
aspect ratio or stretched sizing, JPEG/PNG, file-backed results, chunk reading,
copying and disposal. WebP output returns UNSUPPORTED_FORMAT. Video container
and codec support depends on AVFoundation and the device; MIME checks are hints.
Protected videos and unsupported codecs return an error. Remote HTTP access is
subject to the host app's App Transport Security policy; prefer HTTPS.
Media and file operations use a serial background worker with main-thread replies. Limits: four sessions, batches of 16, 16 queued engine calls, 64 MiB queued input bytes, 64 retained thumbnails, 4096 pixels per dimension and 8 MiB per encoded output/read. The image limit is checked after native encoding. Metadata loading has a 30-second timeout. Frame extraction itself has no hard timeout; stuck native work can delay engine cleanup.
Only plugin-created input files and thumbnails are deleted. Closing a session
removes its byte-source temporary; returned thumbnails survive until disposed
or until the engine detaches. Borrowed input paths are never deleted. Output
timestamps identify normalized requests, rather than measured frame PTS.
preferKeyFrame permits approximate native seeking as a speed hint.
Includes CocoaPods and Swift Package Manager manifests. No third-party native
codec is bundled. For file_picker's video gallery UI, add a localized
NSPhotoLibraryUsageDescription to your app's Info.plist. Direct extraction of
files already accessible to the app needs no photo-library permission.
Native compilation and runtime validation require macOS/Xcode. The repository
example contains an ios_thumbnail_test.dart integration suite and XCTest
regressions; these cannot run on Windows. See the root repository's
IOS_VALIDATION.md for commands and the current validation boundary.