Skip to content
This repository was archived by the owner on Apr 21, 2025. It is now read-only.

Commit 8a00606

Browse files
committed
simplify execute methods
1 parent f4b0510 commit 8a00606

14 files changed

+253
-157
lines changed

flutter/flutter/CHANGELOG.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
## 4.5.1
2-
- Bugfix release
2+
- Feature release based on native v4.5.1
33

44
## 4.5.1-LTS
5-
- Bugfix LTS release
5+
- Feature release based on native v4.5.1.LTS
66

77
## 4.5.0
88
- Initial release

flutter/flutter/android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,6 @@ repositories {
4343

4444
dependencies {
4545
implementation 'androidx.annotation:annotation:1.2.0'
46-
implementation 'com.arthenica:ffmpeg-kit-https:4.5.1'
46+
implementation 'com.arthenica:ffmpeg-kit-https:4.5.1-1'
4747
}
4848

flutter/flutter/android/src/main/java/com/arthenica/ffmpegkit/flutter/FFmpegKitFlutterPlugin.java

Lines changed: 38 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,13 @@ public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {
359359
resultHandler.errorAsync(result, "INVALID_ARGUMENTS", "Invalid arguments array.");
360360
}
361361
break;
362+
case "getMediaInformation":
363+
if (sessionId != null) {
364+
getMediaInformation(sessionId, result);
365+
} else {
366+
resultHandler.errorAsync(result, "INVALID_SESSION", "Invalid session id.");
367+
}
368+
break;
362369
case "mediaInformationJsonParserFrom":
363370
if (ffprobeJsonOutput != null) {
364371
mediaInformationJsonParserFrom(ffprobeJsonOutput, result);
@@ -876,6 +883,21 @@ protected void mediaInformationSession(@NonNull final List<String> arguments, @N
876883
resultHandler.successAsync(result, toMap(session));
877884
}
878885

886+
protected void getMediaInformation(@NonNull final Integer sessionId, @NonNull final Result result) {
887+
final Session session = FFmpegKitConfig.getSession(sessionId.longValue());
888+
if (session == null) {
889+
resultHandler.errorAsync(result, "SESSION_NOT_FOUND", "Session not found.");
890+
} else {
891+
if (session.isMediaInformation()) {
892+
final MediaInformationSession mediaInformationSession = (MediaInformationSession) session;
893+
final MediaInformation mediaInformation = mediaInformationSession.getMediaInformation();
894+
resultHandler.successAsync(result, toMap(mediaInformation));
895+
} else {
896+
resultHandler.errorAsync(result, "NOT_MEDIA_INFORMATION_SESSION", "A session is found but it does not have the correct type.");
897+
}
898+
}
899+
}
900+
879901
// MediaInformationJsonParser
880902

881903
protected void mediaInformationJsonParserFrom(@NonNull final String ffprobeJsonOutput, @NonNull final Result result) {
@@ -1332,19 +1354,17 @@ protected static Map<String, Object> toMap(final Session session) {
13321354
sessionMap.put(KEY_SESSION_START_TIME, toLong(session.getStartTime()));
13331355
sessionMap.put(KEY_SESSION_COMMAND, session.getCommand());
13341356

1335-
if (session.isFFprobe()) {
1336-
if (session.isMediaInformation()) {
1337-
final MediaInformationSession mediaInformationSession = (MediaInformationSession) session;
1338-
final MediaInformation mediaInformation = mediaInformationSession.getMediaInformation();
1339-
if (mediaInformation != null) {
1340-
sessionMap.put(KEY_SESSION_MEDIA_INFORMATION, toMap(mediaInformation));
1341-
}
1342-
sessionMap.put(KEY_SESSION_TYPE, SESSION_TYPE_MEDIA_INFORMATION);
1343-
} else {
1344-
sessionMap.put(KEY_SESSION_TYPE, SESSION_TYPE_FFPROBE);
1345-
}
1346-
} else {
1357+
if (session.isFFmpeg()) {
13471358
sessionMap.put(KEY_SESSION_TYPE, SESSION_TYPE_FFMPEG);
1359+
} else if (session.isFFprobe()) {
1360+
sessionMap.put(KEY_SESSION_TYPE, SESSION_TYPE_FFPROBE);
1361+
} else if (session.isMediaInformation()) {
1362+
final MediaInformationSession mediaInformationSession = (MediaInformationSession) session;
1363+
final MediaInformation mediaInformation = mediaInformationSession.getMediaInformation();
1364+
if (mediaInformation != null) {
1365+
sessionMap.put(KEY_SESSION_MEDIA_INFORMATION, toMap(mediaInformation));
1366+
}
1367+
sessionMap.put(KEY_SESSION_TYPE, SESSION_TYPE_MEDIA_INFORMATION);
13481368
}
13491369

13501370
return sessionMap;
@@ -1432,18 +1452,20 @@ protected static Map<String, Object> toMap(final Statistics statistics) {
14321452
}
14331453

14341454
protected static Map<String, Object> toMap(final MediaInformation mediaInformation) {
1435-
Map<String, Object> map = new HashMap<>();
1436-
14371455
if (mediaInformation != null) {
1456+
Map<String, Object> map = new HashMap<>();
1457+
14381458
if (mediaInformation.getAllProperties() != null) {
14391459
JSONObject allProperties = mediaInformation.getAllProperties();
14401460
if (allProperties != null) {
14411461
map = toMap(allProperties);
14421462
}
14431463
}
1444-
}
14451464

1446-
return map;
1465+
return map;
1466+
} else {
1467+
return null;
1468+
}
14471469
}
14481470

14491471
protected static Map<String, Object> toMap(final JSONObject jsonObject) {

flutter/flutter/ios/Classes/FFmpegKitFlutterPlugin.m

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,12 @@ - (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
232232
} else {
233233
result([FlutterError errorWithCode:@"INVALID_ARGUMENTS" message:@"Invalid arguments array." details:nil]);
234234
}
235+
} else if ([@"getMediaInformation" isEqualToString:call.method]) {
236+
if (sessionId != nil) {
237+
[self getMediaInformation:sessionId result:result];
238+
} else {
239+
result([FlutterError errorWithCode:@"INVALID_SESSION" message:@"Invalid session id." details:nil]);
240+
}
235241
} else if ([@"mediaInformationJsonParserFrom" isEqualToString:call.method]) {
236242
if (ffprobeJsonOutput != nil) {
237243
[self mediaInformationJsonParserFrom:ffprobeJsonOutput result:result];
@@ -609,6 +615,20 @@ - (void)mediaInformationSession:(NSArray*)arguments result:(FlutterResult)result
609615
result([FFmpegKitFlutterPlugin toSessionDictionary:session]);
610616
}
611617

618+
- (void)getMediaInformation:(NSNumber*)sessionId result:(FlutterResult)result {
619+
AbstractSession* session = (AbstractSession*)[FFmpegKitConfig getSession:[sessionId longValue]];
620+
if (session == nil) {
621+
result([FlutterError errorWithCode:@"SESSION_NOT_FOUND" message:@"Session not found." details:nil]);
622+
} else {
623+
if ([session isMediaInformation]) {
624+
MediaInformationSession *mediaInformationSession = (MediaInformationSession*)session;
625+
result([FFmpegKitFlutterPlugin toMediaInformationDictionary:[mediaInformationSession getMediaInformation]]);
626+
} else {
627+
result([FlutterError errorWithCode:@"NOT_MEDIA_INFORMATION_SESSION" message:@"A session is found but it does not have the correct type." details:nil]);
628+
}
629+
}
630+
}
631+
612632
// MediaInformationJsonParser
613633

614634
- (void)mediaInformationJsonParserFrom:(NSString*)ffprobeJsonOutput result:(FlutterResult)result {
@@ -1061,16 +1081,14 @@ + (NSDictionary*)toSessionDictionary:(id<Session>) session {
10611081
dictionary[KEY_SESSION_START_TIME] = [NSNumber numberWithLong:[[session getStartTime] timeIntervalSince1970]*1000];
10621082
dictionary[KEY_SESSION_COMMAND] = [session getCommand];
10631083

1064-
if ([session isFFprobe]) {
1065-
if ([session isMediaInformation]) {
1066-
MediaInformationSession *mediaInformationSession = (MediaInformationSession*)session;
1067-
dictionary[KEY_SESSION_MEDIA_INFORMATION] = [FFmpegKitFlutterPlugin toMediaInformationDictionary:[mediaInformationSession getMediaInformation]];
1068-
dictionary[KEY_SESSION_TYPE] = [NSNumber numberWithInt:SESSION_TYPE_MEDIA_INFORMATION];
1069-
} else {
1070-
dictionary[KEY_SESSION_TYPE] = [NSNumber numberWithInt:SESSION_TYPE_FFPROBE];
1071-
}
1072-
} else {
1084+
if ([session isFFmpeg]) {
10731085
dictionary[KEY_SESSION_TYPE] = [NSNumber numberWithInt:SESSION_TYPE_FFMPEG];
1086+
} else if ([session isFFprobe]) {
1087+
dictionary[KEY_SESSION_TYPE] = [NSNumber numberWithInt:SESSION_TYPE_FFPROBE];
1088+
} else if ([session isMediaInformation]) {
1089+
MediaInformationSession *mediaInformationSession = (MediaInformationSession*)session;
1090+
dictionary[KEY_SESSION_MEDIA_INFORMATION] = [FFmpegKitFlutterPlugin toMediaInformationDictionary:[mediaInformationSession getMediaInformation]];
1091+
dictionary[KEY_SESSION_TYPE] = [NSNumber numberWithInt:SESSION_TYPE_MEDIA_INFORMATION];
10741092
}
10751093

10761094
return dictionary;

flutter/flutter/lib/ffmpeg_kit.dart

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2019-2021 Taner Sener
2+
* Copyright (c) 2019-2022 Taner Sener
33
*
44
* This file is part of FFmpegKit.
55
*
@@ -34,21 +34,14 @@ class FFmpegKit {
3434
/// Synchronously executes FFmpeg command provided. Space character is used
3535
/// to split command into arguments. You can use single or double quote
3636
/// characters to specify arguments inside your command.
37-
static Future<FFmpegSession> execute(String command,
38-
[FFmpegSessionCompleteCallback? completeCallback = null,
39-
LogCallback? logCallback = null,
40-
StatisticsCallback? statisticsCallback = null]) async =>
41-
FFmpegKit.executeWithArguments(FFmpegKitConfig.parseArguments(command),
42-
completeCallback, logCallback, statisticsCallback);
37+
static Future<FFmpegSession> execute(String command) async =>
38+
FFmpegKit.executeWithArguments(FFmpegKitConfig.parseArguments(command));
4339

4440
/// Synchronously executes FFmpeg with arguments provided.
4541
static Future<FFmpegSession> executeWithArguments(
46-
List<String> commandArguments,
47-
[FFmpegSessionCompleteCallback? completeCallback = null,
48-
LogCallback? logCallback = null,
49-
StatisticsCallback? statisticsCallback = null]) async {
50-
final session = await FFmpegSession.create(commandArguments,
51-
completeCallback, logCallback, statisticsCallback, null);
42+
List<String> commandArguments) async {
43+
final session =
44+
await FFmpegSession.create(commandArguments, null, null, null, null);
5245

5346
await FFmpegKitConfig.ffmpegExecute(session);
5447

flutter/flutter/lib/ffmpeg_kit_config.dart

Lines changed: 50 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2019-2021 Taner Sener
2+
* Copyright (c) 2019-2022 Taner Sener
33
*
44
* This file is part of FFmpegKit.
55
*
@@ -366,6 +366,55 @@ class FFmpegKitConfig {
366366
}
367367
}
368368

369+
/// Converts the given Structured Access Framework Uri ("content:…") into
370+
/// an input url that can be used in FFmpeg and FFprobe commands.
371+
///
372+
/// Note that this method is Android only. It will fail if called on other
373+
/// platforms. It also requires API Level &ge; 19. On older API levels it
374+
/// returns an empty url.
375+
static Future<String?> getSafParameterForRead(String uriString) async {
376+
try {
377+
await init();
378+
return _platform.ffmpegKitConfigGetSafParameter(uriString, "r");
379+
} on PlatformException catch (e, stack) {
380+
print("Plugin getSafParameterForRead error: ${e.message}");
381+
return Future.error("getSafParameterForRead failed.", stack);
382+
}
383+
}
384+
385+
/// Converts the given Structured Access Framework Uri ("content:…") into
386+
/// an output url that can be used in FFmpeg and FFprobe commands.
387+
///
388+
/// Note that this method is Android only. It will fail if called on other
389+
/// platforms. It also requires API Level &ge; 19. On older API levels it
390+
/// returns an empty url.
391+
static Future<String?> getSafParameterForWrite(String uriString) async {
392+
try {
393+
await init();
394+
return _platform.ffmpegKitConfigGetSafParameter(uriString, "w");
395+
} on PlatformException catch (e, stack) {
396+
print("Plugin getSafParameterForWrite error: ${e.message}");
397+
return Future.error("getSafParameterForWrite failed.", stack);
398+
}
399+
}
400+
401+
/// Converts the given Structured Access Framework Uri into an saf protocol
402+
/// url opened with the given open mode.
403+
///
404+
/// Note that this method is Android only. It will fail if called on other
405+
/// platforms. It also requires API Level &ge; 19. On older API levels it
406+
/// returns an empty url.
407+
static Future<String?> getSafParameter(
408+
String uriString, String openMode) async {
409+
try {
410+
await init();
411+
return _platform.ffmpegKitConfigGetSafParameter(uriString, openMode);
412+
} on PlatformException catch (e, stack) {
413+
print("Plugin getSafParameter error: ${e.message}");
414+
return Future.error("getSafParameter failed.", stack);
415+
}
416+
}
417+
369418
/// Returns the session history size.
370419
static Future<int?> getSessionHistorySize() async {
371420
try {
@@ -763,53 +812,4 @@ class FFmpegKitConfig {
763812
return Future.error("selectDocumentForWrite failed.", stack);
764813
}
765814
}
766-
767-
/// Converts the given Structured Access Framework Uri ("content:…") into
768-
/// an input url that can be used in FFmpeg and FFprobe commands.
769-
///
770-
/// Note that this method is Android only. It will fail if called on other
771-
/// platforms. It also requires API Level &ge; 19. On older API levels it
772-
/// returns an empty url.
773-
static Future<String?> getSafParameterForRead(String uriString) async {
774-
try {
775-
await init();
776-
return _platform.ffmpegKitConfigGetSafParameter(uriString, "r");
777-
} on PlatformException catch (e, stack) {
778-
print("Plugin getSafParameterForRead error: ${e.message}");
779-
return Future.error("getSafParameterForRead failed.", stack);
780-
}
781-
}
782-
783-
/// Converts the given Structured Access Framework Uri ("content:…") into
784-
/// an output url that can be used in FFmpeg and FFprobe commands.
785-
///
786-
/// Note that this method is Android only. It will fail if called on other
787-
/// platforms. It also requires API Level &ge; 19. On older API levels it
788-
/// returns an empty url.
789-
static Future<String?> getSafParameterForWrite(String uriString) async {
790-
try {
791-
await init();
792-
return _platform.ffmpegKitConfigGetSafParameter(uriString, "w");
793-
} on PlatformException catch (e, stack) {
794-
print("Plugin getSafParameterForWrite error: ${e.message}");
795-
return Future.error("getSafParameterForWrite failed.", stack);
796-
}
797-
}
798-
799-
/// Converts the given Structured Access Framework Uri into an saf protocol
800-
/// url opened with the given open mode.
801-
///
802-
/// Note that this method is Android only. It will fail if called on other
803-
/// platforms. It also requires API Level &ge; 19. On older API levels it
804-
/// returns an empty url.
805-
static Future<String?> getSafParameter(
806-
String uriString, String openMode) async {
807-
try {
808-
await init();
809-
return _platform.ffmpegKitConfigGetSafParameter(uriString, openMode);
810-
} on PlatformException catch (e, stack) {
811-
print("Plugin getSafParameter error: ${e.message}");
812-
return Future.error("getSafParameter failed.", stack);
813-
}
814-
}
815815
}

0 commit comments

Comments
 (0)