mirror of
https://github.com/twonlyapp/twonly-app.git
synced 2026-01-15 06:28:41 +00:00
fixing video issue for pixel 10
Some checks failed
Flutter analyze & test / flutter_analyze_and_test (push) Has been cancelled
Some checks failed
Flutter analyze & test / flutter_analyze_and_test (push) Has been cancelled
This commit is contained in:
parent
618d4a3fb3
commit
4f27bfba01
4 changed files with 81 additions and 9 deletions
|
|
@ -1,5 +1,10 @@
|
|||
# Changelog
|
||||
|
||||
## 0.0.74
|
||||
|
||||
- Improving uploading speed
|
||||
- Fixing issue with ffmpeg for android
|
||||
|
||||
## 0.0.73
|
||||
|
||||
- Integrated QR code scanner in the main camera
|
||||
|
|
|
|||
|
|
@ -1,11 +1,13 @@
|
|||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
import 'package:background_downloader/background_downloader.dart';
|
||||
import 'package:connectivity_plus/connectivity_plus.dart';
|
||||
import 'package:cryptography_flutter_plus/cryptography_flutter_plus.dart';
|
||||
import 'package:cryptography_plus/cryptography_plus.dart';
|
||||
import 'package:drift/drift.dart';
|
||||
import 'package:fixnum/fixnum.dart';
|
||||
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:mutex/mutex.dart';
|
||||
import 'package:twonly/globals.dart';
|
||||
import 'package:twonly/src/constants/secure_storage_keys.dart';
|
||||
|
|
@ -14,6 +16,7 @@ import 'package:twonly/src/database/tables/messages.table.dart';
|
|||
import 'package:twonly/src/database/twonly.db.dart';
|
||||
import 'package:twonly/src/model/protobuf/api/http/http_requests.pb.dart';
|
||||
import 'package:twonly/src/model/protobuf/client/generated/messages.pb.dart';
|
||||
import 'package:twonly/src/services/api/mediafiles/media_background.service.dart';
|
||||
import 'package:twonly/src/services/api/messages.dart';
|
||||
import 'package:twonly/src/services/mediafiles/mediafile.service.dart';
|
||||
import 'package:twonly/src/utils/log.dart';
|
||||
|
|
@ -322,10 +325,62 @@ Future<void> _uploadUploadRequest(MediaFileService media) async {
|
|||
},
|
||||
);
|
||||
|
||||
Log.info('Enqueue upload task: ${task.taskId}');
|
||||
final connectivityResult = await Connectivity().checkConnectivity();
|
||||
|
||||
await FileDownloader().enqueue(task);
|
||||
|
||||
await media.setUploadState(UploadState.backgroundUploadTaskStarted);
|
||||
if (!connectivityResult.contains(ConnectivityResult.mobile) &&
|
||||
!connectivityResult.contains(ConnectivityResult.wifi)) {
|
||||
// no internet, directly put it into the background...
|
||||
await FileDownloader().enqueue(task);
|
||||
await media.setUploadState(UploadState.backgroundUploadTaskStarted);
|
||||
Log.info('Enqueue upload task: ${task.taskId}');
|
||||
} else {
|
||||
unawaited(uploadFileFastOrEnqueue(task, media));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> uploadFileFastOrEnqueue(
|
||||
UploadTask task,
|
||||
MediaFileService media,
|
||||
) async {
|
||||
final requestMultipart = http.MultipartRequest(
|
||||
'POST',
|
||||
Uri.parse(task.url),
|
||||
);
|
||||
|
||||
requestMultipart.headers.addAll(task.headers);
|
||||
|
||||
requestMultipart.files.add(
|
||||
await http.MultipartFile.fromPath(
|
||||
'file',
|
||||
await task.filePath(),
|
||||
filename: 'upload',
|
||||
),
|
||||
);
|
||||
|
||||
try {
|
||||
Log.info('Uploading fast: ${task.taskId}');
|
||||
final response =
|
||||
await requestMultipart.send().timeout(const Duration(seconds: 4));
|
||||
var status = TaskStatus.failed;
|
||||
if (response.statusCode == 200) {
|
||||
status = TaskStatus.complete;
|
||||
} else if (response.statusCode == 404) {
|
||||
status = TaskStatus.notFound;
|
||||
}
|
||||
await handleUploadStatusUpdate(
|
||||
TaskStatusUpdate(
|
||||
task,
|
||||
status,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
response.statusCode,
|
||||
),
|
||||
);
|
||||
} catch (e) {
|
||||
Log.info('Upload failed enqueuing task...');
|
||||
await FileDownloader().enqueue(task);
|
||||
await media.setUploadState(UploadState.backgroundUploadTaskStarted);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -76,17 +76,29 @@ Future<void> compressAndOverlayVideo(MediaFileService media) async {
|
|||
|
||||
var overLayCommand = '';
|
||||
if (media.overlayImagePath.existsSync()) {
|
||||
overLayCommand =
|
||||
'-i "${media.overlayImagePath.path}" -filter_complex "[1:v][0:v]scale2ref=w=ref_w:h=ref_h[ovr][base];[base][ovr]overlay=0:0"';
|
||||
if (Platform.isAndroid) {
|
||||
overLayCommand =
|
||||
'-i "${media.overlayImagePath.path}" -filter_complex "[1:v]format=yuva420p[ovr_in];[0:v]format=yuv420p[base_in];[ovr_in][base_in]scale2ref=w=rw:h=rh[ovr_out][base_out];[base_out][ovr_out]overlay=0:0"';
|
||||
} else {
|
||||
overLayCommand =
|
||||
'-i "${media.overlayImagePath.path}" -filter_complex "[1:v][0:v]scale2ref=w=ref_w:h=ref_h[ovr][base];[base][ovr]overlay=0:0"';
|
||||
}
|
||||
}
|
||||
|
||||
final stopwatch = Stopwatch()..start();
|
||||
|
||||
var additionalParams = '';
|
||||
|
||||
if (Platform.isAndroid) {
|
||||
additionalParams += ' -c:v libx264';
|
||||
}
|
||||
|
||||
var command =
|
||||
'-i "${media.originalPath.path}" $overLayCommand -map "0:a?" -preset veryfast -crf 28 -c:a aac -b:a 64k "${media.ffmpegOutputPath.path}"';
|
||||
'-i "${media.originalPath.path}" $overLayCommand -map "0:a?" $additionalParams -preset veryfast -crf 28 -c:a aac -b:a 64k "${media.ffmpegOutputPath.path}"';
|
||||
|
||||
if (media.removeAudio) {
|
||||
command =
|
||||
'-i "${media.originalPath.path}" $overLayCommand -preset veryfast -crf 28 -an "${media.ffmpegOutputPath.path}"';
|
||||
'-i "${media.originalPath.path}" $overLayCommand $additionalParams -preset veryfast -crf 28 -an "${media.ffmpegOutputPath.path}"';
|
||||
}
|
||||
|
||||
final session = await FFmpegKit.execute(command);
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ description: "twonly, a privacy-friendly way to connect with friends through sec
|
|||
|
||||
publish_to: 'none'
|
||||
|
||||
version: 0.0.73+73
|
||||
version: 0.0.74+74
|
||||
|
||||
environment:
|
||||
sdk: ^3.6.0
|
||||
|
|
|
|||
Loading…
Reference in a new issue