rurico/flutter_video_compress
압축된 비디오로 새 파일을 생성하고 메타데이터를 제공합니다. 비디오 경로에서 비디오 썸네일을 가져올 수 있으며, JPEG/GIF를 지원합니다. 앱 크기를 줄이기 위해 iOS에서는 FFmpeg를 사용하지 않습니다.
- Stars
- 192
- Forks
- 73
- 최근 푸시(UTC)
- 2021. 11. 10.
- 프로젝트 상태
- 보관됨
기술 주제
사용 중인 의존성
의존성 목록 4 개
- flutter
{"sdk":"flutter"} - flutter_test개발 의존성
{"sdk":"flutter"} - image_picker개발 의존성
^0.6.0+10 - video_player개발 의존성
^0.10.1+3
원본 README
아래는 영문 원문 스냅샷입니다. 최신 내용은 GitHub에서 확인하세요.
README 펼치기 / 접기
flutter_video_compress
Generate a new path by compressed video, Choose to keep the source video or delete it by a parameter. Get video thumbnail from a video path and provide video information. Easy to deal with compressed video. Considering reduce application size is not using FFmpeg in IOS.
pub version license android min Sdk Version ios min target
languages
Usage
Installing add flutter_video_compress as a dependency in your pubspec.yaml file.
dependencies:
flutter_video_compress: ^0.3.x
Create an instance
final _flutterVideoCompress = FlutterVideoCompress();
Get thumbnail from video path
final uint8list = await _flutterVideoCompress.getThumbnail(
file.path,
quality: 50, // default(100)
position: -1 // default(-1)
);
Get thumbnail file from video path
final thumbnailFile = await _flutterVideoCompress.getThumbnailWithFile(
file.path,
quality: 50, // default(100)
position: -1 // default(-1)
);
Convert video to a gif
final file = await _flutterVideoCompress.convertVideoToGif(
videoFile.path,
startTime: 0, // default(0)
duration: 5, // default(-1)
// endTime: -1 // default(-1)
);
debugPrint(file.path);
Get media information
only support video now.
final info = await _flutterVideoCompress.getMediaInfo(file.path);
debugPrint(info.toJson().toString());
Compression Video
Compatible with IOS, Android and Web after compression.
final info = await _flutterVideoCompress.compressVideo(
file.path,
quality: VideoQuality.DefaultQuality, // default(VideoQuality.DefaultQuality)
deleteOrigin: false, // default(false)
);
debugPrint(info.toJson().toString());
Check Compressing state
_flutterVideoCompress.isCompressing
Stop compression
Will print InterruptedException in android, but not affect to use.
await _flutterVideoCompress.cancelCompression()
delete all cache files
Delete all files generated by this will delete all files located at 'flutter_video_compress', you shoule ought to know what are you doing.
await _flutterVideoCompress.deleteAllCache()
Subscribe the compression progress steam
class ... extends State<MyApp> {
Subscription _subscription;
@override
void initState() {
super.initState();
_subscription =
_flutterVideoCompress.compressProgress$.subscribe((progress) {
debugPrint('progress: $progress');
});
}
@override
void dispose() {
super.dispose();
_subscription.unsubscribe();
}
}
Methods
| Functions | Parameters | Description | Returns |
|---|---|---|---|
| getThumbnail | String path[video path], int quality(1-100)[thumbnail quality], int position[Get a thumbnail from video position] |
get thumbnail from video path |
Future<Uint8List> |
| getThumbnailWithFile | String path[video path], int quality(1-100)[thumbnail quality], int position[Get a thumbnail from video position] |
get thumbnail file from video path |
Future<File> |
| convertVideoToGif | String path[video path], int startTime(from 0 start)[convert video to gif start time], int endTime[convert video to gif end time], int duration[convert video to gif duration from start time] |
convert video to gif from video path |
Future<File> |
| getMediaInfo | String path[video path] |
get media information from video path |
Future<MediaInfo> |
| compressVideo | String path[video path], VideoQuality quality[compressed video quality], bool deleteOrigin[delete the origin video], int startTime[compression video start time], int duration[compression video duration from start time], bool includeAudio[is include audio in compressed video], int frameRate[compressed video frame rate] |
compression video at origin video path |
Future<MediaInfo> |
| cancelCompression | none |
cancel compressing | Future<void> |
| deleteAllCache | none |
Delete all files generated by 'flutter_video_compress' will delete all files located at 'flutter_video_compress' | Future<bool> |
Subscriptions
| Subscriptions | Description | Stream |
|---|---|---|
| compressProgress$ | Subscribe the compression progress steam | double progress |
Notice
If your application is significantly larger after using the plugin, you can reduce the application size in the following way:
-
exclude
x86related files (./assets) -
This library not use
ffprobe, only usedffmpeg, but the application still hasffprobe, so you will need to exclude (asssets/armorassets/x86)
add this config in build.gradle:
- Don't use
ignoreAssetsPattern "!x86"in debug mode, will crash on the simulator
android {
...
// Reduce your application size with this configuration
aaptOptions {
ignoreAssetsPattern "!x86:!*ffprobe"
}
buildTypes {
...
}
Questions
If your application is not enabled AndroidX, you will need to add the following code to the last line of the android/build.gradle file.
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"
}
}
}
}
}
If your application not support swift, you need to add the following code in ios/Podfile.
target 'Runner' do
use_frameworks! # <--- add this
...
end
If your application never used a swift plugin before, maybe you would meet the error, you need to add the following code in ios/Podfile.
The 'Pods-Runner' target has transitive dependencies that include static binaries
pre_install do |installer|
# workaround for https://github.com/CocoaPods/CocoaPods/issues/3289
Pod::Installer::Xcode::TargetValidator.send(:define_method, :verify_no_static_framework_transitive_dependencies) {}
end
If the above method not work, you report bug of the error repository. The reason is「can't support swift」
if show error of Regift
Regiftdoes not specify a Swift version and none of the targets (Runner) integrating it have theSWIFT_VERSIONattribute set. Please contact the author or set theSWIFT_VERSIONattribute in at least one of the targets that integrate this pod.
pre_install do |installer|
installer.analysis_result.specifications.each do |s|
if s.name == 'Regift'
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
Contribute
Contributions are always welcome!