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/arm或assets/x86)
在 build.gradle 中添加此配置
- 请勿 在调试模式下使用
ignoreAssetsPattern "!x86",否则在模拟器上会崩溃
android {
...
// Reduce your application size with this configuration
aaptOptions {
ignoreAssetsPattern "!x86:!*ffprobe"
}
buildTypes {
...
}