ffmpeg_kit_flutter_new 1.6.0
ffmpeg_kit_flutter_new: ^1.6.0 copied to clipboard
FFmpeg Kit for Flutter with Full GPL and updated bindings. Supports Android, iOS and macOS platforms.
FFmpegKit for Flutter
#
Upgraded version of the original Flutter FFmpegKit. #
1. Features #
-
Updated Android and MacOS bindings to work with Flutter 3.29
-
Includes both
FFmpeg
andFFprobe
-
Supports
Android
,iOS
andmacOS
-
FFmpeg
v6.0.2-LTS
-
arm-v7a
,arm-v7a-neon
,arm64-v8a
,x86
andx86_64
architectures on AndroidAndroid API Level 24
or laterarmv7
,armv7s
,arm64
,arm64-simulator
,i386
,x86_64
,x86_64-mac-catalyst
andarm64-mac-catalyst
architectures on iOSiOS SDK 14.0
or laterarm64
andx86_64
architectures on macOSmacOS SDK 10.15
or later
-
Can process Storage Access Framework (SAF) Uris on Android
-
25 external libraries
dav1d
,fontconfig
,freetype
,fribidi
,gmp
,gnutls
,kvazaar
,lame
,libass
,libiconv
,libilbc
,libtheora
,libvorbis
,libvpx
,libwebp
,libxml2
,opencore-amr
,opus
,shine
,snappy
,soxr
,speex
,twolame
,vo-amrwbenc
,zimg
-
4 external libraries with GPL license
vid.stab
,x264
,x265
,xvidcore
-
Licensed under
LGPL 3.0
by default, some packages licensed byGPL v3.0
effectively
2. Installation #
Add ffmpeg_kit_flutter_new
as a dependency in your pubspec.yaml file
.
dependencies:
ffmpeg_kit_flutter_new: 1.6.0
NOTE: Android know issue:
3. Platform Support
The following table shows Android API level, iOS deployment target and macOS deployment target requirements in
ffmpeg_kit_flutter_new
releases.
LTS Release | ||
---|---|---|
Android API Level |
iOS Minimum Deployment Target |
macOS Minimum Deployment Target |
24 | 14 | 10.15 |
4. Using #
- Execute FFmpeg commands.
import 'package:ffmpeg_kit_flutter/ffmpeg_kit.dart';
FFmpegKit.execute('-i file1.mp4 -c:v mpeg4 file2.mp4').then((session) async {
final returnCode = await session.getReturnCode();
if (ReturnCode.isSuccess(returnCode)) {
// SUCCESS
} else if (ReturnCode.isCancel(returnCode)) {
// CANCEL
} else {
// ERROR
}
});
- Each
execute
call creates a new session. Access every detail about your execution from the session created.
FFmpegKit.execute('-i file1.mp4 -c:v mpeg4 file2.mp4').then((session) async {
// Unique session id created for this execution
final sessionId = session.getSessionId();
// Command arguments as a single string
final command = session.getCommand();
// Command arguments
final commandArguments = session.getArguments();
// State of the execution. Shows whether it is still running or completed
final state = await session.getState();
// Return code for completed sessions. Will be undefined if session is still running or FFmpegKit fails to run it
final returnCode = await session.getReturnCode();
final startTime = session.getStartTime();
final endTime = await session.getEndTime();
final duration = await session.getDuration();
// Console output generated for this execution
final output = await session.getOutput();
// The stack trace if FFmpegKit fails to run a command
final failStackTrace = await session.getFailStackTrace();
// The list of logs generated for this execution
final logs = await session.getLogs();
// The list of statistics generated for this execution (only available on FFmpegSession)
final statistics = await (session as FFmpegSession).getStatistics();
});
- Execute
FFmpeg
commands by providing session specificexecute
/log
/session
callbacks.
FFmpegKit.executeAsync('-i file1.mp4 -c:v mpeg4 file2.mp4', (Session session) async {
// CALLED WHEN SESSION IS EXECUTED
}, (Log log) {
// CALLED WHEN SESSION PRINTS LOGS
}, (Statistics statistics) {
// CALLED WHEN SESSION GENERATES STATISTICS
});
- Execute
FFprobe
commands.
FFprobeKit.execute(ffprobeCommand).then((session) async {
// CALLED WHEN SESSION IS EXECUTED
});
- Get media information for a file/url.
FFprobeKit.getMediaInformation('<file path or url>').then((session) async {
final information = await session.getMediaInformation();
if (information == null) {
// CHECK THE FOLLOWING ATTRIBUTES ON ERROR
final state = FFmpegKitConfig.sessionStateToString(await session.getState());
final returnCode = await session.getReturnCode();
final failStackTrace = await session.getFailStackTrace();
final duration = await session.getDuration();
final output = await session.getOutput();
}
});
- Stop ongoing FFmpeg operations.
- Stop all sessions
FFmpegKit.cancel();
- Stop a specific session
FFmpegKit.cancel(sessionId);
- (Android) Convert Storage Access Framework (SAF) Uris into paths that can be read or written by
FFmpegKit
andFFprobeKit
.
- Reading a file:
FFmpegKitConfig.selectDocumentForRead('*/*').then((uri) {
FFmpegKitConfig.getSafParameterForRead(uri!).then((safUrl) {
FFmpegKit.executeAsync("-i ${safUrl!} -c:v mpeg4 file2.mp4");
});
});
- Writing to a file:
FFmpegKitConfig.selectDocumentForWrite('video.mp4', 'video/*').then((uri) {
FFmpegKitConfig.getSafParameterForWrite(uri!).then((safUrl) {
FFmpegKit.executeAsync("-i file1.mp4 -c:v mpeg4 ${safUrl}");
});
});
- Get previous
FFmpeg
,FFprobe
andMediaInformation
sessions from the session history.
FFmpegKit.listSessions().then((sessionList) {
sessionList.forEach((session) {
final sessionId = session.getSessionId();
});
});
FFprobeKit.listFFprobeSessions().then((sessionList) {
sessionList.forEach((session) {
final sessionId = session.getSessionId();
});
});
FFprobeKit.listMediaInformationSessions().then((sessionList) {
sessionList.forEach((session) {
final sessionId = session.getSessionId();
});
});
- Enable global callbacks.
- Session type specific Complete Callbacks, called when an async session has been completed
FFmpegKitConfig.enableFFmpegSessionCompleteCallback((session) {
final sessionId = session.getSessionId();
});
FFmpegKitConfig.enableFFprobeSessionCompleteCallback((session) {
final sessionId = session.getSessionId();
});
FFmpegKitConfig.enableMediaInformationSessionCompleteCallback((session) {
final sessionId = session.getSessionId();
});
- Log Callback, called when a session generates logs
FFmpegKitConfig.enableLogCallback((log) {
final message = log.getMessage();
});
- Statistics Callback, called when a session generates statistics
FFmpegKitConfig.enableStatisticsCallback((statistics) {
final size = statistics.getSize();
});
- Register system fonts and custom font directories.
FFmpegKitConfig.setFontDirectoryList(["/system/fonts", "/System/Library/Fonts", "<folder with fonts>"]);