video_ultra_player 1.2.0
video_ultra_player: ^1.2.0 copied to clipboard
Native gapless timeline player plugin backed by platform video composition and a single Flutter texture.
1.2.0 #
Timeline editing #
- Added
NativeTimelinePlayer.trimClip(int clipIndex, {Duration? trimStart, Duration? trimEnd})to non-destructively adjust the in/out points of a clip. - Added
NativeTimelinePlayer.splitClip(int clipIndex, Duration atLocalPosition)to cut a clip in two at a given position; the split point is always a hard cut. - Added
NativeTimelinePlayer.insertClip(int atIndex, TimelineClip clip)to insert a new clip at any position in the timeline. - Added
NativeTimelinePlayer.removeClip(int clipIndex)to remove a clip from the timeline. - Added
NativeTimelinePlayer.moveClip(int fromIndex, int toIndex)to reorder clips without a full reload. - Added
NativeTimelinePlayer.replaceClip(int clipIndex, TimelineClip clip)to swap a clip while preserving playback position. - All editing operations rebuild the native composition in-place and preserve the current playback position and play/pause state.
Export from edited state #
- Added
NativeTimelinePlayer.exportCurrentTimeline({String? outputPath})to export the timeline as it currently exists in the native compositor — including all edits applied sinceload. This is the correct export method to call after any editing operation.
Model changes #
- Added
TimelineClip.trimStartandTimelineClip.trimEnd(Duration?) to declare source trim bounds when constructing a clip. - Added
TimelineClip.transitionToNext(ClipTransition?) for per-boundary transitions. - Added
ClipTransitionmodel (TransitionType.none/TransitionType.crossfade,Duration duration). - Added
TimelinePlayerState.clipDurations(List<Duration>) — emitted after every mutation so the UI can re-sync the timeline bar without a reload.
Example app #
- Added editing toolbar: Split at playhead, Remove clip, Move ◀/▶, Trim in/Trim out.
- Export button now uses
exportCurrentTimeline()so the exported MP4 matches the edited preview. - Clip chip count now derived from
state.clipDurationsfor immediate accuracy after splits and removes.
1.1.0 #
- Added
NativeTimelinePlayer.seekToClip(int clipIndex)to seek directly to the start of a specific clip in the timeline (resolved natively on both iOS and Android). - Added clip-jump chips in the example app to demonstrate the new API.
1.0.2 #
- Fixed image clips rendered upside-down in preview and export on iOS (
makePixelBuffer: apply vertical flip to CGContext before drawing UIImage).
1.0.1 #
- Removed cross-fade transition feature:
TimelineCompositionConfig.transitionDurationremoved. - Fixed Android preview blank screen caused by incompatibility between
VideoCompositorSettingsandCompositionPlayer(SingleInputVideoGraph). - Simplified composition to a single gapless sequence on both iOS and Android.
- Improved playback error messages to include full native cause chain.
1.0.0 #
- Initial release.
- Added native gapless timeline preview for local video and image clips.
- Added MP4 export for composed timelines on iOS and Android.
- Added playback controls, timeline state stream, scrub support, and per-clip pan/crop alignment.
- Added an example app with bundled sample media, gallery video selection, preview, and export.