diff --git a/README.md b/README.md
index 25279ee2..af65a1c8 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# FFmpegKit ![GitHub release](https://img.shields.io/badge/release-v4.4-blue.svg) ![Maven Central](https://img.shields.io/maven-central/v/com.arthenica/ffmpeg-kit-min) ![CocoaPods](https://img.shields.io/cocoapods/v/ffmpeg-kit-ios-min) [![Build Status](https://travis-ci.org/tanersener/ffmpeg-kit.svg?branch=master)](https://travis-ci.org/tanersener/ffmpeg-kit)
+# FFmpegKit ![GitHub release](https://img.shields.io/badge/release-v4.4.LTS-blue.svg) ![Maven Central](https://img.shields.io/maven-central/v/com.arthenica/ffmpeg-kit-min) ![CocoaPods](https://img.shields.io/cocoapods/v/ffmpeg-kit-ios-min) [![Build Status](https://travis-ci.org/tanersener/ffmpeg-kit.svg?branch=master)](https://travis-ci.org/tanersener/ffmpeg-kit)
FFmpeg Kit for applications.
@@ -24,41 +24,37 @@ FFmpeg Kit for applications.
- Licensed under `LGPL 3.0`, or `GPL v3.0` if GPL licensed libraries are enabled
-#### 1.1 Android
+### 2. Android
-See [Android](https://github.com/tanersener/ffmpeg-kit/tree/development/android).
+See [Android](https://github.com/tanersener/ffmpeg-kit/tree/development/android) to learn more about `FFmpegKit` for
+`Android`.
-#### 1.2 iOS, macOS, tvOS
+### 3. iOS, macOS, tvOS
-See [Apple](https://github.com/tanersener/ffmpeg-kit/tree/development/apple).
+See [Apple](https://github.com/tanersener/ffmpeg-kit/tree/development/apple) to use `FFmpegKit` on `Apple` platforms
+(`iOS`, `macOS`, `tvOS`).
-### 2. Build Scripts
-Use `android.sh`, `ios.sh`, `macos.sh` and `tvos.sh` to build `FFmpegKit` for each platform.
+### 4. Build Scripts
-All four scripts support additional options to enable external libraries or disable platform architectures.
+Use `android.sh`, `ios.sh`, `macos.sh` and `tvos.sh` to build `FFmpegKit` for each platform.
-Refer to [Android](https://github.com/tanersener/ffmpeg-kit/tree/development/android) page for `Android` devices and
-[Apple](https://github.com/tanersener/ffmpeg-kit/tree/development/apple) page for `iOS`, `macOS`, `tvOS` devices to see
-the prerequisites for each platform.
+All scripts support additional options to enable libraries and disable platform architectures.
-### 3. FFmpegKit Library
+### 5. FFmpegKit Library
`FFmpegKit` is a wrapper library that allows you to easily run `FFmpeg`/`FFprobe` commands in applications. It
-provides additional features on top of `FFmpeg` to enable platform specific resources, control how commands are executed and how the results are handled.
+provides additional features on top of `FFmpeg` to enable platform specific resources, control how commands are
+executed and how the results are handled.
`Android` library has a `Java` API and `Apple` libraries (`iOS`, `macOS`, `tvOS`) have an `Objective-C` API,
-which are identical.
-
-See [Android](https://github.com/tanersener/ffmpeg-kit/tree/development/android) page to learn how the `Java` API
-can be used on `Android` devices and [Apple](https://github.com/tanersener/ffmpeg-kit/tree/development/apple) page to
-learn more about `Objective-C` API for `iOS`, `macOS`, `tvOS` devices.
+which are identical in terms of features and capabilities.
-### 4. Binary Packages
+### 6. Binary Packages
There are eight different `ffmpeg-kit` packages distributed on
[Github](https://github.com/tanersener/ffmpeg-kit/releases),
[Maven Central](https://search.maven.org) and [CocoaPods](https://cocoapods.org).
-Below you can see which system libraries and external libraries are enabled in each of package.
+Below you can see which system libraries and external libraries are enabled in each one of them.
Please remember that some parts of `FFmpeg` are licensed under the `GPL` and only `GPL` licensed `ffmpeg-kit` packages
include them.
@@ -111,7 +107,7 @@ include them.
- `AVFoundation` is not available on `tvOS`, `VideoToolbox` is not available on `tvOS` LTS releases
-### 5. Versions
+### 7. Versions
`FFmpegKit` binaries generated use the same major and minor version numbers as the upstream `FFmpeg` project. The exact
version number is obtained using `git describe --tags`. `dev` part in `FFmpeg` version number indicates that `FFmpeg`
@@ -122,7 +118,7 @@ source is cloned from the `FFmpeg` `master` branch.
| [4.4](https://github.com/tanersener/ffmpeg-kit/releases/tag/v4.4) | 4.4-dev-3015 | Mar 03, 2021 |
| [4.4.LTS](https://github.com/tanersener/ffmpeg-kit/releases/tag/v4.4.LTS) | 4.4-dev-3015 | Mar 03, 2021 |
-### 6. LTS Releases
+### 8. LTS Releases
`FFmpegKit` binaries are published in two release variants: `Main Release` and `LTS Release`.
@@ -147,12 +143,20 @@ This table shows the differences between two variants.
| tvOS SDK | 10.2 | 9.2 |
| tvOS Architectures | arm64
x86-64
arm64-simulator | arm64
x86-64 |
-### 7. License
+### 9. Test Applications
+
+You can see how `FFmpegKit` is used inside an application by running test applications created under
+[FFmpegKit Test](https://github.com/tanersener/ffmpeg-kit-test) project.
+
+All applications are identical and supports command execution, video encoding, accessing https urls, encoding audio,
+burning subtitles, video stabilisation, pipe operations, concurrent command execution.
+
+### 10. License
`FFmpegKit` is licensed under the `LGPL v3.0`. However, if source code is built using the optional `--enable-gpl` flag
or prebuilt binaries with `-gpl` postfix are used, then `FFmpegKit` is subject to the `GPL v3.0` license.
-### 8. Patents
+### 11. Patents
It is not clearly explained in their documentation, but it is believed that `FFmpeg`, `kvazaar`, `x264` and `x265`
include algorithms which are subject to software patents. If you live in a country where software algorithms are
@@ -163,7 +167,7 @@ that you seek legal advice first. See [FFmpeg Patent Mini-FAQ](https://ffmpeg.or
distribute that library, then you are subject to pay MPEG LA licensing fees. Refer to
[OpenH264 FAQ](https://www.openh264.org/faq.html) page for the details.
-### 9. Contributing
+### 12. Contributing
Feel free to submit issues or pull requests.
@@ -171,7 +175,7 @@ Please note that `main` includes only the latest released source code. Changes p
developed under the `development` branch. Therefore, if you want to create a pull request, please open it against
the `development`.
-### 10. See Also
+### 13. See Also
- [FFmpeg API Documentation](https://ffmpeg.org/doxygen/4.0/index.html)
- [FFmpeg Wiki](https://trac.ffmpeg.org/wiki/WikiStart)
diff --git a/android/README.md b/android/README.md
index 7579590f..17d8ba4d 100644
--- a/android/README.md
+++ b/android/README.md
@@ -1,11 +1,9 @@
# FFmpegKit for Android
### 1. Features
-- Supports
- - `API Level 16+`
- - `arm-v7a`, `arm-v7a-neon`, `arm64-v8a`, `x86` and `x86_64` architectures
- - `zlib` and `MediaCodec` system libraries
-- Can handle Storage Access Framework (SAF) uris
+- Supports `API Level 24+` on Main releases and `API Level 16+` on LTS releases
+- Includes `arm-v7a`, `arm-v7a-neon`, `arm64-v8a`, `x86` and `x86_64` architectures
+- Can handle Storage Access Framework (SAF) Uris
- Camera access on [supported devices](https://developer.android.com/ndk/guides/stable_apis#camera)
- Builds shared native libraries (.so)
- Creates Android archive with .aar extension
@@ -14,32 +12,38 @@
Run `android.sh` at project root directory to build `ffmpeg-kit` and `ffmpeg` shared libraries.
+Please note that `FFmpegKit` project repository includes the source code of `FFmpegKit` only. `android.sh` needs
+network connectivity and internet access to `github.com` in order to download the source code of `FFmpeg` and
+external libraries enabled.
+
#### 2.1 Prerequisites
-`android.sh` requires the following packages and tools.
+`android.sh` requires the following tools and packages.
-1. Install Android tools listed below.
- - **Android SDK Build Tools**
- - **Android NDK r21e** or later with LLDB and CMake
+##### 2.1.1 Android Tools
+ - Android SDK Build Tools
+ - Android NDK r21e or later with LLDB and CMake
-2. Use your package manager (apt, yum, dnf, brew, etc.) to install the following packages.
+##### 2.1.2 Packages
- ```
- autoconf automake libtool pkg-config curl cmake gcc gperf texinfo yasm nasm bison autogen git wget autopoint meson ninja
- ```
+Use your package manager (apt, yum, dnf, brew, etc.) to install the following packages.
-3. Set `ANDROID_SDK_ROOT` and `ANDROID_NDK_ROOT` environment variables.
- ```
- export ANDROID_SDK_ROOT=
- export ANDROID_NDK_ROOT=
- ```
+```
+autoconf automake libtool pkg-config curl cmake gcc gperf texinfo yasm nasm bison autogen git wget autopoint meson ninja
+```
+
+##### 2.1.3 Environment Variables
-4. `android.sh` needs network connectivity and internet access to `github.com` in order to download the source code
- of all libraries except `ffmpeg-kit`.
+Set `ANDROID_SDK_ROOT` and `ANDROID_NDK_ROOT` environment variables before running `android.sh`.
+
+```
+export ANDROID_SDK_ROOT=
+export ANDROID_NDK_ROOT=
+```
#### 2.2 Options
-Use `--enable-` flags to support additional external or system libraries and
+Use `--enable-` flag to support additional external or system libraries and
`--disable-` to disable architectures you don't want to build.
```
@@ -77,7 +81,7 @@ All libraries created by `android.sh` can be found under the `prebuilt` director
}
```
-2. Execute synchronous FFmpeg commands.
+2. Execute synchronous `FFmpeg` commands.
```
import com.arthenica.ffmpegkit.FFmpegKit;
@@ -85,16 +89,60 @@ All libraries created by `android.sh` can be found under the `prebuilt` director
FFmpegSession session = FFmpegKit.execute("-i file1.mp4 -c:v mpeg4 file2.mp4");
if (ReturnCode.isSuccess(session.getReturnCode())) {
+
// SUCCESS
+
} else if (ReturnCode.isCancel(session.getReturnCode())) {
+
// CANCEL
+
} else {
+
// FAILURE
Log.d(TAG, String.format("Command failed with state %s and rc %s.%s", session.getState(), session.getReturnCode(), session.getFailStackTrace()));
+
}
```
-3. Execute asynchronous FFmpeg commands by providing session specific execute/log/session callbacks.
+3. Each `execute` call (sync or async) creates a new session. Access every detail about your execution from the
+ session created.
+
+ ```
+ FFmpegSession session = FFmpegKit.execute("-i file1.mp4 -c:v mpeg4 file2.mp4");
+
+ // Unique session id created for this execution
+ long sessionId = session.getSessionId();
+
+ // Command arguments as a single string
+ String command = session.getCommand();
+
+ // Command arguments
+ String[] arguments = session.getArguments();
+
+ // State of the execution. Shows whether it is still running or completed
+ SessionState state = session.getState();
+
+ // Return code for completed sessions. Will be null if session is still running or ends with a failure
+ ReturnCode returnCode = session.getReturnCode();
+
+ Date startTime = session.getStartTime();
+ Date endTime = session.getEndTime();
+ long duration = session.getDuration();
+
+ // Console output generated for this execution
+ String output = session.getOutput();
+
+ // The stack trace if FFmpegKit fails to run a command
+ String failStackTrace = session.getFailStackTrace();
+
+ // The list of logs generated for this execution
+ List logs = session.getLogs();
+
+ // The list of statistics generated for this execution
+ List statistics = session.getStatistics();
+ ```
+
+4. Execute asynchronous `FFmpeg` commands by providing session specific `execute`/`log`/`session` callbacks.
```
FFmpegKit.executeAsync("-i file1.mp4 -c:v mpeg4 file2.mp4", new ExecuteCallback() {
@@ -127,7 +175,9 @@ All libraries created by `android.sh` can be found under the `prebuilt` director
});
```
-4. Execute synchronous FFprobe commands.
+5. Execute `FFprobe` commands.
+
+ - Synchronous
```
FFprobeSession session = FFprobeKit.execute(ffprobeCommand);
@@ -137,14 +187,28 @@ All libraries created by `android.sh` can be found under the `prebuilt` director
}
```
-5. Get session output.
+ - Asynchronous
+
+ ```
+ FFprobeKit.executeAsync(ffprobeCommand, new ExecuteCallback() {
+
+ @Override
+ public void apply(Session session) {
+
+ CALLED WHEN SESSION IS EXECUTED
+
+ }
+ });
+ ```
+
+6. Get media information for a file.
```
- Session session = FFmpegKit.execute("-i file1.mp4 -c:v mpeg4 file2.mp4");
- Log.d(TAG, session.getOutput());
+ MediaInformationSession mediaInformation = FFprobeKit.getMediaInformation("");
+ mediaInformation.getMediaInformation();
```
-6. Stop ongoing FFmpeg operations.
+7. Stop ongoing `FFmpeg` operations.
- Stop all executions
```
@@ -155,30 +219,81 @@ All libraries created by `android.sh` can be found under the `prebuilt` director
FFmpegKit.cancel(sessionId);
```
-7. Get media information for a file.
+8. Convert Storage Access Framework (SAF) Uris into paths that can be read or written by `FFmpegKit`.
```
- MediaInformationSession mediaInformation = FFprobeKit.getMediaInformation("");
- mediaInformation.getMediaInformation();
+ Uri safUri = intent.getData();
+ String videoPath = FFmpegKitConfig.getSafParameterForWrite(requireContext(), safUri);
+ FFmpegKit.execute("-i file1.mp4 -c:v mpeg4 " + videoPath);
```
-8. List previous FFmpeg sessions.
+9. Get previous `FFmpeg` and `FFprobe` sessions from session history.
- ```
- List ffmpegSessions = FFmpegKit.listSessions();
- for (int i = 0; i < ffmpegSessions.size(); i++) {
- FFmpegSession session = ffmpegSessions.get(i);
- Log.d(TAG, String.format("Session %d = id:%d, startTime:%s, duration:%s, state:%s, returnCode:%s.",
+ ```
+ List sessions = FFmpegKitConfig.getSessions();
+ for (int i = 0; i < sessions.size(); i++) {
+ Session session = sessions.get(i);
+ Log.d(TAG, String.format("Session %d = id:%d, startTime:%s, duration:%s, state:%s, returnCode:%s.",
i,
session.getSessionId(),
session.getStartTime(),
session.getDuration(),
session.getState(),
session.getReturnCode()));
- }
- ```
+ }
+ ```
+
+10. Enable global callbacks.
+
+ - Execute Callback, called when an async execution is ended
+
+ ```
+ FFmpegKitConfig.enableExecuteCallback(new ExecuteCallback() {
+
+ @Override
+ public void apply(Session session) {
+
+ }
+ });
+ ```
+
+ - Log Callback, called when a session generates logs
+
+ ```
+ FFmpegKitConfig.enableLogCallback(new LogCallback() {
+
+ @Override
+ public void apply(final com.arthenica.ffmpegkit.Log log) {
+ ...
+ }
+ });
+ ```
+
+ - Statistics Callback, called when a session generates statistics
+
+ ```
+ FFmpegKitConfig.enableStatisticsCallback(new StatisticsCallback() {
+
+ @Override
+ public void apply(final Statistics newStatistics) {
+ ...
+ }
+ });
+ ```
+
+11. Ignore the handling of a signal. Required by `Mono` and frameworks that use `Mono`, e.g. `Unity` and `Xamarin`.
+
+ ```
+ FFmpegKitConfig.ignoreSignal(Signal.SIGXCPU);
+ ```
+
+12. Register system fonts and custom font directories.
+
+ ```
+ FFmpegKitConfig.setFontDirectoryList(context, Arrays.asList("/system/fonts", ""), Collections.EMPTY_MAP);
+ ```
### 4. Test Application
-You can see how `FFmpegKit` is used inside an application by running test applications developed under the
+You can see how `FFmpegKit` is used inside an application by running `Android` test applications developed under the
[FFmpegKit Test](https://github.com/tanersener/ffmpeg-kit-test) project.
diff --git a/apple/README.md b/apple/README.md
index bd938bbb..381deee5 100644
--- a/apple/README.md
+++ b/apple/README.md
@@ -2,57 +2,46 @@
### 1. Features
#### 1.1 iOS
-- Builds `armv7`, `armv7s`, `arm64`, `arm64-simulator`, `arm64e`, `i386`, `x86_64`, `x86_64-mac-catalyst` and
+- Supports `iOS SDK 12.1+` on Main releases and `iOS SDK 9.3+` on LTS releases
+- Includes `armv7`, `armv7s`, `arm64`, `arm64-simulator`, `arm64e`, `i386`, `x86_64`, `x86_64-mac-catalyst` and
`arm64-mac-catalyst` architectures
-- Supports `bzip2`, `iconv`, `libuuid`, `zlib` system libraries and `AudioToolbox`, `AVFoundation`, `VideoToolbox` system frameworks
- Objective-C API
- Camera access
- `ARC` enabled library
- Built with `-fembed-bitcode` flag
- Creates static `frameworks`, static `xcframeworks` and static `universal (fat)` libraries (.a)
-- Supports `iOS SDK 9.3` or later
#### 1.2 macOS
-- Builds `arm64` and `x86_64` architectures
-- Supports `bzip2`, `iconv`, `libuuid`, `zlib` system libraries and `AudioToolbox`, `AVFoundation`, `CoreImage`,
- `OpenCL`, `OpenGL`, `VideoToolbox` system frameworks
+- Supports `macOS SDK 10.15+` on Main releases and `macOS SDK 10.11+` on LTS releases
+- Includes `arm64` and `x86_64` architectures
- Objective-C API
- Camera access
- `ARC` enabled library
- Built with `-fembed-bitcode` flag
- Creates static `frameworks`, static `xcframeworks` and static `universal (fat)` libraries (.a)
-- Supports `macOS SDK 10.11` or later
#### 1.3 tvOS
-- Builds `arm64`, `arm64-simulator` and `x86_64` architectures
-- Supports `bzip2`, `iconv`, `libuuid`, `zlib` system libraries and `AudioToolbox`, `VideoToolbox` system frameworks
+- Supports `tvOS SDK 10.2+` on Main releases and `tvOS SDK 9.2+` on LTS releases
+- Includes `arm64`, `arm64-simulator` and `x86_64` architectures
- Objective-C API
- `ARC` enabled library
- Built with `-fembed-bitcode` flag
- Creates static `frameworks`, static `xcframeworks` and static `universal (fat)` libraries (.a)
-- Supports `tvOS SDK 9.2` or later
### 2. Building
-Run `ios.sh`/`macos.sh`/`tvos.sh` at project root directory to build `ffmpeg-kit` and `ffmpeg` shared libraries for a
+Run `ios.sh`/`macos.sh`/`tvos.sh` at project root directory to build `ffmpeg-kit` and `ffmpeg` static libraries for a
platform.
Optionally, use `apple.sh` to combine bundles created by these three scripts in a single bundle.
-#### 2.1 Prerequisites
-
-`ios.sh`/`macos.sh`/`tvos.sh` requires the following packages and tools.
-
-1. Use your package manager (brew, etc.) to install the following packages.
+Please note that `FFmpegKit` project repository includes the source code of `FFmpegKit` only. `ios.sh`, `macos.sh` and
+`tvos.sh` need network connectivity and internet access to `github.com` in order to download the source code of
+`FFmpeg` and external libraries enabled.
- ```
- autoconf automake libtool pkg-config curl cmake gcc gperf texinfo yasm nasm bison autogen git wget autopoint meson ninja
- ```
-
-2. `ios.sh`/`macos.sh`/`tvos.sh` needs network connectivity and internet access to `github.com` in order to download
- the source code of all libraries except `ffmpeg-kit`.
+#### 2.1 Prerequisites
-3. Install the tools necessary listed below in `2.1.x`.
+`ios.sh`, `macos.sh` and `tvos.sh` require the following tools and packages.
##### 2.1.1 iOS
@@ -72,14 +61,24 @@ Optionally, use `apple.sh` to combine bundles created by these three scripts in
- **tvOS SDK 9.2** or later
- **Command Line Tools**
+##### 2.1.4 Packages
+
+Use your package manager (brew, etc.) to install the following packages.
+
+```
+autoconf automake libtool pkg-config curl cmake gcc gperf texinfo yasm nasm bison autogen git wget autopoint meson ninja
+```
+
#### 2.2 Options
-Use `--enable-` flags to support additional external or system libraries and
+Use `--enable-` flag to support additional external or system libraries and
`--disable-` to disable architectures you don't want to build.
```
./ios.sh --enable-fontconfig --disable-armv7
+
./macos.sh --enable-freetype --enable-macos-avfoundation --disable-arm64
+
./tv.sh --enable-dav1d --enable-libvpx --disable-arm64-simulator
```
@@ -110,7 +109,7 @@ All libraries created can be found under the `prebuilt` directory.
#### 3.1 Objective API
-1. add `FFmpegKit` dependency to your `Podfile` in `ffmpeg-kit--` pattern. Use one of the
+1. Add `FFmpegKit` dependency to your `Podfile` in `ffmpeg-kit--` pattern. Use one of the
`FFmpegKit` package names given in the project [README](https://github.com/tanersener/ffmpeg-kit).
- iOS
@@ -128,24 +127,68 @@ All libraries created can be found under the `prebuilt` directory.
pod 'ffmpeg-kit-tvos-full', '~> 4.4.LTS'
```
-2. Execute synchronous FFmpeg commands.
+2. Execute synchronous `FFmpeg` commands.
```
#include
- FFmpegSession* session = [FFmpegKit execute:@"-i file1.mp4 -c:v mpeg4 file2.mp4"];
- ReturnCode* returnCode = [session getReturnCode];
+ FFmpegSession *session = [FFmpegKit execute:@"-i file1.mp4 -c:v mpeg4 file2.mp4"];
+ ReturnCode *returnCode = [session getReturnCode];
if ([ReturnCode isSuccess:returnCode]) {
+
// SUCCESS
+
} else if ([ReturnCode isCancel:returnCode]) {
+
// CANCEL
+
} else {
+
// FAILURE
NSLog(@"Command failed with state %@ and rc %@.%@", [FFmpegKitConfig sessionStateToString:[session getState]], returnCode, [session getFailStackTrace]);
+
}
```
-3. Execute asynchronous FFmpeg commands by providing session specific execute/log/session callbacks.
+3. Each `execute` call (sync or async) creates a new session. Access every detail about your execution from the
+ session created.
+
+ ```
+ FFmpegSession *session = [FFmpegKit execute:@"-i file1.mp4 -c:v mpeg4 file2.mp4"];
+
+ // Unique session id created for this execution
+ long sessionId = [session getSessionId];
+
+ // Command arguments as a single string
+ NSString *command = [session getCommand];
+
+ // Command arguments
+ NSArray *arguments = [session getArguments];
+
+ // State of the execution. Shows whether it is still running or completed
+ SessionState state = [session getState];
+
+ // Return code for completed sessions. Will be null if session is still running or ends with a failure
+ ReturnCode *returnCode = [session getReturnCode];
+
+ NSDate *startTime =[session getStartTime];
+ NSDate *endTime =[session getEndTime];
+ long duration =[session getDuration];
+
+ // Console output generated for this execution
+ NSString *output = [session getOutput];
+
+ // The stack trace if FFmpegKit fails to run a command
+ NSString *failStackTrace = [session getFailStackTrace];
+
+ // The list of logs generated for this execution
+ NSArray *logs = [session getLogs];
+
+ // The list of statistics generated for this execution
+ NSArray *statistics = [session getStatistics];
+ ```
+
+4. Execute asynchronous `FFmpeg` commands by providing session specific `execute`/`log`/`session` callbacks.
```
id session = [FFmpegKit executeAsync:@"-i file1.mp4 -c:v mpeg4 file2.mp4" withExecuteCallback:^(id session){
@@ -167,23 +210,36 @@ All libraries created can be found under the `prebuilt` directory.
}];
```
-4. Execute synchronous FFprobe commands.
+5. Execute `FFprobe` commands.
+
+ - Synchronous
```
FFprobeSession *session = [FFprobeKit execute:ffprobeCommand];
+
if ([ReturnCode isSuccess:[session getReturnCode]]) {
NSLog(@"Command failed. Please check output for the details.");
}
```
-5. Get session output.
+ - Asynchronous
+
+ ```
+ [FFprobeKit executeAsync:ffmpegCommand withExecuteCallback:^(id session) {
+
+ CALLED WHEN SESSION IS EXECUTED
+
+ }];
+ ```
+
+6. Get media information for a file.
```
- FFmpegSession session = FFmpegKit.execute("-i file1.mp4 -c:v mpeg4 file2.mp4");
- NSLog([session getOutput]);
+ MediaInformationSession *mediaInformation = [FFprobeKit getMediaInformation:""];
+ MediaInformation *mediaInformation =[mediaInformation getMediaInformation];
```
-6. Stop ongoing FFmpeg operations.
+7. Stop ongoing `FFmpeg` operations.
- Stop all executions
```
@@ -194,19 +250,12 @@ All libraries created can be found under the `prebuilt` directory.
[FFmpegKit cancel:sessionId];
```
-7. Get media information for a file.
+8. Get previous `FFmpeg` and `FFprobe` sessions from session history.
```
- MediaInformationSession *mediaInformation = [FFprobeKit getMediaInformation:""];
- MediaInformation *mediaInformation =[mediaInformation getMediaInformation];
- ```
-
-8. List previous FFmpeg sessions.
-
- ```
- NSArray* ffmpegSessions = [FFmpegKit listSessions];
- for (int i = 0; i < [ffmpegSessions count]; i++) {
- FFmpegSession* session = [ffmpegSessions objectAtIndex:i];
+ NSArray* sessions = [FFmpegKitConfig getSessions];
+ for (int i = 0; i < [sessions count]; i++) {
+ id session = [sessions objectAtIndex:i];
NSLog(@"Session %d = id: %ld, startTime: %@, duration: %ld, state:%@, returnCode:%@.\n",
i,
[session getSessionId],
@@ -215,9 +264,47 @@ All libraries created can be found under the `prebuilt` directory.
[FFmpegKitConfig sessionStateToString:[session getState]],
[session getReturnCode]);
}
- ```
+ ```
+
+9. Enable global callbacks.
+
+ - Execute Callback, called when an async execution is ended
+
+ ```
+ [FFmpegKitConfig enableExecuteCallback:^(id session) {
+ ...
+ }];
+ ```
+
+ - Log Callback, called when a session generates logs
+
+ ```
+ [FFmpegKitConfig enableLogCallback:^(Log *log) {
+ ...
+ }];
+ ```
+
+ - Statistics Callback, called when a session generates statistics
+
+ ```
+ [FFmpegKitConfig enableStatisticsCallback:^(Statistics *statistics) {
+ ...
+ }];
+ ```
+
+10. Ignore the handling of a signal. Required by `Mono` and frameworks that use `Mono`, e.g. `Unity` and `Xamarin`.
+
+ ```
+ [FFmpegKitConfig ignoreSignal:SIGXCPU];
+ ```
+
+11. Register system fonts and custom font directories.
+
+ ```
+ [FFmpegKitConfig setFontDirectoryList: with:nil];
+ ```
### 4. Test Application
-You can see how `FFmpegKit` is used inside an application by running test applications developed under the
-[FFmpegKit Test](https://github.com/tanersener/ffmpeg-kit-test) project.
+You can see how `FFmpegKit` is used inside an application by running `iOS`, `macOS` and `tvOS` test applications
+developed under the [FFmpegKit Test](https://github.com/tanersener/ffmpeg-kit-test) project.