Flutter video trimmer package

Overview
Awesome Flutter Pub Version GitHub stars GitHub license

Video Trimmer

A Flutter package for trimming videos

Features

  • Customizable video trimmer
  • Video playback control
  • Retrieving and storing video file

Also, supports conversion to GIF.

TRIM EDITOR

Trim Editor

EXAMPLE APP

Trimmer

CUSTOMIZABLE VIDEO EDITOR

Trim Editor

Usage

  • Add the dependency video_trimmer to your pubspec.yaml file.

Android

  • Go to <project root>/android/app/build.gradle and set the proper minSdkVersion, 24 for Main Release or 16 for LTS Release.

    Refer to the FFmpeg Release section.

    minSdkVersion <version>
  • Go to <project root>/android/build.gradle and add the following line:

    ext.flutterFFmpegPackage = '<package name>'

    Replace the <package name> with a proper package name from the Packages List section.

iOS

  • Add the following keys to your Info.plist file, located in <project root>/ios/Runner/Info.plist:

    <key>NSCameraUsageDescription</key>
    <string>Used to demonstrate image picker plugin</string>
    <key>NSMicrophoneUsageDescription</key>
    <string>Used to capture audio for image picker plugin</string>
    <key>NSPhotoLibraryUsageDescription</key>
    <string>Used to demonstrate image picker plugin</string>
    
  • Set the platform version in ios/Podfile, 11.0 for Main Release or 9.3 for LTS Release.

    Refer to the FFmpeg Release section.

    platform :ios, '<version>'
    
  • [Flutter >= 1.20.x] Edit ios/Podfile and add the following block before target 'Runner' do section:

    def flutter_install_ios_plugin_pods(ios_application_path = nil)
      # defined_in_file is set by CocoaPods and is a Pathname to the Podfile.
      ios_application_path ||= File.dirname(defined_in_file.realpath) if self.respond_to?(:defined_in_file)
      raise 'Could not find iOS application path' unless ios_application_path
    
      # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock
      # referring to absolute paths on developers' machines.
    
      symlink_dir = File.expand_path('.symlinks', ios_application_path)
      system('rm', '-rf', symlink_dir) # Avoid the complication of dependencies like FileUtils.
    
      symlink_plugins_dir = File.expand_path('plugins', symlink_dir)
      system('mkdir', '-p', symlink_plugins_dir)
    
      plugins_file = File.join(ios_application_path, '..', '.flutter-plugins-dependencies')
      plugin_pods = flutter_parse_plugins_file(plugins_file)
      plugin_pods.each do |plugin_hash|
        plugin_name = plugin_hash['name']
        plugin_path = plugin_hash['path']
        if (plugin_name && plugin_path)
          symlink = File.join(symlink_plugins_dir, plugin_name)
          File.symlink(plugin_path, symlink)
    
          if plugin_name == 'flutter_ffmpeg'
              pod 'flutter_ffmpeg/<package name>', :path => File.join('.symlinks', 'plugins', plugin_name, 'ios')
          else
              pod plugin_name, :path => File.join('.symlinks', 'plugins', plugin_name, 'ios')
          end
        end
      end
    end
    

    Replace the <package name> with a proper package name from the Packages List section.

  • [Flutter < 1.20.x] Edit ios/Podfile file and modify the default # Plugin Pods block as follows.

    # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock
    # referring to absolute paths on developers' machines.
    
    system('rm -rf .symlinks')
    system('mkdir -p .symlinks/plugins')
    plugin_pods = parse_KV_file('../.flutter-plugins')
    plugin_pods.each do |name, path|
      symlink = File.join('.symlinks', 'plugins', name)
      File.symlink(path, symlink)
      if name == 'flutter_ffmpeg'
          pod name+'/<package name>', :path => File.join(symlink, 'ios')
      else
          pod name, :path => File.join(symlink, 'ios')
      end
    end
    

    Replace the <package name> with a proper package name from the Packages List section.

FFmpeg Release

