rurico / flutter_video_compress

Generate a new file by compressed video, and provide metadata. Get video thumbnail from a video path, supports JPEG/GIF. To reduce app size not using FFmpeg in IOS.
MIT License
186 stars 72 forks source link

[help]Video compression can not get compression progress 【flutter_video_compress: ^0.3.7+8】 #104

Open lswd opened 3 years ago

lswd commented 3 years ago

Description

Video compression can not get compression progress

微信截图_20210502234246

Platform

Android

Code Example (if has)

import 'dart:async'; import 'dart:io';

import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_video_compress/flutter_video_compress.dart'; import 'package:image_pickers/image_pickers.dart';

class TestVideoPage extends StatefulWidget {

@override _TestVideoPageState createState() => _TestVideoPageState(); }

class _TestVideoPageState extends State {

final _flutterVideoCompress = FlutterVideoCompress(); Subscription _subscription;

Image _thumbnailFileImage; Image _gifFileImage;

MediaInfo _originalVideoInfo = MediaInfo(path: ''); MediaInfo _compressedVideoInfo = MediaInfo(path: ''); String _taskName; double _progressState = 0;

final _loadingStreamCtrl = StreamController.broadcast();

@override void initState() { // TODO: implement initState super.initState(); _subscription = _flutterVideoCompress.compressProgress$.subscribe((progress) { debugPrint("progress----" + progress.toString()); setState(() { _progressState = progress; }); }); }

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

Future runFlutterVideoCompressMethods(String videoFile) async { _loadingStreamCtrl.sink.add(true);

var _startDateTime = DateTime.now();
print('[Compressing Video] start');
_taskName = '[Compressing Video]';
final compressedVideoInfo = await _flutterVideoCompress.compressVideo(
  videoFile,
  quality: VideoQuality.DefaultQuality,
  deleteOrigin: false,
);
_taskName = null;
print(
    '[Compressing Video] done! ${DateTime
        .now()
        .difference(_startDateTime)
        .inSeconds}s');

_startDateTime = DateTime.now();

print('[Getting Thumbnail File] start');
final thumbnailFile = await _flutterVideoCompress
    .getThumbnailWithFile(videoFile, quality: 50);
print(
    '[Getting Thumbnail File] done! ${DateTime
        .now()
        .difference(_startDateTime)
        .inSeconds}s');

_startDateTime = DateTime.now();
print('[Getting Gif File] start');
_taskName = '[Getting Gif File]';
final gifFile = await _flutterVideoCompress
    .convertVideoToGif(videoFile, startTime: 0, duration: 5);
print(
    '[Getting Gif File] done! ${DateTime
        .now()
        .difference(_startDateTime)
        .inSeconds}s');
_taskName = null;

final videoInfo = await _flutterVideoCompress.getMediaInfo(videoFile);

setState(() {
  _thumbnailFileImage = Image.file(thumbnailFile);
  _gifFileImage = Image.file(gifFile);
  _originalVideoInfo = videoInfo;
  _compressedVideoInfo = compressedVideoInfo;
});
_loadingStreamCtrl.sink.add(false);

}

@override Widget build(BuildContext context) { return Scaffold( body: Center( child: OutlinedButton( onPressed: () async { List _listVideoPaths = await ImagePickers.pickerPaths( galleryMode: GalleryMode.video, selectCount: 1, ); runFlutterVideoCompressMethods(_listVideoPaths[0].path); }, child: Text("选择视频"), ), ), ); } }

Expected solution

Expect description of the solution