Fplayer

One Dart API. Five native players.

Start buildingExplore the player API

Cross-platform media engine· fplayercore 1.2.12

Play once.Everywhere.

One Dart API for the native fplayercore kernels on Android, iOS, macOS, Windows and OpenHarmony. Reuse the interface across platforms without giving up the platform experience.

Android iOS macOS Windows OpenHarmony

One runtime · five targets

A single player object.
Five native surfaces.

Pick a target. The same FPlayer state, texture and audio-track calls land on that platform's native layer.

native bridge

Hardware decode is on.

The native fplayercore path is active. This is the state FPlayer ships with on every supported platform.

Dart FPlayer→MethodChannel / NAPI→fplayercore
Native decode. Texture output.hardware path

What stays constant

The API is shared.
The details are not.

Platform teams get their own surfaces and packages. Product teams get one player model.

One object

Same FPlayer.
Five native cores.

Create once, then move from a phone to a desktop window without rewriting the playback state machine.

AndroidiOSmacOSWindowsOpenHarmony

Audio tracks

Language is a switch, not a rebuild.

English · AACon
Commentary
Japanese · AAC

Read language, codec and sample rate. Select a stream by index.

Adaptive surface

One frame, every screen.

Rotation, resize and fullscreen are handled by FView and the native texture.

Distribution

Each platform gets its own official package.

Maven Central AAR, SwiftPM binaryTarget, Windows DLL and OpenHarmony HAR all come from the same ijkplayer release.

MavenAndroid AARSPMApple binaryTargetDLLWindows x64HAROpenHarmony

From first frame to first switch

One API.
No forks.

Initialize, prepare, inspect tracks, choose one. The platform never leaks into the Dart call site.

  1. 01

    Create the player and set a source.

  2. 02

    Prepare once and read the media metadata.

  3. 03

    Select any audio track by stream index.

Open the full API →
video_page.dartDart
// one player, every target
final player = FPlayer();

await player.setDataSource(url);
await player.prepareAsync();

final tracks = await player.getAudioTracks();
await player.setAudioTrack(tracks.first);
Android · iOS · macOS · Windows · OpenHarmonyfplayercore 1.2.12

Build for every screen

Ship it everywhere.

Start with one Flutter app. Add a platform when you need it. FPlayer and fplayercore keep the contract.

AndroidiOSmacOSWindowsOpenHarmony