In reference to the releases specified in the flutter_ffmpeg package.

Main Release LTS Release
Android API Level 24 16
Android Camera Access Yes -
Android Architectures arm-v7a-neon
arm64-v8a
x86
x86-64
arm-v7a
arm-v7a-neon
arm64-v8a
x86
x86-64
Xcode Support 10.1 7.3.1
iOS SDK 12.1 9.3
iOS Architectures arm64
arm64e
x86-64
armv7
arm64
i386
x86-64

Packages List

The following FFmpeg Packages List is in reference to the flutter_ffmpeg package.

Package Main Release LTS Release
min min min-lts
min-gpl min-gpl min-gpl-lts
https https https-lts
https-gpl https-gpl https-gpl-lts
audio audio audio-lts
video video video-lts
full full full-lts
full-gpl full-gpl full-gpl-lts

Functionalities

Loading input video file

final Trimmer _trimmer = Trimmer();
await _trimmer.loadVideo(videoFile: file);

Saving trimmed video

Returns a string to indicate whether the saving operation was successful.

await _trimmer
    .saveTrimmedVideo(startValue: _startValue, endValue: _endValue)
    .then((value) {
  setState(() {
    _value = value;
  });
});

Video playback state

Returns the video playback state. If true then the video is playing, otherwise it is paused.

await _trimmer.videPlaybackControl(
  startValue: _startValue,
  endValue: _endValue,
);

Advanced Command

You can use an advanced FFmpeg command if you require more customization. Just define your FFmpeg command using the ffmpegCommand property and set an output video format using customVideoFormat.

Refer to the Official FFmpeg Documentation for more information.

NOTE: Passing a wrong video format to the customVideoFormat property may result in a crash.

// Example of defining a custom command

// This is already used for creating GIF by
// default, so you do not need to use this.

await _trimmer
    .saveTrimmedVideo(
        startValue: _startValue,
        endValue: _endValue,
        ffmpegCommand:
            '-vf "fps=10,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" -loop 0',
        customVideoFormat: '.gif')
    .then((value) {
  setState(() {
    _value = value;
  });
});

Widgets

Display a video playback area

VideoViewer()

Display the video trimmer area

TrimEditor(
  viewerHeight: 50.0,
  viewerWidth: MediaQuery.of(context).size.width,
  onChangeStart: (value) {
    _startValue = value;
  },
  onChangeEnd: (value) {
    _endValue = value;
  },
  onChangePlaybackState: (value) {
    setState(() {
      _isPlaying = value;
    });
  },
)

Example

import 'dart:io';

import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:video_trimmer/trim_editor.dart';
import 'package:video_trimmer/video_trimmer.dart';
import 'package:video_trimmer/video_viewer.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Video Trimmer',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: HomePage(),
    );
  }
}

class HomePage extends StatelessWidget {
  final Trimmer _trimmer = Trimmer();
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Video Trimmer"),
      ),
      body: Center(
        child: Container(
          child: RaisedButton(
            child: Text("LOAD VIDEO"),
            onPressed: () async {
              File file = await ImagePicker.pickVideo(
                source: ImageSource.gallery,
              );
              if (file != null) {
                await _trimmer.loadVideo(videoFile: file);
                Navigator.of(context)
                    .push(MaterialPageRoute(builder: (context) {
                  return TrimmerView(_trimmer);
                }));
              }
            },
          ),
        ),
      ),
    );
  }
}

class TrimmerView extends StatefulWidget {
  final Trimmer _trimmer;
  TrimmerView(this._trimmer);
  @override
  _TrimmerViewState createState() => _TrimmerViewState();
}

class _TrimmerViewState extends State<TrimmerView> {
  double _startValue = 0.0;
  double _endValue = 0.0;

  bool _isPlaying = false;
  bool _progressVisibility = false;

