flutter_video_compress

压缩视频生成新路径,保留源视频或删除它。提供获取视频信息或视频文件的缩略图。

flutter_video_compress

Android 安装前

如果您的程序未启用 AndroidX,则需要将以下代码添加到 android/build.gradle 文件的最后一行。

rootProject.allprojects {
    subprojects {
        project.configurations.all {
            resolutionStrategy.eachDependency { details ->
                if (details.requested.group == 'androidx.core' && !details.requested.name.contains('androidx')) {
                    details.useVersion "1.0.1"
                }
            }
        }
    }
}

iOS 安装前

如果您的程序不支持 Swift,则需要在 ios/Podfile 中添加以下代码。详情

target 'Runner' do
  use_frameworks! # <--- add this
  ...
end

# -----insert code start-----
pre_install do |installer|
  installer.analysis_result.specifications.each do |s|
      if s.name == 'Regift'
        s.swift_version = '4.0'
    # elsif s.name == 'other-Plugin'
    #   s.swift_version = '5.0'
    # else
    #   s.swift_version = '4.0'
      end
  end
end

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['ENABLE_BITCODE'] = 'NO'
    end
  end
end
# -----insert code end-----

方法

功能 参数 描述 返回值
getThumbnail String [path], int [quality](1-100), int [position] [path] 获取缩略图 [Future<Uint8List>]
getThumbnailWithFile String [path], int [quality](1-100), int [position] [path] 获取缩略图文件 [Future<File>]
convertVideoToGif String [path], int [startTime](从0开始), int [endTime], int [duration] 将提供的视频转换为 gif [Future<File>]
getMediaInfo String [path] [path] 获取媒体信息 [Future<MediaInfo>]
compressVideo String [path], VideoQuality [quality], bool [deleteOrigin], int [startTime], int [duration], bool [includeAudio], bool [frameRate] 压缩 [path] 中的视频 [Future<MediaInfo>]
cancelCompression [none] 停止当前正在压缩的文件。 [Future<void>]
deleteAllCache [none] 删除缓存,请不要在此插件的文件夹中放置其他内容,否则将被清除 [Future<bool>]

订阅

subscription 描述 stream
compressProgress$ 订阅转换进度流 double [progress]

用法

安装
在您的 pubspec.yaml 文件中添加 flutter_video_compress 作为依赖项。

dependencies:
  flutter_video_compress: ^0.3.x

创建实例。

final _flutterVideoCompress = FlutterVideoCompress();

通过视频文件获取缩略图

final uint8list = await _flutterVideoCompress.getThumbnail(
  file.path,
  quality: 50,
);

通过视频文件获取缩略图文件

final thumbnailFile = await _flutterVideoCompress.getThumbnailWithFile(
  file.path,
  quality: 50,
);

将提供的视频转换为 gif。

final file = await _flutterVideoCompress.convertVideoToGif(
  videoFile.path,
  startTime: 0,
  duration: 5,
);
print(file.path);

获取媒体信息

目前仅支持视频

final info = await _flutterVideoCompress.getMediaInfo(file.path);
print(info.toJson());

压缩视频

压缩后兼容 Android 和 iOS

final info = await _flutterVideoCompress.compressVideo(
  file.path,
  deleteOrigin: true,
);
print(info.toJson());

检查压缩状态

_flutterVideoCompress.isCompressing

停止压缩

Android 会打印 InterruptedException,但不影响使用

await _flutterVideoCompress.cancelCompression()

删除所有缓存文件

删除此插件生成的所有文件,我想您应该知道自己在做什么。

await _flutterVideoCompress.deleteAllCache()

订阅转换进度流

class ... extends State<MyApp> {
  Subscription _subscription;

  @override
  void initState() {
    super.initState();
    _subscription =
        _flutterVideoCompress.compressProgress$.subscribe((progress) {
      print('progress: $progress');
    });
  }

  @override
  void dispose() {
    super.dispose();
    _subscription.unsubscribe();
  }
}

通知

如果您发现导入插件后 apk 的大小显着增加,可能是由于以下原因

  • 排除 x86 相关文件 (./assets)

  • 该库不使用 ffprobe,仅使用 ffmpeg,但应用程序中仍有 ffprobe,因此需要将其排除 (asssets/armassets/x86)

build.gradle 中添加此配置

  • 请勿 在调试模式下使用 ignoreAssetsPattern "!x86",否则在模拟器上会崩溃
android {
 ...
   
   // Reduce your application size with this configuration
  aaptOptions {
       ignoreAssetsPattern "!x86:!*ffprobe"
  }
  
  buildTypes {
  ...
  
  }

查找详情

GitHub

https://github.com/TenkaiRuri/flutter_video_compress