This example app is a feature playground for @capgo/capacitor-ffmpeg. It does two jobs:
- It gives contributors a concrete UI for the plugin surface that exists today.
- It provides automated tests for the app-side contract, including the expected unsupported behavior on web and Android.
getPluginVersion()renderinggetCapabilities()renderingprogresslistener registration and UI updates- picker-backed
reencodeVideo()queue flow on iOS - picker-backed
convertImage()flow on iOS and Android, including photo -> WebP conversion on Android - Unsupported
reencodeVideo()smoke checks on platforms that report no media pipeline - Unsupported
convertImage()smoke checks on platforms that report no native image conversion path
bun install
bun run startbun run testbun run verifybun run maestro:ios
bun run maestro:android
bun run maestro:android:ciThe Android script now uses Maestro's supported default driver bootstrap path. If you need the old explicit driver install and port-forward workaround for a local machine, set MAESTRO_ANDROID_MANUAL_DRIVER=1.
bun run maestro:android:ci is the full Android local/CI launcher. It:
- boots an existing local AVD when possible
- falls back to creating a supported Android 33 emulator if no AVD exists
- builds the plugin and example app, syncs Android, installs the debug APK, and then runs the Maestro flows
Useful overrides:
MAESTRO_ANDROID_AVDto force a specific local AVD nameMAESTRO_ANDROID_SKIP_PREBUILD=1to skip the build/sync/assemble phaseMAESTRO_ANDROID_PREPARE_ONLY=1to stop after booting the emulator and installing the appMAESTRO_ANDROID_MANUAL_DRIVER=1to force the old explicit Maestro driver install/instrumentation flow
If you change dependencies or native config in this example, sync the platforms:
bunx cap sync ios
bunx cap sync androidweb: capability inspection, progress-listener registration, and unsupported-path smoke checksandroid: capability inspection, native image conversion, and unsupported video re-encode smoke checksios: capability inspection, photo/video pickers, native image conversion, and native FFmpeg re-encode with progress events