  Future<String> _saveVideo() async {
    setState(() {
      _progressVisibility = true;
    });

    String _value;

    await widget._trimmer
        .saveTrimmedVideo(startValue: _startValue, endValue: _endValue)
        .then((value) {
      setState(() {
        _progressVisibility = false;
        _value = value;
      });
    });

    return _value;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Video Trimmer"),
      ),
      body: Builder(
        builder: (context) => Center(
          child: Container(
            padding: EdgeInsets.only(bottom: 30.0),
            color: Colors.black,
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              mainAxisSize: MainAxisSize.max,
              children: <Widget>[
                Visibility(
                  visible: _progressVisibility,
                  child: LinearProgressIndicator(
                    backgroundColor: Colors.red,
                  ),
                ),
                RaisedButton(
                  onPressed: _progressVisibility
                      ? null
                      : () async {
                          _saveVideo().then((outputPath) {
                            print('OUTPUT PATH: $outputPath');
                            final snackBar = SnackBar(content: Text('Video Saved successfully'));
                            Scaffold.of(context).showSnackBar(snackBar);
                          });
                        },
                  child: Text("SAVE"),
                ),
                Expanded(
                  child: VideoViewer(),
                ),
                Center(
                  child: TrimEditor(
                    viewerHeight: 50.0,
                    viewerWidth: MediaQuery.of(context).size.width,
                    onChangeStart: (value) {
                      _startValue = value;
                    },
                    onChangeEnd: (value) {
                      _endValue = value;
                    },
                    onChangePlaybackState: (value) {
                      setState(() {
                        _isPlaying = value;
                      });
                    },
                  ),
                ),
                FlatButton(
                  child: _isPlaying
                      ? Icon(
                          Icons.pause,
                          size: 80.0,
                          color: Colors.white,
                        )
                      : Icon(
                          Icons.play_arrow,
                          size: 80.0,
                          color: Colors.white,
                        ),
                  onPressed: () async {
                    bool playbackState =
                        await widget._trimmer.videPlaybackControl(
                      startValue: _startValue,
                      endValue: _endValue,
                    );
                    setState(() {
                      _isPlaying = playbackState;
                    });
                  },
                )
              ],
            ),
          ),
        ),
      ),
    );
  }
}

License

