ffmpeg_kit_flutter_new 1.2.0
ffmpeg_kit_flutter_new: ^1.2.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 FFmpegKit. #
1. Features #
-
New Android and MacOS bindings to work with Flutter 3.29
-
Locally sourced
ffmpeg-kit-https-6.0-2.LTS.aar
, because original artifacts from the remote providers are unavailable -
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 Android -
Android API Level 24
or later -
armv7
,armv7s
,arm64
,arm64-simulator
,i386
,x86_64
,x86_64-mac-catalyst
andarm64-mac-catalyst
architectures on iOS -
iOS SDK 14.0
or later -
arm64
andx86_64
architectures on macOS -
macOS 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.2.0
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>"]);