ffmpeg-kit-extended
v0.6.2
Published
React Native TurboModule bindings for FFmpegKit Extended
Maintainers
Readme
React Native FFmpegKit Extended bindings
This package provides React Native bindings for ffmpeg-kit-extended: a comprehensive React Native plugin for executing FFmpeg, FFprobe, and FFplay 9.0.1 API commands on Android, iOS, macOS, tvOS, and Windows.
Requirements
- React Native 0.81.6 or later
- React Native New Architecture must be enabled
FFmpegKit Extended is implemented as a Turbo Native Module and does not support React Native's legacy Native Module architecture.
Features
- Cross-Platform Support: Works on
Android,iOS,macOS,tvOS, andWindows.- Android: Full video playback support with native surface rendering.
- x86:
x86architecture is not supported due to its legacy status.
- x86:
- iOS & macOS: High-performance video playback with
CVPixelBufferand Metal integration.- iOS: Supports both physical
devicesandsimulators.x86_64architecture is not supported due to its legacy status.
- iOS: Supports both physical
- Android: Full video playback support with native surface rendering.
FFmpeg,FFprobe&FFplay: Latest9.0.1 APIsupport for media manipulation, information retrieval, and audio/video playback.- Video Playback: Complete cross-platform video playback with unified surface API.
- Real-time Streaming: Position and video dimension streams for live playback monitoring.
- Asynchronous Execution: Run long-running tasks without blocking the UI thread.
- Parallel Execution: Run multiple tasks in parallel.
- Callback Support: detailed hooks for logs, statistics, and session completion.
- Session Management: Full control over execution lifecycle (start, cancel, list).
- Extensible: Designed to allow custom native library loading and configuration.
- Full package Introspection API: Get detailed information about the package, including version, build date, and available muxers, demuxers, encoders, decoders, filters, etc.
- Deploy Custom Builds: You can deploy custom builds of ffmpeg-kit-extended. See: https://github.com/akashskypatel/ffmpeg-kit-builders
Platform Support
| Platform | Status | Architecture | Minimum Requirements | | ------------------------ | ------------ | -------------------- | -------------------- | | Android (and Android TV) | ✅ Supported | armv7, arm64, x86_64 | API 26+ | | iOS (and Simulator) | ✅ Supported | arm64 | iOS 13+ | | macOS | ✅ Supported | arm64, x86_64 | macOS 13+ | | Apple tvOS | ✅ Supported | arm64 | tvOS 13+ | | Windows | ✅ Supported | x86_64 | Windows 8+ |
Feature Matrix
| Feature | Base | Audio | Video | Video+Hardware | Full | | --------- | ---- | ----- | ----- | -------------- | ---- | | Video | | | x | x | x | | Audio | | x | x | x | x | | Streaming | | x | x | x | x | | Hardware | | | | x | x | | AI* | | | | | x* | | HTTPS | * | x | x | x | x | | Platform* | x | x | x | x | x | | Other* | | | | | x |
AI features are not supported on all platforms. You must deploy your own custom build of ffmpeg-kit-extended to enable certain AI features.
- See Supported External Libraries for more information.
Platform features are built-in platform libraries that FFmpeg support like AVFounation, VideoToolbox, etc. on apple platforms or DirectX, MediaFoundation on Windows.
HTTPS features are enabled by default for Platforms that have built-in HTTPS support like Windows or Apple. For Linux and Android OpenSSL is enabled by default.
Other features are additional features that are not covered by the above categories. See Supported External Libraries for more information.
To deploy a custom build see ffmpeg-kit-builders.
GPL licensing
⚠️ WARNING ⚠️: Enabling GPL libraries makes your application GPL-licensed as well and may face additional challenges during app store approval. GPL license requires your application to be open-source and distributed under the same license.
It is recommended to use LGPL bundle if you are not familiar with GPL licensing.
- Libraries marked 10 Enabling any GPL library makes the resulting FFmpeg binary GPL-licensed and non-redistributable under a permissive license.
- Audio+: libbs2b, libcdio, librubberband, libjack (Linux)
- Video+: libx264, libx265, libdavs2, libdvdnav, libdvdread, libxavs, libxavs2, libxvid (Linux), frei0r, libvidstab
- Video+HW+: v4l2-m2m (Linux)
- Video+ (Desktop only): avisynth
AI
libopenvinoandlibtensorfloware only available on Desktop builds (MacOS,Linux, andWindows).libtorchis only available onLinuxandMacOsbuilds (Windowsnot supported due ABI mismatch).libonnxruntimeis only available on Desktop builds (MacOS,Linux, andWindows) but not supported onx86_64MacOS.- Only CPU AI libraries are vendored with pre-built bundles. GPU libraries must be custom deployed.
Bundle Sizes
Note: Bundle sizes are approximate compressed sizes and may vary depending on the platform, license type (GPL/LGPL), and build configuration.
Please see bundle distribution page for exact sizes: https://github.com/akashskypatel/ffmpeg-kit-builders/releases
Apple libraries (iOS/macOS/tvOS) are universal fatlibs and include both ARM64 and x86_64 (macOS) architectures as well as simulator binaries for iOS and tvOS. Apple libraries also include debug symbols addresses for crash analytics which may marginally increase the bundle size.
| Bundle Type | Android (MB) | iOS (MB) | tvOS (MB) | macOS (MB) | Linux (MB) | Windows (MB) | |-------------|--------------|-------------|------------|------------|------------|--------------| | | (Universal) | (Universal) | (Universal)| (Universal)| | | | debug | ~33 | ~55 | ~55 | ~56 | ~44 | ~140 | | base | ~30-38 | ~50-55 | ~30-37 | ~30-56 | ~12-17 | ~11-17 | | audio | ~42-86 | ~65-95 | ~44-75 | ~45-78 | ~18-40 | ~21-40 | | video | ~94-150 | ~100-135 | ~84-120 | ~97-136 | ~56-83 | ~60-83 | | video_hw | ~102-158 | ~105-140 | ~90-126 | ~103-142 | ~67-95 | ~65-88 | | full | ~113-170 | ~112-147 | ~96-133 | ~520-560 | ~475-501 | ~320-343 |
Installation
npm install ffmpeg-kit-extendedConfiguration
The TurboModule does not compile FFmpegKit itself. Native builds read one shared configuration file from the consuming React Native application and fetch or use the requested libffmpegkit bundle.
Create ffmpeg-kit-extended.config.json beside the consuming application's package.json:
{
"type": "base",
"gpl": false,
"small": true
}Supported pre-built bundle types are debug, base, full, audio, video, and video_hw. When the configuration file is absent, the build defaults to the base LGPL small bundle. debug maps to the base bundle and ignores small.
A platform-specific remote URL or local path overrides the pre-built bundle selection for that platform. Relative local paths are resolved from the consuming application directory:
{
"type": "base",
"gpl": true,
"small": true,
"android": "./native/ffmpeg-kit-custom.aar",
"ios": "https://example.com/bundle-custom-ios.xcframework.zip",
"appletvos": "./native/bundle-custom-appletvos.xcframework.zip",
"macos": "./native/bundle-custom-macos.xcframework",
"windows": "./native/bundle-custom-windows.zip",
"linux": "./native/bundle-custom-linux.zip"
}Execution model
React Native command execution is asynchronous. execute() and executeAsync() both return a Promise that resolves when the session finishes.
The native session starts asynchronously, while the TypeScript Session polls buffered native logs, statistics, and state. This keeps C callbacks and JavaScript callback lifetime management out of the C ABI boundary while preserving per-session completion/log/statistics callbacks.
import {
FFmpegKitExtended,
FFmpegKit,
ReturnCode,
} from 'ffmpeg-kit-extended';
FFmpegKitExtended.initialize();
const session = await FFmpegKit.executeAsync(
'-i input.mp4 -c:v libx264 output.mp4',
{
logCallback: log => console.log(log.message),
statisticsCallback: stats => console.log(stats.time, stats.speed),
},
);
if (session.getReturnCode() === ReturnCode.Success) {
console.log('Completed');
}import {FFprobeKit} from 'ffmpeg-kit-extended';
const session = await FFprobeKit.getMediaInformation('/path/to/video.mp4');
const media = session.getMediaInformation();
console.log(media?.format);
console.log(media?.streams);FFplay video and audio playback are supported on Android, iOS, Apple tvOS, macOS, and Windows. Mount FFplayView before starting video playback so the platform-native rendering surface is ready. Audio-only playback does not require a video surface.
import {FFplayKit, FFplayView} from 'ffmpeg-kit-extended';
export function Player() {
const play = async () => {
const session = FFplayKit.createSession(
'-hide_banner -autoexit -i "/path/to/video.mp4"',
);
await session.executeAsync();
};
return (
<>
<FFplayView style={{width: '100%', aspectRatio: 16 / 9}} />
{/* Call play() after the view is mounted. */}
</>
);
}Playback controls remain session based:
session.pause();
session.seek(10);
session.resume();
session.setVolume(0.5);FFplay rendering
Android video rendering is implemented by FFplayView using a native TextureView. iOS, Apple tvOS, and macOS use the decoded-frame callback path and present frames with AVSampleBufferDisplayLayer. Windows uses the same desktop decoded-frame callback and presents BGRA frames through a WinUI 3 Composition drawing surface. Audio playback uses FFplay's native audio backend and does not require a video surface.
Global native callback registration is also not exposed because per-session callbacks are dispatched by the TypeScript polling layer. This avoids duplicate callback paths and cross-thread JavaScript invocation.
Example applications
The React Native example under example/ contains Android, iOS, Apple tvOS, macOS, and Windows host projects. It demos the following workflows: FFmpeg generation/custom commands, remote recording and cancellation, FFprobe media information, FFplay controls, transcoding statistics, log-level controls, build introspection, file picking, and an on-screen log console.
The unified React Native example contains Android, iOS, Apple tvOS, macOS, and Windows native hosts under example/. Apple tvOS uses an isolated react-native-tvos runtime, and macOS uses the React Native macOS toolchain to exercise the same C++ TurboModule and the native FFplayView implementation with FFmpeg/FFprobe execution, generated video/audio playback, pause/resume/stop/seek/volume controls, aspect-ratio-preserving video output, and a resizable log pane.
The repository scripts prepare the matching native binary, native dependencies, and host application. Codegen is not pre-generated or shipped by this package: each consuming React Native app generates the required artifacts with its own platform toolchain during the native build.
./build.sh android
./build.sh ios
./build.sh appletvos
./build.sh macos
./build.sh windows
./launch.sh android
./launch.sh ios
./launch.sh appletvos
./launch.sh macos
./launch.sh windows./launch.sh appletvos and ./launch.sh macos open the matching platform-specific Metro server in a visible Terminal window. Because the Apple tvOS and macOS examples use different React Native runtimes, the launcher will stop a Metro process owned by another runtime in this repository before switching platforms. An unrelated process already using port 8081 is left untouched and reported as an error instead of serving an incompatible JavaScript bundle.
On Android, FFplayView supplies the native Android surface used by FFplay. On iOS, Apple tvOS, and macOS, FFplayView receives FFplay's decoded frame callback and presents frames through AVSampleBufferDisplayLayer. On Windows, it receives the desktop frame callback and draws frames into a WinUI 3 Composition surface. Audio playback continues through FFplay's native SDL audio backend.
Architecture
The binding has three layers:
- TypeScript API (
src/)FFmpegKit,FFprobeKit, andFFplayKitFFmpegKitExtendedandFFmpegKitConfigSession,FFmpegSession,FFprobeSession,FFplaySession, andMediaInformationSessionSessionQueueManagerwith default maximum concurrency of 8Log,Statistics,MediaInformation,StreamInformation, andChapterInformation
- React Native TurboModule (
src/NativeFFmpegKitExtended.ts,cpp/FFmpegKitExtendedImpl.*)- A typed Codegen boundary.
- Only scalar values and JSON strings cross the JavaScript/native boundary.
- libffmpegkit adapter (
cpp/FFmpegKitDynamicApi.*)- Resolves
ffmpegkit_wrapper.hexports withdlsymon Unix/Apple platforms andLoadLibrary/GetProcAddresson Windows. - Does not expose opaque native handles to JavaScript.
- Temporary session/media/statistics handles are released with
ffmpeg_kit_handle_release. - Native strings allocated by the wrapper are released with
ffmpeg_kit_free.
- Resolves
The adapter deliberately does not include ffmpegkit_wrapper.h. The source snapshot does not contain ffmpeg_tls.h, which that header includes, and the React Native bridge only needs the stable exported C ABI.
Supported External Libraries
| Bundle Key | Description |
| ---------- | ------------------------------------ |
| b+ | Base bundle and above. |
| a+ | Audio bundle and above. |
| v+ | Video bundle and above. |
| h+ | Video+Hardware bundle and above. |
| f | Full bundle only. |
| (empty) | not available on this platform. |
| Library | Android | Linux | Windows | tvOS | iOS | macOS |
| --------------------------------------------------------------------- | ------- | ----- | ------- | ---- | --- | ----- |
| System | | | | | | |
| bzlib, iconv, lzma, zlib | a+ | a+ | a+ | a+ | a+ | a+ |
| TLS / HTTPS4 (one selected per build) | | | | | | |
| openssl (default), gnutls, mbedtls, libtls | a+ | a+ | a+ | a+ | a+ | a+ |
| schannel | | | a+ | | | a+ |
| Streaming | | | | | | |
| libsrt, librist, librtmp | a+ | a+ | a+ | a+ | a+ | a+ |
| Audio Codecs | | | | | | |
| libcodec2, libgsm, libilbc, liblc3, libmodplug | a+ | a+ | a+ | a+ | a+ | a+ |
| libmp3lame, libopencore-amrnb, libopencore-amrwb | a+ | a+ | a+ | a+ | a+ | a+ |
| libopenmpt, libopus, libsoxr, libspeex, libtwolame | a+ | a+ | a+ | a+ | a+ | a+ |
| libvo-amrwbenc, libvorbis, openal | a+ | a+ | a+ | a+ | a+ | a+ |
| alsa | | a+ | | | | |
| libbs2b10 | a+ | a+ | a+ | a+ | a+ | a+ |
| libmpeghdec9 (custom deployment only) | a+ | a+ | a+ | a+ | a+ | a+ |
| Audio Extras (not in small builds) | | | | | | |
| chromaprint, libflite, libgme, libmysofa, libshine, lv2 | a+ | a+ | a+ | a+ | a+ | a+ |
| libcdio, librubberband10 | a+ | a+ | a+ | a+ | a+ | a+ |
| ladspa, libpulse, sndio | | a+ | | | | |
| libjack10 | | a+ | | | | |
| Video Libraries | | | | | | |
| lcms2, libaom, libaribcaption | v+ | v+ | v+ | v+ | v+ | v+ |
| libass, libbluray, libcaca, libdav1d | v+ | v+ | v+ | v+ | v+ | v+ |
| libdav1d, libfontconfig, libfreetype, libfribidi | v+ | v+ | v+ | v+ | v+ | v+ |
| libharfbuzz, libjxl, libkvazaar, liblcevc-dec | v+ | v+ | v+ | v+ | v+ | v+ |
| liboapv, libopenh264, libopenjpeg, librav1e | v+ | v+ | v+ | v+ | v+ | v+ |
| librsvg, libsnappy, libsvtav1, libtheora | v+ | v+ | v+ | v+ | v+ | v+ |
| libuavs3d, libvpx, libvvenc, libwebp | v+ | v+ | v+ | v+ | v+ | v+ |
| libxevd, libxeve, libzimg, libzvbi, libxml2, sdl2 | v+ | v+ | v+ | v+ | v+ | v+ |
| libdavs2, libdvdnav, libdvdread, libx26410 | v+ | v+ | v+ | v+ | v+ | v+ |
| libx265, libxavs, libxavs2, libaribb2410 | v+ | v+ | v+ | v+ | v+ | v+ |
| libdc1394, libiec61883, libsvtjpegxs | | v+ | | | | |
| libxvid10 | | v+ | | | | |
| libopencolorio15 | v+ | v+ | v+ | v+ | v+ | v+ |
| Video Extras (not in small builds) | | | | | | |
| libklvanc, liblensfun, libqrencode, libvmaf, vapoursynth | v+ | v+ | v+ | v+ | v+ | v+ |
| frei0r, libvidstab10 | v+ | v+ | v+ | | v+ | v+ |
| libv4l2, libxcb, libxcb-shape, libxcb-shm, libxcb-xfixes, xlib | | v+ | | | | |
| avisynth10 | | v+ | v+ | | | v+ |
| decklink9 (custom deployment only) | v+ | v+ | v+ | v+ | v+ | v+ |
| Hardware Acceleration | | | | | | |
| amf, libmfx, libplacebo, libvpl | h+ | h+ | h+ | h+ | h+ | h+ |
| opencl, opengl, vulkan, vulkan-static | h+ | h+ | h+ | h+ | h+ | h+ |
| ffnvcodec, cuvid, nvdec, nvenc12 (custom deployment only) | | h+ | h+ | | | |
| cuda-llvm, cuda-nvcc12 (custom deployment only) | | h+ | h+ | | | |
| libdrm, vaapi, rkmpp, vdpau | | h+ | | | | |
| v4l2-m2m10 | | h+ | | | | |
| AI (Full bundle only) | | | | | | |
| pocketsphinx, whisper | f | f | f | f | f | f |
| libopencv, libquirc, libtesseract11 | f | f | f | f | f | f |
| libopenvino, libtensorflow11 | | f | f | | | f |
| libonnxruntime11 | | f | f | | | f |
| libtorch11 | | f | | | | f |
| Nonfree additions (custom deployment only) | | | | | | |
| libfdk-aac9 | f | f | f | f | f | f |
| Platform-specific (All bundles) | | | | | | |
| jni, mediacodec | b+ | | | | | |
| appkit, avfoundation, audiotoolbox, coreimage, metal, securetransport | | | | b+ | b+ | b+ |
| videotoolbox, schannel, dxva2, d3d12va, d3d11va, mediafoundation | | | | b+ | b+ | b+ |
| appkit | | | | | | b+ |
| schannel, dxva2, d3d12va, d3d11va, mediafoundation | | | b+ | | | |
| alsa | | b+ | | | | |
frei0r, liblensfun, librsvg, and pocketsphinx are not available on
tvOS.
You can also get the full list of supported external libraries by running --list-libraries
| Library | Description | Platform1 | Extra2 | Base | Audio | Video | Video+Hardware | Full | | -------------------------------------------- | ------------------------------------------------------- | -------------------------------------- | -------------------------------- | ---- | ------------------ | ------------------ | ------------------ | ------------------- | | jni8 | Enables Java Native Interface interactions on Android | Android | | x | x | x | x | x | | appkit8 | Accesses AppKit for screen and window capture | Apple | | x | 9 | 9 | 9 | 9 | | avfoundation8 | Captures input from AVFoundation devices (cameras/mics) | Apple | | x | 9 | 9 | 9 | 9 | | pocketsphinx | Performs offline speech-to-text conversion | | | | | | | x | | whisper | Integrates OpenAI Whisper for speech recognition | | | | | | | x | | audiotoolbox8 | Accesses AudioToolbox for native codec support | Apple | | x | 9 | 9 | 9 | 9 | | alsa | Accesses ALSA for audio input and output | Linux | | x | x | x | x | x | | chromaprint | Calculates audio fingerprints for identification | | x | | x | x | x | x | | ladspa | Loads LADSPA plugins for audio filtering | Linux | x | | x | x | x | x | | libbs2b | Simulates binaural audio via DSP | | | | 10 | 10 | 10 | 10 | | libcdio | Reads and extracts audio from CDs | | 10 | | 10 | 10 | 10 | 10 | | libcodec2 | Encodes and decodes Codec2 speech format | | | | x | x | x | x | | libfdk-aac | Encodes and decodes high-quality AAC audio | | | | 9 | 9 | 9 | 9 | | libflite | Synthesizes speech from text (TTS) filter | | x | | x | x | x | x | | libgme | Emulates and plays video game music formats | | x | | x | x | x | x | | libgsm | Encodes and decodes GSM audio | | | | x | x | x | x | | libilbc | Encodes and decodes iLBC audio | | | | x | x | x | x | | libjack8 | Connects to the JACK audio connection kit | Linux | 10 | | 10 | 10 | 10 | 10 | | liblc3 | Encodes and decodes LC3 (Bluetooth LE) audio | | | | x | x | x | x | | libmodplug | Decodes module music formats (MOD, etc.) | | | | x | x | x | x | | libmp3lame | Encodes MP3 audio | | | | x | x | x | x | | libmysofa | Reads HRTF files for the sofalizer filter | | x | | x | x | x | x | | libopencore-amrnb | Encodes and decodes AMR-NB audio | | | | x | x | x | x | | libopencore-amrwb | Decodes AMR-WB audio | | | | x | x | x | x | | libopenmpt | Decodes tracked music files (OpenMPT based) | | | | x | x | x | x | | libopus | Encodes and decodes Opus audio | | | | x | x | x | x | | libpulse8 | Captures audio via PulseAudio server | Linux | x | | x | x | x | x | | librubberband | Performs high-quality time stretching/pitch shifting | | 10 | | 10 | 10 | 10 | 10 | | libshine | Encodes MP3 using fixed-point math | | x | | x | x | x | x | | libsoxr | Resamples audio using the SoX library | | | | x | x | x | x | | libspeex | Encodes and decodes Speex audio | | | | x | x | x | x | | libtwolame | Encodes MP2 audio | | | | x | x | x | x | | libvo-amrwbenc | Encodes AMR-WB audio | | | | x | x | x | x | | libvorbis | Encodes and decodes Vorbis audio | | | | x | x | x | x | | lv2 | Loads LV2 plugins for audio filtering | | x | | x | x | x | x | | openal | Captures audio via OpenAL 1.1 | | | | x | x | x | x | | sndio | Accesses sndio for audio I/O on OpenBSD | Linux | x | | x | x | x | x | | gcrypt | Provides crypto functions for RTMP/RTMPE | 3 | | | | | | | | gmp | Provides math functions for crypto contexts | 3 | | | | | | | | bzlib | Compresses and decompresses bzip2 streams | | | | x | x | x | x | | iconv | Converts character encodings for text/subtitles | | | | x | x | x | x | | libxml2 | Parses XML for DASH, IMF, and other formats | | | | | x | x | x | | lzma | Provides LZMA lossless data compression | | | | x | x | x | x | | zlib | Provides Deflate/zlib lossless data compression | | | | x | x | x | x | | amf | Accesses AMD Advanced Media Framework (GPU encoding) | | | | | | x | x | | mediacodec8 | Accesses Android MediaCodec hardware acceleration | Android | | x | | | x | x | | coreimage8 | Applies video filters via Apple CoreImage | Apple | | x | | | 9 | 9 | | metal8 | Utilizes Apple Metal for GPU acceleration | Apple | | x | | | 9 | 9 | | videotoolbox8 | Accesses VideoToolbox for hardware encoding/decoding | Apple | | x | | | 9 | 9 | | cuda-llvm8 | Compiles CUDA kernels at runtime using Clang | Nvidia | | | | | 12 | 12 | | cuda-nvcc8 | Compiles CUDA kernels using NVCC | Nvidia | | | | | 12 | 12 | | cuvid8 | Accesses Nvidia CUVID for decoding (Legacy) | Nvidia | | | | | 12 | 12 | | ffnvcodec | Provides headers for Nvidia codec API integration | Nvidia | | | | | 12 | 12 | | libdrm | Accesses Direct Rendering Manager for Linux GPU buffer | Linux | | | | | x | x | | libglslang14 | Compiles GLSL shaders to SPIR-V for Vulkan filters | | | | | | x | x | | libmfx14 | Accesses Intel Quick Sync Video (QSV) via MediaSDK | | | | | | x | x | | libnpp13 | Uses Nvidia Performance Primitives for image processing | Nvidia | | | | | | | | libplacebo | Applies high-quality GPU video processing filters | | | | | | x | x | | libshaderc14 | Compiles GLSL shaders to SPIR-V (Google implementation) | | | | | | x | x | | libvpl14 | Accesses Intel oneVPL video processing library | | | | | | x | x | | nvdec8 | Accesses Nvidia NVDEC for hardware decoding | Nvidia | | | | | 12 | 12 | | nvenc8 | Accesses Nvidia NVENC for hardware encoding | Nvidia | | | | | 12 | 12 | | opencl | Enables OpenCL-based video filtering | | | | | | x | x | | rkmpp | Accesses Rockchip Media Process Platform for HW codecs | Linux | | | | | x | x | | v4l2-m2m | Accesses V4L2 Memory-to-Memory hardware codecs | Linux | | | | | 10 | 10 | | vaapi | Accesses Video Acceleration API for HW codecs | Linux | | | | | x | x | | vdpau8 | Accesses VDPAU for hardware decoding on Unix | Linux+Nvidia | | | | | x | x | | vulkan | Enables Vulkan-based filtering and rendering | | | | | | x | x | | vulkan-static | Links libvulkan statically | | | | | | x | x | | opengl | Enables OpenGL-based rendering and filtering | | | | | | x | x | | d3d11va8 | Accesses Direct3D 11 for video acceleration | Windows | | x | | | 9 | 9 | | d3d12va8 | Accesses Direct3D 12 for video acceleration | Windows | | x | | | 9 | 9 | | dxva28 | Accesses DirectX 9 for video acceleration | Windows | | x | | | 9 | 9 | | mediafoundation8 | Accesses Windows Media Foundation for encoding | Windows | | x | | | 9 | 9 | | ohcodec8 | Accesses OpenHarmony multimedia codec capabilities | HarmonyOS | | | | | 9 | 9 | | mmal | Accesses Broadcom MMAL for Raspberry Pi multimedia | Raspberry Pi | | | | | 9 | 9 | | securetransport8 | Provides TLS/SSL support via Apple Secure Transport | Apple | | x | 4 | 4 | 4 | 4 | | gnutls | Provides TLS/SSL support via GnuTLS | | | | 4 | 4 | 4 | 4 | | libtls | Provides TLS/SSL support via LibreSSL | | | | 4 | 4 | 4 | 4 | | mbedtls | Provides TLS/SSL support via mbedTLS | | | | 4 | 4 | 4 | 4 | | openssl | Provides TLS/SSL support via OpenSSL | | | | 4 | 4 | 4 | 4 | | schannel8 | Provides TLS/SSL support via Windows SChannel | Windows | | x | 4 | 4 | 4 | 4 | | librabbitmq | Enables AMQP protocol support (RabbitMQ) | | 5 | | | | | | | libzmq | Enables ZeroMQ message passing protocol | | 5 | | | | | | | libsmbclient | Enables SMB/CIFS protocol support | | 6 & 10 | | | | | | | libssh | Enables SFTP protocol support | | 7 | | | | | | | librist | Enables Reliable Internet Stream Transport (RIST) | | | | x | x | x | x | | librtmp | Enables RTMP and RTMPE stream support | | | | x | x | x | x | | libsrt | Enables Secure Reliable Transport (SRT) protocol | | | | x | x | x | x | | libopencv | Applies computer vision filters via OpenCV | | | | | | | x | | libopenvino8 | Runs DNN-based filters using Intel OpenVINO backend | | | | | | | 11 | | libtensorflow8 | Runs DNN-based filters using TensorFlow backend | | | | | | | 11 | | libtorch8 | Runs DNN-based filters using PyTorch backend | | | | | | | 11 | | libonnxruntime8 | Runs DNN-based filters using ONNX Runtime backend | | | | | | | 11 | | libquirc | Decodes QR codes from video streams | | | | | | | x | | libtesseract | Performs Optical Character Recognition (OCR) | | | | | | | x | | sdl2 | Outputs audio/video to window using SDL2 | | | | x | x | x | x | | avisynth | Reads and demuxes AviSynth script files | | 10 | | | 10 | 10 | 10 | | decklink | Captures/Outputs via Blackmagic DeckLink devices | | | | | 9 | 9 | 9 | | frei0r | Loads Frei0r plugins for video filtering | | 10 | | | 10 | 10 | 10 | | lcms2 | Applies ICC color profiles using LittleCMS 2 | | | | | x | x | x | | libaom | Encodes and decodes AV1 video | | | | | x | x | x | | libaribb24 | Decodes ARIB STD-B24 captions | | | | | x | x | x | | libaribcaption | Decodes ARIB captions (alternative library) | | | | | x | x | x | | libass | Renders ASS/SSA subtitles | | | | | x | x | x | | libbluray | Reads Blu-ray playlists and protocols | | | | | x | x | x | | libcaca | Renders video as ASCII characters | | | | | x | x | x | | libdav1d | Decodes AV1 video (high performance) | | | | | x | x | x | | libdavs2 | Decodes AVS2 video | | | | | 10 | 10 | 10 | | libdc1394 | Captures video from FireWire cameras | Linux | | | | x | x | x | | libdvdnav | Navigates and demuxes DVD menus/content | | | | | 10 | 10 | 10 | | libdvdread | Reads DVD filesystem structures | | | | | 10 | 10 | 10 | | libfontconfig | Configures and locates fonts for text rendering | | | | | x | x | x | | libfreetype | Renders fonts for text overlays | | | | | x | x | x | | libfribidi | Handles bi-directional text logic | | | | | x | x | x | | libharfbuzz | Shapes complex text for subtitles | | | | | x | x | x | | libiec61883 | Captures DV/HDV via FireWire | Linux | | | | x | x | x | | libjxl | Encodes and decodes JPEG XL images | | | | | x | x | x | | libklvanc | Processes Vertical Ancillary Data (VANC) | | x | | | x | x | x | | libkvazaar | Encodes HEVC video | | | | | x | x | x | | liblcevc-dec | Decodes LCEVC video enhancement layers | | | | | x | x | x | | liblensfun | Corrects lens distortion using Lensfun | | x | | | x | x | x | | liboapv | Encodes OAPV (Open Advanced Photos/Video) | | | | | x | x | x | | libopenh264 | Encodes H.264 video (Cisco implementation) | | | | | x | x | x | | libopenjpeg | Encodes and decodes JPEG 2000 images | | | | | x | x | x | | libqrencode | Generates QR codes as video sources | | x | | | x | x | x | | librav1e | Encodes AV1 video (Rust implementation) | | | | | x | x | x | | librsvg | Renders SVG files for overlays | | | | | x | x | x | | libsnappy | Compresses data for the Hap codec | | | | | x | x | x | | libsvtav1 | Encodes AV1 video (SVT implementation) | | | | | x | x | x | | libtheora | Encodes Theora video | | | | | x | x | x | | libuavs3d | Decodes AVS3 video | | | | | x | x | x | | libv4l2 | Accesses V4L2 devices and utilities | Linux | x | | | x | x | x | | libvidstab | Stabilizes video using motion analysis | | 10 | | | 10 | 10 | 10 | | libvmaf | Calculates VMAF video quality scores | | x | | | x | x | x | | libvpx | Encodes and decodes VP8 and VP9 video | | | | | x | x | x | | libvvenc | Encodes H.266/VVC video | | | | | x | x | x | | libwebp | Encodes WebP images | | | | | x | x | x | | libx264 | Encodes H.264/AVC video | | | | | 10 | 10 | 10 | | libx265 | Encodes HEVC/H.265 video | | | | | 10 | 10 | 10 | | libxavs | Encodes AVS video | | | | | 10 | 10 | 10 | | libxavs2 | Encodes AVS2 video | | | | | 10 | 10 | 10 | | libxcb | Captures screen content via XCB | Linux | x | | | x | x | x | | libxcb-shape | Handles X11 shapes during capture | Linux | x | | | x | x | x | | libxcb-shm | Uses shared memory for X11 capture | Linux | x | |