Copyright (c) 2020 Souvik Biswas

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Comments
  • Trimmed video first seconds sometimes stuck

    Trimmed video first seconds sometimes stuck

    Hi! First of all, I love this new package, While I was using it, I realized that sometimes the video is stuck in the first few seconds after it was trimmed (but the audio is still playing). I think that it is because of the FFmpeg command, but I'm not sure and couldn't find the exact reason.

    bug 
    opened by omercn18 28
  • download video couldn't generate thumbnail

    download video couldn't generate thumbnail

    hi

    when I pick download video. below error occurs on iOS ( iPhone7 ) android works fine

    flutter: /private/var/mobile/Containers/Data/Application/09F51573-CA6E-49BA-A792-E7FEBF4A5F74/tmp/_talkv_woYgOXv7ml_zSU8dBVSYS00f6uxummnuk_talkv_high.mp4 couldn't generate thumbnail, error:Error Domain=AVFoundationErrorDomain Code=-11832 "Cannot Open" UserInfo={NSLocalizedFailureReason=This media cannot be used., NSLocalizedDescription=Cannot Open, NSUnderlyingError=0x283f9c690 {Error Domain=NSOSStatusErrorDomain Code=-12431 "(null)"}}

    Image

    https://helloworld43943.tumblr.com/image/649523710269767680

    thx for your effort πŸ˜‡

    bug investigating 
    opened by yoonjiyong 25
  • App size increased heavily

    App size increased heavily

    This is a great plugin, but my app bundle size increased by about 40 mb after adding this package.

    Is there a way to reduce this? Or is it something I can't avoid?

    flutter doctor
    Doctor summary (to see all details, run flutter doctor -v):
    [βœ“] Flutter (Channel stable, v1.17.5, on Mac OS X 10.15.5 19F101, locale en-IN)
    
    [βœ“] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
    [βœ“] Xcode - develop for iOS and macOS (Xcode 11.5)
    [βœ“] Android Studio (version 4.0)
    [!] IntelliJ IDEA Community Edition (version 2020.1)
        βœ— Flutter plugin not installed; this adds Flutter specific functionality.
        βœ— Dart plugin not installed; this adds Dart specific functionality.
    [βœ“] VS Code (version 1.36.1)
    [βœ“] Connected device (1 available)
    
    ! Doctor found issues in 1 category.
    
    opened by avvari-da 15
  • TrimEditor widget doesn't work correctly

    TrimEditor widget doesn't work correctly

    Hi. I'm using the latest version 0.5.2. And the TrimEditor widget doesn't show the slider, it only shows the white circle. Built on Samsung S8+ - Android 9, Android Studio emu - Android 8, produced the same result.

    Screenshot_20210702-170923(2)

    bug 
    opened by tridianthor 12
  • When I call the trimmer instance saveVideo, my real device app crashes

    When I call the trimmer instance saveVideo, my real device app crashes

    When I ran this on my emulator it worked, but I ran it on my Samsung 10+ phone using Android 11 (API 30) it crashed the app. Please what's the issue. I'm using the 0.4.0 version

    bug 
    opened by zuruoke 10
  • Minimum Android version

    Minimum Android version

    Thanks for this great package, it will be very useful for the new trends related to Videos.

    I would like to know why the minimum version of Android is 24?

    I suppose it has to do with the FFmpeg package that requires a minimum version of android.

    Do you have a future plan to cover more versions until at least 23?

    I see that at level 23 is 16.9% of the devices with this version.

    I leave here the reference.

    distribution android version

    opened by wilfredonoyola 9
  • fatal error: 'mobileffmpeg/LogDelegate.h' file not found

    fatal error: 'mobileffmpeg/LogDelegate.h' file not found

    video_trimmer:0.3.4 I can compile and run normally, but flutter build IOS reports an error fatal error: 'mobileffmpeg/LogDelegate.h' file not found 'mobileffmpeg/ExecuteDelegate.h' file not found

    bug addressed 
    opened by wangyan-png 8
  • Because every version of flutter_test from sdk depends on path 1.8.0 and video_trimmer >=1.1.0 depends on path ^1.8.1, flutter_test from sdk is incompatible with video_trimmer >=1.1.0. So, because 'my app name 'depends on both video_trimmer ^1.1.1 and flutter_test from sdk, version solving failed. pub get failed (1; So, because  'my app name depends on both video_trimmer ^1.1.1 and flutter_test from sdk, version solving failed.)

    Because every version of flutter_test from sdk depends on path 1.8.0 and video_trimmer >=1.1.0 depends on path ^1.8.1, flutter_test from sdk is incompatible with video_trimmer >=1.1.0. So, because 'my app name 'depends on both video_trimmer ^1.1.1 and flutter_test from sdk, version solving failed. pub get failed (1; So, because 'my app name depends on both video_trimmer ^1.1.1 and flutter_test from sdk, version solving failed.)

    Because every version of flutter_test from sdk depends on path 1.8.0 and video_trimmer >=1.1.0 depends on path ^1.8.1, flutter_test from sdk is incompatible with video_trimmer >=1.1.0. So, because 'my app name depends on both video_trimmer ^1.1.1 and flutter_test from sdk, version solving failed. pub get failed (1; So, because 'my app name 'depends on both video_trimmer ^1.1.1 and flutter_test from sdk, version solving failed.)

    opened by jack84156 7
  • Execution failed for task ':app:checkDebugDuplicateClasses'.

    Execution failed for task ':app:checkDebugDuplicateClasses'.

    Hi i'm using also ffmpeg_kit_flutter_full_gpl: ^4.5.1-LTS this cause duplicate classes failure. How can we change the package of ffmpeg plugins?

    What went wrong: Execution failed for task ':app:checkReleaseDuplicateClasses'. A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable Duplicate class com.arthenica.ffmpegkit.Abi found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.AbiDetect found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.AbstractSession found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.AsyncFFmpegExecuteTask found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.AsyncFFprobeExecuteTask found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.AsyncGetMediaInformationTask found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.BuildConfig found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.CameraSupport found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.Chapter found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.FFmpegKit found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.FFmpegKitConfig found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.FFmpegKitConfig$1 found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.FFmpegKitConfig$2 found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.FFmpegKitConfig$SAFProtocolUrl found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.FFmpegSession found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.FFmpegSessionCompleteCallback found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.FFprobeKit found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.FFprobeSession found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.FFprobeSessionCompleteCallback found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.Level found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.Log found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.LogCallback found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.LogRedirectionStrategy found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.MediaInformation found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.MediaInformationJsonParser found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.MediaInformationSession found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.MediaInformationSessionCompleteCallback found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.NativeLoader found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.Packages found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.ReturnCode found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.Session found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.SessionState found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.Signal found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.Statistics found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.StatisticsCallback found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS) Duplicate class com.arthenica.ffmpegkit.StreamInformation found in modules jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-full-gpl:4.5.1-1) and jetified-ffmpeg-kit-https-4.5.1-1-runtime (com.arthenica:ffmpeg-kit-https:4.5.1-1.LTS)

    opened by dannycortesv 7
  • Issue with video trimmer working code. Working code stopped working

    Issue with video trimmer working code. Working code stopped working

    My working code of video trimmer stopped working and showing error . It was working fine earlier. Below is the screenshot of what it appears now. It was working all fine earlier. @sbis04 @themadmrj @domliang @ArjanAswal

    Screenshot 2022-01-01 at 10 31 42 PM

    and here is the pubspec for videos i have

    video_trimmer: ^1.0.0 ffmpeg_kit_flutter: ^4.5.0-LTS video_player: ^2.2.10 video_editor: ^1.2.2

    If i add ffmpeg_kit_flutter: git: url: https://github.com/shilangyu/ffmpeg-kit ref: development-flutter path: prebuilt/bundle-flutter-lts/default

    Then error comes. - Because myproject depends on video_trimmer ^1.0.0 which depends on ffmpeg_kit_flutter 4.5.0-LTS, ffmpeg_kit_flutter from hosted is required.

    and if version is downgraded then

    then its showing error on save

     _trimmer.saveTrimmedVideo(
          startValue: _startValue,
          endValue: _endValue,
          onSave: 
    
    Screenshot 2022-01-02 at 9 14 28 AM addressed 
    opened by aditya-mahajan96 7
  • The app stops on : flutter run --release when saving the trimmed video

    The app stops on : flutter run --release when saving the trimmed video

    I/flutter (15561): Formatted: Aug15,2021-09:09:43
    I/flutter (15561): Creating
    I/flutter (15561): Retrieved Trimmer folder
    I/flutter (15561): Start: 0:00:00.000000 & End: 0:00:01.820000
    I/flutter (15561): /data/user/0/com.example.videotrim/app_flutter/Trimmer/
    I/flutter (15561): OUTPUT: .mp4
    D/flutter-ffmpeg(15561): Running FFmpeg with arguments: [-ss, 0:00:00.000000, -i, /data/user/0/com.example.videotrim/cache/file_picker/VID-20210811-WA0002.mp4, -t, 0:00:01.820000, -avoid_negative_ts, make_zero, -c:a, copy, -c:v, copy, /data/user/0/com.example.videotrim/app_flutter/Trimmer/VID-20210811-WA0002_trimmed:Aug15,2021-09:09:43.mp4].
    E/AndroidRuntime(15561): FATAL EXCEPTION: AsyncTask #2
    E/AndroidRuntime(15561): Process: com.sosnetworks.maberrr, PID: 15561
    E/AndroidRuntime(15561): java.lang.RuntimeException: An error occurred while executing doInBackground()
    E/AndroidRuntime(15561): 	at android.os.AsyncTask$4.done(AsyncTask.java:399)
    E/AndroidRuntime(15561): 	at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
    E/AndroidRuntime(15561): 	at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
    E/AndroidRuntime(15561): 	at java.util.concurrent.FutureTask.run(FutureTask.java:271)
    E/AndroidRuntime(15561): 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
    E/AndroidRuntime(15561): 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
    E/AndroidRuntime(15561): 	at java.lang.Thread.run(Thread.java:919)
    E/AndroidRuntime(15561): Caused by: java.lang.UnsatisfiedLinkError: Bad JNI version returned from JNI_OnLoad in "/data/app/com.sosnetworks.maberrr-zOO2TvvEh9H3F0cpfVARtA==/base.apk!/lib/arm64-v8a/libmobileffmpeg.so": 0
    E/AndroidRuntime(15561): 	at java.lang.Runtime.loadLibrary0(Runtime.java:1071)
    E/AndroidRuntime(15561): 	at java.lang.Runtime.loadLibrary0(Runtime.java:1007)
    E/AndroidRuntime(15561): 	at java.lang.System.loadLibrary(System.java:1667)
    E/AndroidRuntime(15561): 	at com.arthenica.mobileffmpeg.Config.<clinit>(Unknown Source:146)
    E/AndroidRuntime(15561): 	at com.arthenica.mobileffmpeg.Config.f(Unknown Source:0)
    E/AndroidRuntime(15561): 	at com.arthenica.mobileffmpeg.c.d(Unknown Source:2)
    E/AndroidRuntime(15561): 	at c.a.a.a.a.a(Unknown Source:31)
    E/AndroidRuntime(15561): 	at c.a.a.a.a.doInBackground(Unknown Source:2)
    E/AndroidRuntime(15561): 	at android.os.AsyncTask$3.call(AsyncTask.java:378)
    E/AndroidRuntime(15561): 	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    E/AndroidRuntime(15561): 	... 3 more
    opened by kahdichienja 7
  • Usage without ffmpeg

    Usage without ffmpeg

    This is a nice library, but ffmpeg is a huge dependency. It would be nice if saveTrimmedVideo was provided as a separate package, so that we could use video_trimmer as a UI, and then generate on our own.

    In my use case (gif), it may be enough to generate a bunch of thumbnails and join them using image package, but for someone else, they could trim the video on backend, or maybe even use ffmpeg.wasm.

    opened by szotp-lc 0
  • Duplicate class I'm already using ffmpeg_kit_flutter_audio in my code: 5.1.0-LTS for audio conversion

    Duplicate class I'm already using ffmpeg_kit_flutter_audio in my code: 5.1.0-LTS for audio conversion

    I'm already using ffmpeg_kit_flutter_audio in my code: 5.1.0-LTS for audio conversion, when you put the video_trimmer general the error, is there any way to solve it?

    FAILURE: Build failed with an exception.

    • What went wrong: Execution failed for task ':app:checkDebugDuplicateClasses'.

    A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable Duplicate class com.arthenica.ffmpegkit.Abi found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.AbiDetect found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.AbstractSession found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.AsyncFFmpegExecuteTask found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.AsyncFFprobeExecuteTask found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.AsyncGetMediaInformationTask found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.BuildConfig found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.CameraSupport found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.Chapter found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.FFmpegKit found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.FFmpegKitConfig found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.FFmpegKitConfig$1 found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.FFmpegKitConfig$2 found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.FFmpegKitConfig$SAFProtocolUrl found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.FFmpegSession found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.FFmpegSessionCompleteCallback found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.FFprobeKit found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.FFprobeSession found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.FFprobeSessionCompleteCallback found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.Level found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.Log found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.LogCallback found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.LogRedirectionStrategy found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.MediaInformation found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.MediaInformationJsonParser found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.MediaInformationSession found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.MediaInformationSessionCompleteCallback found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.NativeLoader found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.Packages found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.ReturnCode found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.Session found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.SessionState found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.Signal found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.Statistics found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.StatisticsCallback found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1) Duplicate class com.arthenica.ffmpegkit.StreamInformation found in modules jetified-ffmpeg-kit-audio-5.1.LTS-runtime (com.arthenica:ffmpeg-kit-audio:5.1.LTS) and jetified-ffmpeg-kit-https-5.1-runtime (com.arthenica:ffmpeg-kit-https:5.1)

     Go to the documentation to learn how to <a href="d.android.com/r/tools/classpath-sync-errors">Fix dependency resolution errors</a>.
    
    • Try:

    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

    • Get more help at https://help.gradle.org

    BUILD FAILED in 21s Exception: Gradle task assembleDebug failed with exit code 1

    opened by appstarsbiblia 5
  • [Feature Request] Add `minVideoLength` to TrimViewer parameters

    [Feature Request] Add `minVideoLength` to TrimViewer parameters

    Feature Request:

    Add minVideoLength that behaves in the same way maxVideoLength does. Except it prevents the user from trimming a video shorter that minVideoLength.

    This would also give the ability to create a "fixed width trim" as requested in this issue by setting max and min equal to each other.

    opened by dkbnz 1
  • Non-scrollable Timeline

    Non-scrollable Timeline

    Thank you for the time and effort in making and maintaining this great package.

    Problem

    As I understand the scrollable trim viewer is enabled when the video duration is greater than the maxVideoLength. However, I cannot get the timeline (with thumbnails) to scroll. Setting ViewerType.scrollable does nothing as well. Using debugPrint, I know the flag _isScrollableAllowed is set to true.

    Minimal Reproducible Example

    Used the official example in this repo.

    trimmer

    Other Info

    video_trimmer: 2.0.1

    Flutter doctor [βœ“] Flutter (Channel stable, 3.3.9, on Linux 6.0.11-arch1-1, locale en_GB.UTF-8) β€’ Flutter version 3.3.9 on channel stable at /home/name/Android/flutter β€’ Upstream repository https://github.com/flutter/flutter.git β€’ Framework revision b8f7f1f986 (2 weeks ago), 2022-11-23 06:43:51 +0900 β€’ Engine revision 8f2221fbef β€’ Dart version 2.18.5 β€’ DevTools version 2.15.0

    [βœ“] Android toolchain - develop for Android devices (Android SDK version 33.0.0) β€’ Android SDK at /home/name/Android/Sdk β€’ Platform android-33, build-tools 33.0.0 β€’ Java binary at: /home/name/android-studio/jre/bin/java β€’ Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840) β€’ All Android licenses accepted.

    opened by Weav3r 0
  • CocoaPods could not find compatible versions for pod

    CocoaPods could not find compatible versions for pod "ffmpeg_kit_flutter/https":

    I got this error when pod install:

    [!] CocoaPods could not find compatible versions for pod "ffmpeg_kit_flutter/https": In Podfile: ffmpeg_kit_flutter (from .symlinks/plugins/ffmpeg_kit_flutter/ios) was resolved to 5.1.0, which depends on ffmpeg_kit_flutter/https (= 5.1.0)

    Specs satisfying the ffmpeg_kit_flutter/https (= 5.1.0) dependency were found, but they required a higher minimum deployment target.

    //platform :ios, '11.0' //Flutter version :3.3.7

    waiting for user reply 
    opened by LEHOANGLONG0807 1
