One object
Same FPlayer.
Five native cores.
Create once, then move from a phone to a desktop window without rewriting the playback state machine.
Cross-platform media engine· fplayercore 1.2.12
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.
One runtime · five targets
Pick a target. The same FPlayer state, texture and audio-track calls land on that platform's native layer.
The native fplayercore path is active. This is the state FPlayer ships with on every supported platform.
What stays constant
Platform teams get their own surfaces and packages. Product teams get one player model.
One object
Create once, then move from a phone to a desktop window without rewriting the playback state machine.
Audio tracks
Read language, codec and sample rate. Select a stream by index.
Adaptive surface
Rotation, resize and fullscreen are handled by FView and the native texture.
Distribution
Maven Central AAR, SwiftPM binaryTarget, Windows DLL and OpenHarmony HAR all come from the same ijkplayer release.
From first frame to first switch
Initialize, prepare, inspect tracks, choose one. The platform never leaks into the Dart call site.
Create the player and set a source.
Prepare once and read the media metadata.
Select any audio track by stream index.
// one player, every target
final player = FPlayer();
await player.setDataSource(url);
await player.prepareAsync();
final tracks = await player.getAudioTracks();
await player.setAudioTrack(tracks.first);Build for every screen
Start with one Flutter app. Add a platform when you need it. FPlayer and fplayercore keep the contract.