Spaces:
Paused
Paused
| fvp 0.31.2  | |
| fvp: ^0.31.2 copied to clipboard | |
| ====================================================================================================================================================================== | |
| Published 9 days ago • [mediadevkit.com](/publishers/mediadevkit.com)Dart 3 compatible | |
| SDK[Flutter](/packages?q=sdk%3Aflutter "Packages compatible with Flutter SDK") | |
| Platform[Android](/packages?q=platform%3Aandroid "Packages compatible with Android platform")[iOS](/packages?q=platform%3Aios "Packages compatible with iOS platform")[Linux](/packages?q=platform%3Alinux "Packages compatible with Linux platform")[macOS](/packages?q=platform%3Amacos "Packages compatible with macOS platform")[Windows](/packages?q=platform%3Awindows "Packages compatible with Windows platform") | |
| 123 | |
| → | |
| ### Metadata | |
| video\_player plugin and backend APIs. Support all desktop/mobile platforms with hardware decoders, optimal renders. Supports most formats via FFmpeg | |
| More... | |
| * Readme | |
| * [Changelog](/packages/fvp/changelog) | |
| * [Example](/packages/fvp/example) | |
| * [Installing](/packages/fvp/install) | |
| * [Versions](/packages/fvp/versions) | |
| * [Scores](/packages/fvp/score) | |
| FVP [#](#fvp) | |
| ============= | |
| A plugin for official [Flutter Video Player](https://pub.dev/packages/video_player) to support all desktop and mobile platforms, with hardware accelerated decoding and optimal rendering. Based on [libmdk](https://github.com/wang-bin/mdk-sdk). You can also create your own players other than official `video_player` with [backend player api](#backend-player-api) | |
| Prebuilt example can be download from artifacts of [github actions](https://github.com/wang-bin/fvp/actions). | |
| [More examples are here](https://github.com/wang-bin/mdk-examples/tree/master/flutter) | |
| project is create with `flutter create -t plugin --platforms=linux,macos,windows,android,ios -i objc -a java fvp` | |
| Features [#](#features) | |
| ----------------------- | |
| * All platforms: Windows x64(including win7) and arm64, Linux x64 and arm64, macOS, iOS, Android(requires flutter > 3.19 because of minSdk 21). | |
| * You can choose official implementation or this plugin's | |
| * Optimal render api: d3d11 for windows, metal for macOS/iOS, OpenGL for Linux and Android(Impeller support) | |
| * Hardware decoders are enabled by default | |
| * Dolby Vision support on all platforms | |
| * Minimal code change for existing [Video Player](https://pub.dev/packages/video_player) apps | |
| * Support most formats via FFmpeg demuxer and software decoders if not supported by gpu. You can use your own ffmpeg 4.0~7.1(or master branch) by removing bundled ffmpeg dynamic library. | |
| * High performance. Lower cpu, gpu and memory load than libmpv based players. | |
| * Support audio without video | |
| * HEVC, VP8 and VP9 transparent video | |
| * Small footprint. Only about 10MB size increase per cpu architecture(platform dependent). | |
| How to Use [#](#how-to-use) | |
| --------------------------- | |
| * Add [fvp](https://pub.dev/packages/fvp) in your pubspec.yaml dependencies: `flutter pub add fvp`. Since flutter 3.27, fvp must be a direct dependency in your app's pubspec.yaml. | |
| * **(Optional)** Add 2 lines in your video\_player examples. Without this step, this plugin will be used for video\_player unsupported platforms(windows, linux), official implementation will be used otherwise. | |
| import 'package:fvp/fvp.dart' as fvp; | |
| fvp.registerWith(); // in main() or anywhere before creating a player. use fvp for all platforms. | |
| copied to clipboard | |
| You can also select the platforms to enable fvp implementation | |
| registerWith(options: {'platforms': ['windows', 'macos', 'linux']}); // only these platforms will use this plugin implementation | |
| copied to clipboard | |
| To select [other decoders](https://github.com/wang-bin/mdk-sdk/wiki/Decoders), pass options like this | |
| fvp.registerWith(options: { | |
| 'video.decoders': ['D3D11', 'NVDEC', 'FFmpeg'] | |
| //'lowLatency': 1, // optional for network streams | |
| }); // windows | |
| copied to clipboard | |
| [The document](https://pub.dev/documentation/fvp/latest/fvp/registerWith.html) lists all options for `registerWith()` | |
| ### Error Handling [#](#error-handling) | |
| Errors are usually produced when loading a media. | |
| _controller.addListener(() { | |
| if (_controller.value.hasError && !_controller.value.isCompleted) { | |
| ... | |
| copied to clipboard | |
| ### Backend Player API [#](#backend-player-api) | |
| import 'package:fvp/mdk.dart'; | |
| copied to clipboard | |
| The plugin implements [VideoPlayerPlatform](https://pub.dev/packages/video_player_platform_interface) via [a thin wrapper](https://github.com/wang-bin/fvp/blob/master/lib/video_player_mdk.dart) on [player.dart](https://github.com/wang-bin/fvp/blob/master/lib/src/player.dart). | |
| Now we also expose this backend player api so you can create your own players easily, and gain more features than official [video\_player](https://pub.dev/packages/video_player), for example, play from a given position, loop in a range, decoder selection, media information detail etc. You can also reuse the Player instance without unconditionally create and dispose, changing the `Player.media` is enough. [This is an example](https://github.com/wang-bin/mdk-examples/blob/master/flutter/simple/lib/multi_textures.dart) | |
| ### VideoPlayerController Extensions [#](#videoplayercontroller-extensions) | |
| With this extension, we can leverage mature `video_player` code without rewriting a new one via backend player api, but gain more features, for example `snapshot()`, `record()`, `fastSeekTo()`, `setExternalSubtitle()`. | |
| import 'package:fvp/fvp.dart' as fvp; | |
| fvp.registerWith(); // in main() or anywhere before creating a player. use fvp for all platforms. | |
| // somewhere after controller is initialized | |
| _controller.record('rtmp://127.0.0.1/live/test'); | |
| copied to clipboard | |
| Upgrade Dependencies Manually [#](#upgrade-dependencies-manually) | |
| ================================================================= | |
| Upgrading binary dependencies can bring new features and backend bug fixes. For macOS and iOS, in your project dir, run | |
| pod cache clean mdk | |
| find . -name Podfile.lock -delete | |
| rm -rf {mac,i}os/Pods | |
| copied to clipboard | |
| For other platforms, set environment var `FVP_DEPS_LATEST=1` and rebuilt, will upgrade to the latest sdk. If fvp is installed from pub.dev, run `flutter pub cache clean` is another option. | |
| Design [#](#design) | |
| =================== | |
| * Playback control api in dart via ffi | |
| * Manage video renderers in platform specific manners. Receive player ptr via `MethodChannel` to construct player instance and set a renderer target. | |
| * Callbacks and events in C++ are notified by ReceivePort | |
| * Function with a one time callback is async and returns a future | |
| Enable Subtitles [#](#enable-subtitles) | |
| ======================================= | |
| libass is required, and it's added to your app automatically for windows, macOS and android(remove ass.dll, libass.dylib and libass.so from mdk-sdk if you don't need it). For iOS, [download](https://sourceforge.net/projects/mdk-sdk/files/deps/dep.7z/download) and add `ass.framework` to your xcode project. For linux, system libass can be used, you may have to install manually via system package manager. | |
| If required subtitle font is not found in the system(e.g. android), you can add [assets/subfont.ttf](https://github.com/mpv-android/mpv-android/raw/master/app/src/main/assets/subfont.ttf) in pubspec.yaml assets as the fallback. Optionally you can also download the font file by fvp like this | |
| fvp.registerWith(options: { | |
| 'subtitleFontFile': 'https://github.com/mpv-android/mpv-android/raw/master/app/src/main/assets/subfont.ttf' | |
| }); | |
| copied to clipboard | |
| DO NOT use flutter-snap [#](#do-not-use-flutter-snap) | |
| ===================================================== | |
| Flutter can be installed by snap, but it will add some [enviroment vars(`CPLUS_INCLUDE_PATH` and `LIBRARY_PATH`) which may break C++ compiler](https://github.com/canonical/flutter-snap/blob/main/env.sh#L15-L18). It's not recommended to use snap, althrough building for linux is [fixed](https://github.com/wang-bin/fvp/commit/567c68270ba16b95b1198ae58850707ae4ad7b22), but it's not possible for android. | |
| Screenshots [#](#screenshots) | |
| ============================= | |
|       | |
| [ | |
| 123 | |
| likes | |
| 150 | |
| points | |
| 4.48k | |
| downloads | |
| ](/packages/fvp/score) | |
| ### Publisher | |
| [mediadevkit.com](/publishers/mediadevkit.com) | |
| ### Weekly Downloads | |
| 2024.10.07 - 2025.04.21 | |
| ### Metadata | |
| video\_player plugin and backend APIs. Support all desktop/mobile platforms with hardware decoders, optimal renders. Supports most formats via FFmpeg | |
| [Repository (GitHub)](https://github.com/wang-bin/fvp) | |
| ### Topics | |
| [#video](/packages?q=topic%3Avideo) [#player](/packages?q=topic%3Aplayer) [#video-player](/packages?q=topic%3Avideo-player) [#audio-player](/packages?q=topic%3Aaudio-player) [#videoplayer](/packages?q=topic%3Avideoplayer) | |
| ### Documentation | |
| [API reference](/documentation/fvp/latest/) | |
| ### License | |
| BSD-3-Clause ([license](/packages/fvp/license)) | |
| ### Dependencies | |
| [ffi](/packages/ffi "^2.1.0"), [flutter](https://api.flutter.dev/), [http](/packages/http "^1.0.0"), [logging](/packages/logging "^1.2.0"), [path](/packages/path "^1.8.0"), [path\_provider](/packages/path_provider "^2.1.2"), [plugin\_platform\_interface](/packages/plugin_platform_interface "^2.0.0"), [video\_player](/packages/video_player "^2.6.0"), [video\_player\_platform\_interface](/packages/video_player_platform_interface "^6.2.0") | |
| ### More | |
| [Packages that depend on fvp](/packages?q=dependency%3Afvp) | |
| {"@context":"http\\u003a\\u002f\\u002fschema.org","@type":"SoftwareSourceCode","name":"fvp","version":"0.31.2","description":"fvp - video\\u005fplayer plugin and backend APIs. Support all desktop\\u002fmobile platforms with hardware decoders, optimal renders. Supports most formats via FFmpeg","url":"https\\u003a\\u002f\\u002fpub.dev\\u002fpackages\\u002ffvp","dateCreated":"2023-06-26T16\\u003a23\\u003a33.605901Z","dateModified":"2025-04-14T04\\u003a14\\u003a34.630262Z","programmingLanguage":"Dart","image":"https\\u003a\\u002f\\u002fpub.dev\\u002fstatic\\u002fimg\\u002fpub-dev-icon-cover-image.png","license":"https\\u003a\\u002f\\u002fpub.dev\\u002fpackages\\u002ffvp\\u002flicense"} |