Owner
Souvik Biswas
Android, iOS & Flutter Developer | C++, Java and Dart Programmer | Technical Writer @Medium & @NevercodeHQ | @udacity Secure and Private AI '19 Scholar
Souvik Biswas
This is a flutter package of video player. it's a very simple and easy to use.

This is a flutter package of video player. it's a very simple and easy to use.

εˆε†¬ 184 Nov 18, 2022
Official Flutter SDK for LiveKit. Easily add real-time video and audio to your Flutter apps.

LiveKit Flutter SDK Official Flutter SDK for LiveKit. Easily add real-time video and audio to your Flutter apps. This package is published to pub.dev

LiveKit 116 Dec 14, 2022
Flutter plugin for use Video.js in flutter web

Flutter Video.js player Flutter plugin for use Video.js in flutter web Installation Add it to your package's pubspec.yaml file dependencies: video_j

null 15 Oct 17, 2022
The video player for Flutter with a heart of gold

chewie The video player for Flutter with a heart of gold. The video_player plugin provides low-level access to video playback. Chewie uses the video_p

Brian Egan 1.6k Jan 7, 2023
Better video player for Flutter, with multiple configuration options. Solving typical use cases!

Better video player for Flutter, with multiple configuration options. Solving typical use cases!

Jakub 732 Jan 2, 2023
video call with WebRTC and Flutter

