Last updated:
0 purchases
ffmpeg kit flutter
FFmpegKit for Flutter #
1. Features #
Includes both FFmpeg and FFprobe
Supports
Android, iOS and macOS
FFmpeg v6.0
arm-v7a, arm-v7a-neon, arm64-v8a, x86 and x86_64 architectures on Android
Android API Level 24 or later
API Level 16 on LTS releases
armv7, armv7s, arm64, arm64-simulator, i386, x86_64, x86_64-mac-catalyst and arm64-mac-catalyst
architectures on iOS
iOS SDK 12.1 or later
iOS SDK 10 on LTS releases
arm64 and x86_64 architectures on macOS
macOS SDK 10.15 or later
macOS SDK 10.12 on LTS releases
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 by GPL v3.0 effectively
2. Installation #
Add ffmpeg_kit_flutter as a dependency in your pubspec.yaml file.
dependencies:
ffmpeg_kit_flutter: 6.0.3
copied to clipboard
2.1 Packages
FFmpeg includes built-in encoders for some popular formats. However, there are certain external libraries that needs
to be enabled in order to encode specific formats/codecs. For example, to encode an mp3 file you need lame or
shine library enabled. You have to install a ffmpeg_kit_flutter package that has at least one of them inside. To
encode an h264 video, you need to install a package with x264 inside. To encode vp8 or vp9 videos, you need
a ffmpeg_kit_flutter package with libvpx inside.
ffmpeg-kit provides eight packages that include different sets of external libraries. These packages are named
according to the external libraries included. Refer to the
Packages wiki page to see the names of those
packages and external libraries included in each one of them.
2.2 Installing Packages
Installing ffmpeg_kit_flutter enables the https package by default. It is possible to install the other packages
using the following dependency format.
dependencies:
ffmpeg_kit_flutter_<package name>: 6.0.3
copied to clipboard
Note that hyphens in the package name must be replaced with underscores. Additionally, do not forget to use the package
name in the import statements if you install a package.
2.3 Installing LTS Releases
In order to install the LTS variant, append -LTS to the version you have for the ffmpeg_kit_flutter dependency.
dependencies:
ffmpeg_kit_flutter: 6.0.3-LTS
copied to clipboard
2.4 LTS Releases
ffmpeg_kit_flutter is published in two variants: Main Release and LTS Release. Both releases share the
same source code but is built with different settings (Architectures, API Level, iOS Min SDK, etc.). Refer to the
LTS Releases wiki page to see how they differ from each
other.
2.5 Platform Support
The following table shows Android API level, iOS deployment target and macOS deployment target requirements in
ffmpeg_kit_flutter releases.
Main Release
LTS Release
AndroidAPI Level
iOS MinimumDeployment Target
macOS MinimumDeployment Target
AndroidAPI Level
iOS MinimumDeployment Target
macOS MinimumDeployment Target
24
12.1
10.15
16
10
10.12
3. 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
}
});
copied to clipboard
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();
});
copied to clipboard
Execute FFmpeg commands by providing session specific execute/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
});
copied to clipboard
Execute FFprobe commands.
FFprobeKit.execute(ffprobeCommand).then((session) async {
// CALLED WHEN SESSION IS EXECUTED
});
copied to clipboard
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();
}
});
copied to clipboard
Stop ongoing FFmpeg operations.
Stop all sessions
FFmpegKit.cancel();
copied to clipboard
Stop a specific session
FFmpegKit.cancel(sessionId);
copied to clipboard
(Android) Convert Storage Access Framework (SAF) Uris into paths that can be read or written by
FFmpegKit and FFprobeKit.
Reading a file:
FFmpegKitConfig.selectDocumentForRead('*/*').then((uri) {
FFmpegKitConfig.getSafParameterForRead(uri!).then((safUrl) {
FFmpegKit.executeAsync("-i ${safUrl!} -c:v mpeg4 file2.mp4");
});
});
copied to clipboard
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}");
});
});
copied to clipboard
Get previous FFmpeg, FFprobe and MediaInformation 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();
});
});
copied to clipboard
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();
});
copied to clipboard
Log Callback, called when a session generates logs
FFmpegKitConfig.enableLogCallback((log) {
final message = log.getMessage();
});
copied to clipboard
Statistics Callback, called when a session generates statistics
FFmpegKitConfig.enableStatisticsCallback((statistics) {
final size = statistics.getSize();
});
copied to clipboard
Register system fonts and custom font directories.
FFmpegKitConfig.setFontDirectoryList(["/system/fonts", "/System/Library/Fonts", "<folder with fonts>"]);
copied to clipboard
4. Test Application #
You can see how FFmpegKit is used inside an application by running flutter test applications developed under
the FFmpegKit Test project.
5. Tips #
See Tips wiki page.
6. License #
See License wiki page.
7. Patents #
See Patents wiki page.
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.