ffmpeg_kit_16kb 1.0.4
ffmpeg_kit_16kb: ^1.0.4 copied to clipboard
FFmpeg Kit for Flutter with Full GPL and updated bindings. Supports Android, iOS and macOS platforms.
FFmpeg Support 16kb page sizes #
Upgraded version of the original Flutter FFmpegKit. #
Upgraded version of the original ffmpeg_kit_flutter_new:2.0.0. #
1. Features #
-
Updated Android and MacOS bindings to work with Flutter 3.32.5
-
Includes both
FFmpegandFFprobe -
Supports
Android,iOSandmacOS
-
FFmpeg
v6.0.2-LTS -
arm-v7a,arm-v7a-neon,arm64-v8a,x86andx86_64architectures on AndroidAndroid API Level 24or laterarmv7,armv7s,arm64,arm64-simulator,i386,x86_64,x86_64-mac-catalystandarm64-mac-catalyst
architectures on iOSiOS SDK 14.0or laterarm64andx86_64architectures on macOSmacOS SDK 10.15or 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.0by default, some packages licensed byGPL v3.0effectively
2. Installation #
Add ffmpeg_kit_16kb as a dependency in your pubspec.yaml file.
dependencies:
ffmpeg_kit_16kb: ^1.0.3
NOTE: Android know issue:
4. Platform Support
The following table shows Android API level, iOS deployment target and macOS deployment target requirements in
ffmpeg_kit_16kb releases.
| LTS Release | ||
|---|---|---|
| Android API Level |
iOS Minimum Deployment Target |
macOS Minimum Deployment Target |
| 24 | 14 | 10.15 |
3. Using #
- Execute FFmpeg commands.
import 'package:ffmpeg_kit_16kb/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
executecall 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
FFmpegcommands by providing session specificexecute/log/sessioncallbacks.
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
FFprobecommands.
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
FFmpegKitandFFprobeKit.
- 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,FFprobeandMediaInformationsessions 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>"]);