Video Call Flutter App ?? Description: This is sandbox video call application using Flutter and WebRTC, you can call from browser to browser, phone to

Dao Hong Vinh 21 Nov 9, 2022
A fully-functional video streaming app made in Flutter using Custom Nodejs backend.

LAVENDER ?? A fully-functional video streaming app like netflix made in Flutter using Custom Nodejs backend. How To Run This Project ??‍♂️ Clone the r

null 71 Jan 10, 2023
Open source geo based video sharing social app created with Flutter, Supabase and lots of love πŸ’™πŸ’™πŸ’™

Spot Take a virtual journey around the world with Spot. Spot is a geo-tagged video sharing app, meaning every video recorded in Spot is saved on a loc

Tyler 283 Jan 3, 2023
Video call with WebRTC and Flutter

This is sandbox video call application using Flutter and WebRTC, you can call from browser to browser, phone to phone, browser to phone and opposite.

Dao Hong Vinh 21 Nov 9, 2022
Fleo - A video calling application developed using flutter🀠

Fleo ?? Video Calling Application developed using flutter Light and Dark Modes ?? Join using Room Codes ?? One room can accomodate upto 4 persons Powe

Madhav Pruthi 41 Dec 25, 2022
Advanced video player based on video_player and Chewie for flutter

Better Player Advanced video player based on video_player and Chewie. It's solves many typical use cases and it's easy to run. Introduction This plugi

Ahmed Mahmoud 1 Dec 22, 2021
Sandbox video call application using Flutter and WebRTC

Video Call Flutter App ?? Description: This is sandbox video call application using Flutter and WebRTC, you can call from browser to browser, phone to

Dao Hong Vinh 21 Nov 9, 2022
Base on Vap to play alpha video animation

Backdrop Transparent video animation is currently one of the more popular implementations of animation. Major manufacturers have also open source

null 89 Dec 27, 2022
A cloudinatry video url sample project

cloudinary_media_sample A new Flutter project for Cloudinary video url. Getting Started This project is a starting point for a Flutter application. A

null 0 Nov 4, 2021
A simple video streaming application made with Dart, JavaScript, HTML, CSS

streamZ A simple video streaming application made with Dart, JS, HTML, CSS & ❀️ Show some ❀️ by putting ⭐ Recently I wrote an article, explaining how

Anjan Roy 28 Nov 23, 2021
A view for video based on video_player and provides many basic functions.

flutter_video_view A view for video based on video_player and provides many basic functions. Getting Started This project is a starting point for a Fl

LiWeNHuI 3 Dec 9, 2022
A flutter package for iOS and Android for applying filter to an image

Photo Filters package for flutter A flutter package for iOS and Android for applying filter to an image. A set of preset filters are also available. Y

Ansh rathod 1 Oct 26, 2021
Flutter package for creating a fully customizable and editable image widget.

EditableImage Flutter Package Flutter package for creating a fully customizable and editable image widget. The package has been written solely in Dart

Bulent Baris Kilic 5 Jun 13, 2022
A lightweight flutter package to simplify the creation of a miniplayer.

A lightweight flutter package to simplify the creation of a miniplayer by providing a builder function with the current height and percentage progress

David Peters 80 Dec 18, 2022